From cf4550c3198d6b3d92cdc52707fe70d7cc0caa9f Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Queru Date: Tue, 21 Jul 2009 11:16:54 -0700 Subject: [PATCH] donut snapshot --- Android.mk | 29 +- NOTICE | 51 + api/4.xml | 37 +- api/current.xml | 6343 ++++++++++++++++- camera/libcameraservice/CameraService.cpp | 344 +- camera/libcameraservice/CameraService.h | 11 +- cmds/am/am | 2 +- cmds/am/src/com/android/commands/am/Am.java | 61 +- cmds/backup/Android.mk | 15 + cmds/backup/NOTICE | 190 + cmds/backup/backup.cpp | 118 + cmds/bmgr/Android.mk | 15 + cmds/bmgr/MODULE_LICENSE_APACHE2 | 0 cmds/bmgr/NOTICE | 190 + cmds/bmgr/bmgr | 7 + .../src/com/android/commands/bmgr/Bmgr.java | 403 ++ cmds/bootanimation/Android.mk | 30 + .../bootanimation}/BootAnimation.cpp | 27 +- .../bootanimation}/BootAnimation.h | 6 +- cmds/bootanimation/bootanimation_main.cpp | 52 + cmds/dumpstate/dumpstate.c | 3 +- cmds/keystore/Android.mk | 22 + cmds/keystore/certtool.h | 91 + cmds/keystore/common.h | 60 + cmds/keystore/keymgmt.c | 372 + cmds/keystore/keymgmt.h | 82 + cmds/keystore/keystore_get.h | 53 + cmds/keystore/netkeystore.c | 410 ++ cmds/keystore/netkeystore.h | 96 + cmds/pm/src/com/android/commands/pm/Pm.java | 3 + cmds/runtime/main_runtime.cpp | 4 +- .../AccessibilityService.java | 225 + .../AccessibilityServiceInfo.aidl | 19 + .../AccessibilityServiceInfo.java | 145 + .../IAccessibilityServiceConnection.aidl | 30 + .../accessibilityservice/IEventListener.aidl | 34 + core/java/android/app/Activity.java | 105 +- .../android/app/ActivityManagerNative.java | 114 +- core/java/android/app/ActivityThread.java | 304 +- core/java/android/app/ApplicationContext.java | 153 +- .../android/app/ApplicationErrorReport.java | 308 + .../android/app/ApplicationThreadNative.java | 75 +- .../BackupAgent.java} | 101 +- core/java/android/app/DatePickerDialog.java | 2 - core/java/android/app/Dialog.java | 34 +- core/java/android/app/FullBackupAgent.java | 58 + core/java/android/app/IActivityManager.java | 39 +- core/java/android/app/IApplicationThread.java | 20 +- .../IBackupAgent.aidl} | 13 +- core/java/android/app/ISearchManager.aidl | 17 + .../android/app/ISearchManagerCallback.aidl | 23 + core/java/android/app/Instrumentation.java | 10 +- core/java/android/app/LauncherActivity.java | 28 +- core/java/android/app/PendingIntent.java | 20 +- core/java/android/app/SearchDialog.java | 444 +- core/java/android/app/SearchManager.java | 502 +- core/java/android/app/SuggestionsAdapter.java | 373 +- .../java/android/appwidget/AppWidgetHost.java | 12 +- .../android/appwidget/AppWidgetHostView.java | 7 +- .../android/appwidget/AppWidgetManager.java | 15 +- .../backup/AbsoluteFileBackupHelper.java | 66 + core/java/android/backup/BackupDataInput.java | 117 + .../android/backup/BackupDataInputStream.java | 63 + .../java/android/backup/BackupDataOutput.java | 54 +- core/java/android/backup/BackupHelper.java | 46 + .../android/backup/BackupHelperAgent.java | 56 + .../backup/BackupHelperDispatcher.java | 151 + core/java/android/backup/BackupManager.java | 70 +- .../java/android/backup/FileBackupHelper.java | 69 +- .../android/backup/FileBackupHelperBase.java | 130 + core/java/android/backup/IBackupManager.aidl | 100 +- .../java/android/backup/IRestoreObserver.aidl | 50 + core/java/android/backup/IRestoreSession.aidl | 55 + core/java/android/backup/RestoreSet.aidl | 19 + core/java/android/backup/RestoreSet.java | 87 + .../backup/SharedPreferencesBackupHelper.java | 41 +- .../android/bluetooth/BluetoothHeadset.java | 25 + core/java/android/bluetooth/HeadsetBase.java | 16 +- .../android/bluetooth/IBluetoothHeadset.aidl | 1 + .../AbstractSyncableContentProvider.java | 170 +- .../android/content/AbstractTableMerger.java | 50 +- core/java/android/content/Context.java | 51 +- core/java/android/content/ContextWrapper.java | 18 +- .../java/android/content/IIntentReceiver.aidl | 33 + core/java/android/content/IIntentSender.aidl | 26 + core/java/android/content/Intent.java | 435 +- core/java/android/content/IntentFilter.java | 1 + core/java/android/content/IntentSender.aidl | 19 + core/java/android/content/IntentSender.java | 255 + .../android/content/SyncStorageEngine.java | 14 +- .../java/android/content/pm/ActivityInfo.java | 10 +- .../android/content/pm/ApplicationInfo.java | 87 +- .../android/content/pm/ConfigurationInfo.java | 30 +- .../android/content/pm/IPackageManager.aidl | 18 +- .../android/content/pm/PackageManager.java | 43 +- .../android/content/pm/PackageParser.java | 188 +- .../content/res/AssetFileDescriptor.java | 88 + .../android/content/res/AssetManager.java | 2 +- .../content/res/CompatibilityInfo.java | 491 ++ .../android/content/res/Configuration.java | 37 +- core/java/android/content/res/Resources.java | 98 +- .../database/BulkCursorToCursorAdaptor.java | 8 +- .../database/sqlite/SQLiteContentHelper.java | 92 + .../database/sqlite/SQLiteQueryBuilder.java | 12 +- core/java/android/gesture/Gesture.java | 341 + .../android/gesture/GestureConstants.java | 26 + .../android/gesture/GestureLibraries.java | 143 + core/java/android/gesture/GestureLibrary.java | 81 + .../android/gesture/GestureOverlayView.java | 793 +++ core/java/android/gesture/GesturePoint.java | 46 + core/java/android/gesture/GestureStore.java | 330 + core/java/android/gesture/GestureStroke.java | 229 + .../android/gesture/GestureUtilities.java | 475 ++ core/java/android/gesture/Instance.java | 113 + .../java/android/gesture/InstanceLearner.java | 88 + core/java/android/gesture/Learner.java | 83 + .../android/gesture/OrientedBoundingBox.java | 85 + core/java/android/gesture/Prediction.java | 33 + core/java/android/gesture/package.html | 5 + core/java/android/hardware/Camera.java | 38 +- .../java/android/hardware/ISensorService.aidl | 4 +- core/java/android/hardware/SensorManager.java | 72 +- core/java/android/net/http/RequestHandle.java | 6 +- core/java/android/os/AsyncTask.java | 6 +- core/java/android/os/BatteryStats.java | 45 +- core/java/android/os/Build.java | 25 + core/java/android/os/Bundle.java | 68 +- core/java/android/os/Debug.java | 15 + core/java/android/os/MemoryFile.java | 192 +- core/java/android/os/Parcel.java | 68 +- core/java/android/os/Process.java | 30 +- core/java/android/pim/EventRecurrence.java | 14 +- .../preference/CheckBoxPreference.java | 34 +- .../android/preference/PreferenceScreen.java | 12 +- core/java/android/provider/Browser.java | 65 +- core/java/android/provider/CallLog.java | 20 +- core/java/android/provider/Checkin.java | 5 +- core/java/android/provider/Contacts.java | 43 +- core/java/android/provider/MediaStore.java | 23 +- core/java/android/provider/Settings.java | 446 +- core/java/android/provider/Telephony.java | 31 +- .../server/BluetoothDeviceService.java | 6 + .../server/search/SearchManagerService.java | 289 +- .../android/server/search/SearchableInfo.java | 54 +- .../android/server/search/Searchables.java | 254 +- .../android/speech/IRecognitionListener.aidl | 17 +- .../android/speech/IRecognitionService.aidl | 3 + .../android/speech/RecognitionResult.aidl | 19 + .../android/speech/RecognitionResult.java | 162 + .../speech/RecognitionServiceUtil.java | 12 +- core/java/android/speech/tts/ITts.aidl | 63 + .../java/android/speech/tts/ITtsCallback.aidl | 27 + .../java/android/speech/tts/TextToSpeech.java | 719 ++ .../java/android/syncml/pim/PropertyNode.java | 194 +- .../syncml/pim/VBuilderCollection.java | 100 + .../java/android/syncml/pim/VDataBuilder.java | 293 +- core/java/android/syncml/pim/VParser.java | 17 + .../syncml/pim/vcard/ContactStruct.java | 943 ++- .../syncml/pim/vcard/VCardComposer.java | 35 +- .../syncml/pim/vcard/VCardDataBuilder.java | 442 ++ .../syncml/pim/vcard/VCardEntryCounter.java | 63 + .../pim/vcard/VCardNestedException.java | 27 + .../syncml/pim/vcard/VCardParser_V21.java | 638 +- .../syncml/pim/vcard/VCardParser_V30.java | 111 +- .../syncml/pim/vcard/VCardSourceDetector.java | 140 + core/java/android/test/AndroidTestCase.java | 72 +- .../android/test/InstrumentationTestCase.java | 24 +- core/java/android/text/LoginFilter.java | 41 +- core/java/android/text/TextUtils.java | 11 + core/java/android/text/format/DateFormat.java | 88 +- core/java/android/text/format/DateUtils.java | 130 +- core/java/android/text/format/Formatter.java | 10 +- core/java/android/text/format/Time.java | 16 + .../text/method/DialerKeyListener.java | 2 +- core/java/android/text/method/Touch.java | 6 + core/java/android/util/CharsetUtils.java | 13 +- core/java/android/util/DisplayMetrics.java | 86 +- core/java/android/util/LongSparseArray.java | 342 + core/java/android/view/GestureDetector.java | 5 +- core/java/android/view/MotionEvent.java | 186 +- core/java/android/view/SurfaceView.java | 75 +- core/java/android/view/VelocityTracker.java | 21 +- core/java/android/view/View.java | 484 +- core/java/android/view/ViewConfiguration.java | 25 + core/java/android/view/ViewDebug.java | 92 +- core/java/android/view/ViewGroup.java | 114 +- core/java/android/view/ViewRoot.java | 381 +- core/java/android/view/Window.java | 19 +- core/java/android/view/WindowManager.java | 88 +- core/java/android/view/WindowManagerImpl.java | 1 - .../accessibility/AccessibilityEvent.aidl | 19 + .../accessibility/AccessibilityEvent.java | 734 ++ .../AccessibilityEventSource.java | 52 + .../accessibility/AccessibilityManager.java | 198 + .../accessibility/IAccessibilityManager.aidl | 39 + .../IAccessibilityManagerClient.aidl | 29 + .../view/inputmethod/BaseInputConnection.java | 29 +- core/java/android/webkit/BrowserFrame.java | 13 + .../java/android/webkit/ByteArrayBuilder.java | 15 + core/java/android/webkit/FrameLoader.java | 2 +- .../android/webkit/JWebCoreJavaBridge.java | 10 + core/java/android/webkit/LoadListener.java | 36 +- core/java/android/webkit/TextDialog.java | 3 +- core/java/android/webkit/WebSettings.java | 54 +- core/java/android/webkit/WebView.java | 99 +- core/java/android/webkit/WebViewCore.java | 44 +- .../gears/AndroidRadioDataProvider.java | 10 +- core/java/android/widget/AbsListView.java | 152 +- core/java/android/widget/AdapterView.java | 43 +- core/java/android/widget/AlphabetIndexer.java | 2 +- .../widget/AppSecurityPermissions.java | 31 +- core/java/android/widget/ArrayAdapter.java | 7 +- .../android/widget/AutoCompleteTextView.java | 221 +- core/java/android/widget/CheckedTextView.java | 15 +- core/java/android/widget/CompoundButton.java | 22 +- .../android/widget/ExpandableListView.java | 5 + core/java/android/widget/FastScroller.java | 40 +- core/java/android/widget/FrameLayout.java | 29 +- .../android/widget/HorizontalScrollView.java | 13 +- core/java/android/widget/ImageButton.java | 32 +- core/java/android/widget/ImageView.java | 6 +- core/java/android/widget/ListView.java | 113 +- .../widget/MultiAutoCompleteTextView.java | 2 + core/java/android/widget/PopupWindow.java | 46 +- core/java/android/widget/ProgressBar.java | 11 +- core/java/android/widget/RelativeLayout.java | 598 +- core/java/android/widget/RemoteViews.java | 69 +- core/java/android/widget/ScrollView.java | 13 +- core/java/android/widget/SlidingDrawer.java | 26 +- core/java/android/widget/TabHost.java | 49 +- core/java/android/widget/TabWidget.java | 110 +- core/java/android/widget/TextView.java | 281 +- core/java/android/widget/Toast.java | 5 +- core/java/android/widget/VideoView.java | 11 +- core/java/android/widget/ViewSwitcher.java | 2 - .../android/widget/ZoomButtonsController.java | 27 +- .../android/internal/app/IBatteryStats.aidl | 5 +- .../internal/backup/IBackupTransport.aidl | 116 +- .../internal/backup/LocalTransport.java | 200 + .../internal/backup/SystemBackupAgent.java | 35 + .../android/internal/os/BatteryStatsImpl.java | 446 +- .../com/android/internal/os/PowerProfile.java | 238 + .../com/android/internal/os/ZygoteInit.java | 2 +- .../internal/util/BitwiseInputStream.java | 13 +- .../internal/util/BitwiseOutputStream.java | 7 +- .../google/android/net/GoogleHttpClient.java | 120 +- .../android/util/GoogleWebContentHelper.java | 13 +- core/jni/Android.mk | 9 +- core/jni/AndroidRuntime.cpp | 10 +- {libs/ui => core/jni}/Time.cpp | 2 +- {include/utils => core/jni}/TimeUtils.h | 0 core/jni/android/graphics/Bitmap.cpp | 54 +- core/jni/android/graphics/BitmapFactory.cpp | 7 +- core/jni/android/graphics/Paint.cpp | 2 + core/jni/android_backup_BackupDataInput.cpp | 164 + core/jni/android_backup_BackupDataOutput.cpp | 128 + .../android_backup_BackupHelperDispatcher.cpp | 259 + core/jni/android_backup_FileBackupHelper.cpp | 84 - .../android_backup_FileBackupHelperBase.cpp | 136 + core/jni/android_bluetooth_Database.cpp | 1 + core/jni/android_emoji_EmojiFactory.cpp | 87 +- core/jni/android_hardware_Camera.cpp | 335 +- core/jni/android_hardware_SensorManager.cpp | 37 +- .../android_location_GpsLocationProvider.cpp | 17 +- core/jni/android_media_AudioRecord.cpp | 34 +- core/jni/android_media_AudioTrack.cpp | 7 +- core/jni/android_net_wifi_Wifi.cpp | 7 +- core/jni/android_opengl_GLES10.cpp | 25 +- core/jni/android_os_MemoryFile.cpp | 82 +- .../android_server_BluetoothA2dpService.cpp | 1 + .../android_server_BluetoothDeviceService.cpp | 1 + .../jni/android_server_BluetoothEventLoop.cpp | 33 +- core/jni/android_text_format_Time.cpp | 13 +- core/jni/android_util_AssetManager.cpp | 5 +- core/jni/android_util_Process.cpp | 81 +- .../com_google_android_gles_jni_GLImpl.cpp | 62 +- core/res/AndroidManifest.xml | 79 +- core/res/res/anim/slide_in_up.xml | 23 + core/res/res/anim/slide_out_down.xml | 23 + core/res/res/drawable/call_contact.png | Bin 0 -> 1025 bytes core/res/res/drawable/create_contact.png | Bin 0 -> 1132 bytes core/res/res/drawable/progress.xml | 40 - .../drawable/progress_circular_background.png | Bin 2044 -> 0 bytes .../progress_circular_background_small.png | Bin 484 -> 0 bytes .../progress_circular_indeterminate.png | Bin 2371 -> 0 bytes core/res/res/drawable/progress_large.xml | 66 +- .../res/drawable/progress_large_white.xml} | 24 +- core/res/res/drawable/progress_medium.xml | 64 +- ...erminate.xml => progress_medium_white.xml} | 23 +- core/res/res/drawable/progress_small.xml | 66 +- .../res/drawable/progress_small_titlebar.xml | 66 +- .../res/drawable/progress_small_white.xml} | 28 +- core/res/res/drawable/rate_star_big_half.png | Bin 1224 -> 818 bytes core/res/res/drawable/rate_star_big_off.png | Bin 482 -> 527 bytes core/res/res/drawable/rate_star_big_on.png | Bin 2017 -> 992 bytes .../drawable/search_dropdown_background.9.png | Bin 229 -> 3058 bytes .../search_dropdown_background_apps.9.png | Bin 412 -> 0 bytes core/res/res/drawable/search_spinner.xml | 25 + core/res/res/drawable/spinner_black_16.png | Bin 0 -> 291 bytes core/res/res/drawable/spinner_black_20.png | Bin 0 -> 523 bytes core/res/res/drawable/spinner_black_48.png | Bin 0 -> 1022 bytes core/res/res/drawable/spinner_black_76.png | Bin 0 -> 1086 bytes ...ress_particle.png => spinner_white_16.png} | Bin 3058 -> 2968 bytes core/res/res/drawable/spinner_white_48.png | Bin 0 -> 782 bytes core/res/res/drawable/spinner_white_76.png | Bin 0 -> 3745 bytes core/res/res/drawable/stat_ecb_mode.png | Bin 0 -> 625 bytes .../drawable/stat_sys_data_dormant_1xrtt.png | Bin 0 -> 1081 bytes .../drawable/stat_sys_data_dormant_evdo.png | Bin 0 -> 1008 bytes .../res/drawable/stat_sys_roaming_cdma_0.png | Bin 0 -> 377 bytes .../drawable/stat_sys_roaming_cdma_flash.xml | 25 + .../stat_sys_roaming_cdma_flash_anim0.png | Bin 0 -> 150 bytes .../stat_sys_roaming_cdma_flash_anim1.png | Bin 0 -> 377 bytes .../res/drawable/stat_sys_signal_cdma_0.png | Bin 0 -> 701 bytes .../res/drawable/stat_sys_signal_cdma_1.png | Bin 0 -> 714 bytes .../res/drawable/stat_sys_signal_cdma_2.png | Bin 0 -> 706 bytes .../res/drawable/stat_sys_signal_cdma_3.png | Bin 0 -> 702 bytes .../res/drawable/stat_sys_signal_cdma_4.png | Bin 0 -> 621 bytes .../res/drawable/stat_sys_signal_evdo_0.png | Bin 0 -> 912 bytes .../res/drawable/stat_sys_signal_evdo_1.png | Bin 0 -> 925 bytes .../res/drawable/stat_sys_signal_evdo_2.png | Bin 0 -> 904 bytes .../res/drawable/stat_sys_signal_evdo_3.png | Bin 0 -> 907 bytes .../res/drawable/stat_sys_signal_evdo_4.png | Bin 0 -> 823 bytes .../stat_sys_vp_phone_call_bluetooth.png | Bin 0 -> 815 bytes core/res/res/layout/character_picker.xml | 4 +- .../google_web_content_helper_layout.xml | 26 +- core/res/res/layout/list_gestures_overlay.xml | 19 + core/res/res/layout/progress_dialog.xml | 1 + core/res/res/layout/recent_apps_dialog.xml | 112 +- core/res/res/layout/recent_apps_icon.xml | 39 +- core/res/res/layout/search_bar.xml | 3 + .../search_dropdown_item_icons_2line.xml | 9 +- .../res/values-ar-rEG/donottranslate-cldr.xml | 147 + .../res/values-bg-rBG/donottranslate-cldr.xml | 147 + .../res/values-ca-rES/donottranslate-cldr.xml | 147 + .../res/values-cs-rCZ/donottranslate-cldr.xml | 147 + .../res/res/values-cs/donottranslate-cldr.xml | 147 + core/res/res/values-cs/strings.xml | 141 - .../res/values-da-rDK/donottranslate-cldr.xml | 147 + .../res/res/values-da/donottranslate-cldr.xml | 147 + .../res/values-de-rAT/donottranslate-cldr.xml | 147 + .../res/values-de-rCH/donottranslate-cldr.xml | 147 + .../res/values-de-rDE/donottranslate-cldr.xml | 147 + .../res/values-de-rLI/donottranslate-cldr.xml | 147 + .../res/res/values-de/donottranslate-cldr.xml | 147 + core/res/res/values-de/strings.xml | 141 - .../res/values-el-rGR/donottranslate-cldr.xml | 147 + .../res/res/values-el/donottranslate-cldr.xml | 147 + .../res/values-en-rAU/donottranslate-cldr.xml | 147 + core/res/res/values-en-rAU/strings.xml | 46 - .../res/values-en-rCA/donottranslate-cldr.xml | 147 + .../res/values-en-rGB/donottranslate-cldr.xml | 147 + .../res/values-en-rIE/donottranslate-cldr.xml | 147 + .../res/values-en-rIN/donottranslate-cldr.xml | 147 + .../res/values-en-rNZ/donottranslate-cldr.xml | 147 + .../res/values-en-rSG/donottranslate-cldr.xml | 147 + core/res/res/values-en-rSG/strings.xml | 46 - .../res/values-en-rUS/donottranslate-cldr.xml | 147 + core/res/res/values-en-rUS/strings.xml | 4 - .../res/values-en-rZA/donottranslate-cldr.xml | 147 + .../res/values-es-rES/donottranslate-cldr.xml | 147 + .../res/values-es-rUS/donottranslate-cldr.xml | 147 + core/res/res/values-es-rUS/strings.xml | 141 - .../res/res/values-es/donottranslate-cldr.xml | 147 + core/res/res/values-es/strings.xml | 141 - .../res/values-fi-rFI/donottranslate-cldr.xml | 147 + .../res/values-fr-rBE/donottranslate-cldr.xml | 147 + .../res/values-fr-rCA/donottranslate-cldr.xml | 147 + .../res/values-fr-rCH/donottranslate-cldr.xml | 147 + .../res/values-fr-rFR/donottranslate-cldr.xml | 147 + .../res/res/values-fr/donottranslate-cldr.xml | 147 + core/res/res/values-fr/strings.xml | 142 +- .../res/values-he-rIL/donottranslate-cldr.xml | 147 + .../res/values-hi-rIN/donottranslate-cldr.xml | 147 + .../res/values-hu-rHU/donottranslate-cldr.xml | 147 + .../res/values-id-rID/donottranslate-cldr.xml | 147 + .../res/values-it-rCH/donottranslate-cldr.xml | 147 + .../res/values-it-rIT/donottranslate-cldr.xml | 147 + .../res/res/values-it/donottranslate-cldr.xml | 147 + core/res/res/values-it/strings.xml | 141 - .../res/values-ja-rJP/donottranslate-cldr.xml | 147 + .../res/res/values-ja/donottranslate-cldr.xml | 147 + core/res/res/values-ja/donottranslate.xml | 23 + core/res/res/values-ja/strings.xml | 141 - .../res/values-ko-rKR/donottranslate-cldr.xml | 135 + .../res/res/values-ko/donottranslate-cldr.xml | 135 + core/res/res/values-ko/strings.xml | 141 - .../res/values-lt-rLT/donottranslate-cldr.xml | 147 + .../res/values-lv-rLV/donottranslate-cldr.xml | 147 + core/res/res/values-mcc204-pt/strings.xml | 19 + core/res/res/values-mcc230-pt/strings.xml | 19 + core/res/res/values-mcc232-pt/strings.xml | 19 + core/res/res/values-mcc234-pt/strings.xml | 19 + core/res/res/values-mcc260-pt/strings.xml | 19 + core/res/res/values-mcc262-pt/strings.xml | 19 + .../res/res/values-nb/donottranslate-cldr.xml | 147 + core/res/res/values-nb/strings.xml | 139 - .../res/values-nl-rBE/donottranslate-cldr.xml | 147 + .../res/values-nl-rNL/donottranslate-cldr.xml | 147 + .../res/res/values-nl/donottranslate-cldr.xml | 147 + core/res/res/values-nl/strings.xml | 141 - .../res/values-pl-rPL/donottranslate-cldr.xml | 147 + .../res/res/values-pl/donottranslate-cldr.xml | 147 + core/res/res/values-pl/strings.xml | 141 - .../res/values-pt-rBR/donottranslate-cldr.xml | 147 + .../res/values-pt-rPT/donottranslate-cldr.xml | 147 + .../res/res/values-pt/donottranslate-cldr.xml | 147 + core/res/res/values-pt/strings.xml | 793 +++ .../res/values-ro-rRO/donottranslate-cldr.xml | 147 + .../res/values-ru-rRU/donottranslate-cldr.xml | 147 + .../res/res/values-ru/donottranslate-cldr.xml | 147 + core/res/res/values-ru/strings.xml | 141 - .../res/values-sk-rSK/donottranslate-cldr.xml | 147 + .../res/values-sl-rSI/donottranslate-cldr.xml | 147 + .../res/values-sr-rRS/donottranslate-cldr.xml | 147 + .../res/values-sv-rSE/donottranslate-cldr.xml | 147 + .../res/res/values-sv/donottranslate-cldr.xml | 147 + .../res/values-th-rTH/donottranslate-cldr.xml | 147 + .../res/values-tr-rTR/donottranslate-cldr.xml | 147 + .../res/res/values-tr/donottranslate-cldr.xml | 147 + .../res/values-uk-rUA/donottranslate-cldr.xml | 147 + .../res/values-vi-rVN/donottranslate-cldr.xml | 147 + .../res/values-zh-rCN/donottranslate-cldr.xml | 147 + core/res/res/values-zh-rCN/strings.xml | 141 - .../res/values-zh-rTW/donottranslate-cldr.xml | 147 + core/res/res/values-zh-rTW/strings.xml | 141 - core/res/res/values/arrays.xml | 13 + core/res/res/values/attrs.xml | 463 +- core/res/res/values/attrs_manifest.xml | 99 +- core/res/res/values/colors.xml | 10 +- core/res/res/values/config.xml | 4 + core/res/res/values/donottranslate-cldr.xml | 147 + core/res/res/values/donottranslate.xml | 23 + core/res/res/values/public.xml | 81 +- core/res/res/values/strings.xml | 670 +- core/res/res/values/styles.xml | 41 +- core/res/res/values/themes.xml | 26 +- core/res/res/xml/eri.xml | 118 + core/res/res/xml/power_profile.xml | 40 + data/etc/platform.xml | 23 +- data/fonts/DroidSansJapanese.ttf | Bin 1174432 -> 1173140 bytes data/sounds/AudioPackage2.mk | 169 +- data/sounds/OriginalAudio.mk | 1 + data/sounds/Silence.ogg | Bin 0 -> 3973 bytes docs/html/guide/appendix/media-formats.jd | 29 +- docs/html/guide/developing/eclipse-adt.jd | 12 +- docs/html/guide/guide_toc.cs | 2 + .../ui_guidelines/activity_task_design.jd | 1238 ++++ .../practices/ui_guidelines/icon_design.jd | 1406 ++++ .../guide/practices/ui_guidelines/index.jd | 41 +- .../resources/res-selection-flowchart.png | Bin 0 -> 23228 bytes .../guide/topics/resources/resources-i18n.jd | 207 +- docs/html/guide/tutorials/hello-world.jd | 6 +- .../activity_task_design/ActivityChooser.png | Bin 0 -> 82669 bytes .../activity_task_design/ContactNew.png | Bin 0 -> 82669 bytes .../activity_task_design/ContactView.png | Bin 0 -> 82669 bytes .../activity_task_design/ContactsDialer.png | Bin 0 -> 82669 bytes .../activity_task_design/ContactsList.png | Bin 0 -> 82669 bytes .../activity_task_design/HomeTaskBasics1a.png | Bin 0 -> 25905 bytes .../activity_task_design/HomeTaskBasics1b.png | Bin 0 -> 26166 bytes .../activity_task_design/HomeTaskBasics1c.png | Bin 0 -> 25576 bytes .../activity_task_design/HomeTaskBasics1d.png | Bin 0 -> 45696 bytes .../activity_task_design/HomeTaskBasics1e.png | Bin 0 -> 23046 bytes .../HomeTaskSwitching1a.png | Bin 0 -> 20359 bytes .../HomeTaskSwitching1b.png | Bin 0 -> 18376 bytes .../HomeTaskSwitching1c.png | Bin 0 -> 24597 bytes .../HomeTaskSwitching2.png | Bin 0 -> 41605 bytes .../HomeTaskSwitching3a.png | Bin 0 -> 26125 bytes .../HomeTaskSwitching3b.png | Bin 0 -> 21663 bytes .../HomeTaskSwitching3c.png | Bin 0 -> 16329 bytes .../activity_task_design/IntentsDiagram.png | Bin 0 -> 37600 bytes .../PhoneActivitiesDiagram.png | Bin 0 -> 31067 bytes .../ReplacingAnActivity.png | Bin 0 -> 45079 bytes .../ReusingAnActivity1.png | Bin 0 -> 30077 bytes .../ReusingAnActivity2.png | Bin 0 -> 27762 bytes docs/html/images/icon_design/dialog_icon.png | Bin 0 -> 64323 bytes docs/html/images/icon_design/dialog_light.png | Bin 0 -> 16440 bytes docs/html/images/icon_design/do_dont.png | Bin 0 -> 57034 bytes .../images/icon_design/ic_launcher_IM.png | Bin 0 -> 2951 bytes .../icon_design/ic_launcher_alarmclock.png | Bin 0 -> 2988 bytes .../icon_design/ic_launcher_browser.png | Bin 0 -> 3426 bytes .../icon_design/ic_launcher_calculator.png | Bin 0 -> 3291 bytes .../icon_design/ic_launcher_calendar.png | Bin 0 -> 3288 bytes .../images/icon_design/ic_launcher_camera.png | Bin 0 -> 3137 bytes .../icon_design/ic_launcher_contacts.png | Bin 0 -> 2995 bytes .../images/icon_design/ic_launcher_email.png | Bin 0 -> 2882 bytes .../icon_design/ic_launcher_email_generic.png | Bin 0 -> 3458 bytes .../icon_design/ic_launcher_gallery.png | Bin 0 -> 3040 bytes .../ic_launcher_generic_application.png | Bin 0 -> 3180 bytes .../icon_design/ic_launcher_google_talk.png | Bin 0 -> 3447 bytes .../images/icon_design/ic_launcher_maps.png | Bin 0 -> 3618 bytes .../icon_design/ic_launcher_marketplace.png | Bin 0 -> 3188 bytes .../icon_design/ic_launcher_musicplayer_2.png | Bin 0 -> 7034 bytes .../icon_design/ic_launcher_phone_dialer.png | Bin 0 -> 3621 bytes .../icon_design/ic_launcher_settings.png | Bin 0 -> 3285 bytes .../icon_design/ic_launcher_sms_mms.png | Bin 0 -> 3983 bytes .../icon_design/ic_launcher_video_camera.png | Bin 0 -> 3428 bytes .../icon_design/ic_launcher_voicedial.png | Bin 0 -> 5794 bytes .../icon_design/ic_launcher_voicesearch.png | Bin 0 -> 2594 bytes .../icon_design/ic_launcher_youtube.png | Bin 0 -> 3041 bytes docs/html/images/icon_design/ic_menu_add.png | Bin 0 -> 2017 bytes .../images/icon_design/ic_menu_archive.png | Bin 0 -> 1354 bytes .../images/icon_design/ic_menu_attachment.png | Bin 0 -> 2247 bytes docs/html/images/icon_design/ic_menu_back.png | Bin 0 -> 1237 bytes docs/html/images/icon_design/ic_menu_call.png | Bin 0 -> 1755 bytes .../images/icon_design/ic_menu_camera.png | Bin 0 -> 1971 bytes .../icon_design/ic_menu_camera_video_view.png | Bin 0 -> 1474 bytes .../ic_menu_close_clear_cancel.png | Bin 0 -> 2499 bytes .../images/icon_design/ic_menu_compass.png | Bin 0 -> 3943 bytes .../images/icon_design/ic_menu_delete.png | Bin 0 -> 1747 bytes .../images/icon_design/ic_menu_directions.png | Bin 0 -> 1675 bytes docs/html/images/icon_design/ic_menu_edit.png | Bin 0 -> 1661 bytes .../images/icon_design/ic_menu_favorite.png | Bin 0 -> 1608 bytes .../images/icon_design/ic_menu_forward.png | Bin 0 -> 1228 bytes .../images/icon_design/ic_menu_gallery.png | Bin 0 -> 2379 bytes docs/html/images/icon_design/ic_menu_goto.png | Bin 0 -> 1636 bytes docs/html/images/icon_design/ic_menu_help.png | Bin 0 -> 5304 bytes docs/html/images/icon_design/ic_menu_home.png | Bin 0 -> 2048 bytes .../icon_design/ic_menu_info_details.png | Bin 0 -> 2128 bytes .../images/icon_design/ic_menu_mapmode.png | Bin 0 -> 1923 bytes docs/html/images/icon_design/ic_menu_mark.png | Bin 0 -> 2519 bytes docs/html/images/icon_design/ic_menu_more.png | Bin 0 -> 2459 bytes .../images/icon_design/ic_menu_mylocation.png | Bin 0 -> 2507 bytes .../images/icon_design/ic_menu_play_clip.png | Bin 0 -> 1471 bytes .../icon_design/ic_menu_preferences.png | Bin 0 -> 2144 bytes .../icon_design/ic_menu_recent_history.png | Bin 0 -> 2647 bytes .../images/icon_design/ic_menu_refresh.png | Bin 0 -> 2450 bytes .../images/icon_design/ic_menu_rotate.png | Bin 0 -> 2477 bytes docs/html/images/icon_design/ic_menu_save.png | Bin 0 -> 1645 bytes .../images/icon_design/ic_menu_search.png | Bin 0 -> 5059 bytes docs/html/images/icon_design/ic_menu_send.png | Bin 0 -> 1966 bytes .../html/images/icon_design/ic_menu_share.png | Bin 0 -> 2194 bytes .../images/icon_design/ic_menu_shuffle.png | Bin 0 -> 2384 bytes .../images/icon_design/ic_menu_upload.png | Bin 0 -> 1571 bytes docs/html/images/icon_design/ic_menu_view.png | Bin 0 -> 1929 bytes docs/html/images/icon_design/ic_menu_zoom.png | Bin 0 -> 2290 bytes .../icon_design/icon_guidelines_logo.png | Bin 0 -> 44163 bytes .../images/icon_design/launcher_light.png | Bin 0 -> 60386 bytes .../icon_design/launcher_palette_black.png | Bin 0 -> 3291 bytes .../icon_design/launcher_palette_dark.png | Bin 0 -> 3320 bytes .../launcher_palette_gradient_dark.png | Bin 0 -> 3320 bytes .../launcher_palette_gradient_light.png | Bin 0 -> 3317 bytes .../launcher_palette_gradient_medium.png | Bin 0 -> 3325 bytes .../icon_design/launcher_palette_light.png | Bin 0 -> 3317 bytes .../icon_design/launcher_palette_medium.png | Bin 0 -> 3325 bytes .../icon_design/launcher_palette_white.png | Bin 0 -> 3166 bytes .../images/icon_design/launcher_structure.png | Bin 0 -> 60602 bytes .../html/images/icon_design/listview_icon.png | Bin 0 -> 92153 bytes .../icon_design/listview_icon_details.png | Bin 0 -> 22337 bytes docs/html/images/icon_design/menu_light.png | Bin 0 -> 28415 bytes .../images/icon_design/menu_palette_black.png | Bin 0 -> 3291 bytes .../images/icon_design/menu_palette_fill.png | Bin 0 -> 3331 bytes .../menu_palette_gradient_medium.png | Bin 0 -> 3334 bytes .../images/icon_design/menu_palette_white.png | Bin 0 -> 3166 bytes .../images/icon_design/menu_structure.png | Bin 0 -> 38762 bytes .../images/icon_design/stat_notify_alarm.png | Bin 0 -> 1035 bytes .../icon_design/stat_notify_calendar.png | Bin 0 -> 533 bytes .../images/icon_design/stat_notify_chat.png | Bin 0 -> 806 bytes .../icon_design/stat_notify_disk_full.png | Bin 0 -> 842 bytes .../images/icon_design/stat_notify_email.png | Bin 0 -> 1185 bytes .../icon_design/stat_notify_email_generic.png | Bin 0 -> 986 bytes .../icon_design/stat_notify_missed_call.png | Bin 0 -> 875 bytes .../icon_design/stat_notify_musicplayer.png | Bin 0 -> 771 bytes .../images/icon_design/stat_notify_sms.png | Bin 0 -> 526 bytes .../icon_design/stat_notify_sync_anim0.png | Bin 0 -> 1076 bytes .../icon_design/stat_notify_sync_error.png | Bin 0 -> 1146 bytes .../icon_design/stat_notify_voicemail.png | Bin 0 -> 655 bytes .../icon_design/stat_notify_wifi_in_range.png | Bin 0 -> 1075 bytes .../icon_design/stat_sys_battery_100.png | Bin 0 -> 738 bytes .../icon_design/stat_sys_battery_empty.png | Bin 0 -> 1034 bytes .../icon_design/stat_sys_data_bluetooth.png | Bin 0 -> 818 bytes .../stat_sys_data_bluetooth_connected.png | Bin 0 -> 967 bytes .../stat_sys_data_connected_3g.png | Bin 0 -> 832 bytes .../icon_design/stat_sys_data_connected_e.png | Bin 0 -> 833 bytes .../icon_design/stat_sys_data_connected_g.png | Bin 0 -> 838 bytes .../images/icon_design/stat_sys_data_usb.png | Bin 0 -> 786 bytes .../images/icon_design/stat_sys_gps_on.png | Bin 0 -> 1035 bytes .../icon_design/stat_sys_install_complete.png | Bin 0 -> 670 bytes .../icon_design/stat_sys_phone_call.png | Bin 0 -> 772 bytes .../stat_sys_phone_call_forward.png | Bin 0 -> 835 bytes .../stat_sys_phone_call_on_hold.png | Bin 0 -> 754 bytes .../icon_design/stat_sys_r_signal_4.png | Bin 0 -> 726 bytes .../stat_sys_ringer_silent_old.png | Bin 0 -> 906 bytes .../icon_design/stat_sys_ringer_vibrate.png | Bin 0 -> 1255 bytes .../images/icon_design/stat_sys_signal_4.png | Bin 0 -> 532 bytes .../stat_sys_signal_flightmode.png | Bin 0 -> 818 bytes .../icon_design/stat_sys_signal_null.png | Bin 0 -> 730 bytes .../icon_design/stat_sys_speakerphone.png | Bin 0 -> 978 bytes .../images/icon_design/stat_sys_warning.png | Bin 0 -> 651 bytes .../icon_design/stat_sys_wifi_signal_4.png | Bin 0 -> 826 bytes .../icon_design/stat_sys_wifi_unavailable.png | Bin 0 -> 706 bytes .../images/icon_design/statusbar_light.png | Bin 0 -> 10981 bytes .../icon_design/statusbar_palette_black.png | Bin 0 -> 3291 bytes .../icon_design/statusbar_palette_fill.png | Bin 0 -> 3342 bytes .../icon_design/statusbar_palette_grey.png | Bin 0 -> 3276 bytes .../icon_design/statusbar_palette_white.png | Bin 0 -> 3166 bytes .../icon_design/statusbar_structure.png | Bin 0 -> 21163 bytes .../images/icon_design/tab_icon_selected.png | Bin 0 -> 17113 bytes .../icon_design/tab_icon_unselected.png | Bin 0 -> 16776 bytes .../icon_design/tab_palette_selected_fill.png | Bin 0 -> 3331 bytes .../images/icon_design/tab_selected_light.png | Bin 0 -> 17477 bytes .../icon_design/tab_unselected_light.png | Bin 0 -> 15605 bytes docs/html/index.jd | 60 +- docs/html/robots.txt | 15 +- docs/html/sdk/1.5_r1/index.jd | 1 + docs/html/sdk/1.5_r2/index.jd | 87 + docs/html/sdk/1.5_r2/installing.jd | 332 + docs/html/sdk/1.5_r2/requirements.jd | 39 + docs/html/sdk/1.5_r2/upgrading.jd | 395 + docs/html/sdk/RELEASENOTES.jd | 12 +- docs/html/sdk/android-1.5-highlights.jd | 1 - docs/html/sdk/older_releases.jd | 107 +- docs/html/sdk/preview/features.html | 21 +- docs/html/sdk/sdk_toc.cs | 9 +- docs/html/search.jd | 2 +- docs/html/shareables/icon_templates-v1.0.zip | Bin 0 -> 4001936 bytes docs/html/sitemap.txt | 1 + graphics/java/android/graphics/Bitmap.java | 106 +- .../java/android/graphics/BitmapFactory.java | 44 +- graphics/java/android/graphics/Canvas.java | 6 +- graphics/java/android/graphics/NinePatch.java | 5 +- .../android/graphics/drawable/Animatable.java | 31 +- .../drawable/AnimatedRotateDrawable.java | 332 + .../graphics/drawable/AnimationDrawable.java | 2 +- .../android/graphics/drawable/Drawable.java | 2 + .../graphics/drawable/DrawableContainer.java | 6 +- .../graphics/drawable/GradientDrawable.java | 4 +- include/media/AudioRecord.h | 23 +- include/media/AudioTrack.h | 3 +- include/media/IAudioFlinger.h | 2 +- include/media/IMediaPlayerService.h | 3 +- include/media/MediaPlayerInterface.h | 1 - include/media/ToneGenerator.h | 84 +- include/media/mediaplayer.h | 2 +- include/media/mediarecorder.h | 40 +- include/private/media/AudioTrackShared.h | 7 +- include/private/opengles/gl_context.h | 2 +- include/tts/TtsEngine.h | 237 + include/ui/Camera.h | 53 +- include/ui/Point.h | 21 +- include/ui/Rect.h | 40 +- include/utils/AssetManager.h | 23 +- include/utils/BackupHelpers.h | 158 + include/utils/ByteOrder.h | 32 +- include/utils/Parcel.h | 18 +- include/utils/ResourceTypes.h | 83 +- include/utils/backup_helpers.h | 15 - keystore/java/android/security/CertTool.java | 158 + keystore/java/android/security/Keystore.java | 239 + keystore/java/android/security/Reply.java | 26 + .../java/android/security/ServiceCommand.java | 196 + keystore/jni/Android.mk | 31 + keystore/jni/cert.c | 252 + keystore/jni/cert.h | 59 + keystore/jni/certtool.c | 176 + libs/audioflinger/A2dpAudioInterface.cpp | 4 +- libs/audioflinger/A2dpAudioInterface.h | 1 + libs/audioflinger/AudioBufferProvider.h | 2 + libs/audioflinger/AudioDumpInterface.h | 6 +- libs/audioflinger/AudioFlinger.cpp | 69 +- libs/audioflinger/AudioFlinger.h | 19 +- libs/audioflinger/AudioHardwareGeneric.cpp | 11 +- libs/audioflinger/AudioHardwareGeneric.h | 1 + libs/audioflinger/AudioHardwareStub.cpp | 9 +- libs/audioflinger/AudioHardwareStub.h | 1 + libs/surfaceflinger/Android.mk | 1 - .../DisplayHardware/DisplayHardware.cpp | 11 +- libs/surfaceflinger/LayerBitmap.cpp | 4 +- libs/surfaceflinger/SurfaceFlinger.cpp | 41 +- libs/surfaceflinger/SurfaceFlinger.h | 3 - libs/surfaceflinger/VRamHeap.cpp | 2 + libs/ui/Android.mk | 4 +- libs/ui/Camera.cpp | 147 +- libs/ui/ISurfaceFlingerClient.cpp | 13 +- libs/ui/Overlay.cpp | 12 +- libs/ui/Point.cpp | 11 - libs/ui/Rect.cpp | 29 +- libs/utils/Android.mk | 3 +- libs/utils/Asset.cpp | 5 +- libs/utils/AssetManager.cpp | 156 +- libs/utils/BackupData.cpp | 349 + libs/utils/BackupHelpers.cpp | 1314 ++++ .../{characterData.h => CharacterData.h} | 0 libs/utils/Parcel.cpp | 48 +- libs/utils/ResourceTypes.cpp | 264 +- libs/utils/Unicode.cpp | 6 +- libs/utils/ZipEntry.cpp | 4 +- libs/utils/ZipFile.cpp | 6 +- libs/utils/ZipFileCRO.cpp | 4 +- libs/utils/ZipFileRO.cpp | 6 +- libs/utils/ZipUtils.cpp | 6 +- libs/utils/file_backup_helper.cpp | 685 -- libs/utils/futex_synchro.c | 1 + .../android/location/ILocationManager.aidl | 2 - .../android/location/ILocationProvider.aidl | 2 + .../android/location/LocationManager.java | 21 - .../location/GpsLocationProvider.java | 205 +- .../location/LocationProviderProxy.java | 15 + .../internal/location/MockProvider.java | 3 + media/java/android/media/AudioRecord.java | 14 +- media/java/android/media/AudioService.java | 61 +- media/java/android/media/AudioTrack.java | 21 +- media/java/android/media/MediaPlayer.java | 369 +- media/java/android/media/MediaRecorder.java | 91 +- media/java/android/media/MediaScanner.java | 45 +- media/java/android/media/RingtoneManager.java | 11 +- media/java/android/media/ToneGenerator.java | 628 +- media/jni/android_media_MediaPlayer.cpp | 38 +- media/jni/android_media_MediaRecorder.cpp | 35 +- media/jni/soundpool/SoundPool.cpp | 16 +- media/libmedia/AudioRecord.cpp | 31 +- media/libmedia/AudioTrack.cpp | 23 +- media/libmedia/IAudioFlinger.cpp | 8 +- media/libmedia/IMediaPlayer.cpp | 2 + media/libmedia/IMediaPlayerService.cpp | 1 - media/libmedia/ToneGenerator.cpp | 816 ++- media/libmedia/mediaplayer.cpp | 4 +- media/libmedia/mediarecorder.cpp | 8 +- .../MediaRecorderClient.cpp | 4 + media/libmediaplayerservice/VorbisPlayer.cpp | 12 +- .../MediaFrameworkTest/AndroidManifest.xml | 1 + .../MediaFrameworkTest/res/raw/testmidi.mid | Bin 38964 -> 2956 bytes .../MediaFrameworkTest/res/raw/testmp3.mp3 | Bin 249241 -> 306196 bytes .../mediaframeworktest/MediaNames.java | 52 +- .../MediaRecorderStressTestRunner.java | 2 + .../functional/CodecTest.java | 106 +- .../functional/MediaPlayerApiTest.java | 39 +- .../performance/MediaPlayerPerformance.java | 177 +- .../stress/MediaPlayerStressTest.java | 136 + .../stress/MediaRecorderStressTest.java | 49 +- .../com/google/android/gles_jni/GLImpl.java | 33 +- opengl/libagl/array.cpp | 4 + opengl/libagl/light.cpp | 35 +- opengl/libagl/matrix.cpp | 83 +- opengl/libagl/texture.cpp | 9 +- opengl/libs/Android.mk | 2 +- opengl/libs/EGL/egl.cpp | 8 +- opengl/libs/EGL/gpu.cpp | 5 + opengl/tests/angeles/Android.mk | 4 +- opengl/tests/filter/Android.mk | 2 +- opengl/tests/finish/Android.mk | 2 +- opengl/tests/lighting1709/Android.mk | 11 + opengl/tests/lighting1709/AndroidManifest.xml | 13 + .../android/lightingtest/ClearActivity.java | 174 + opengl/tests/textures/Android.mk | 2 +- opengl/tests/tritex/Android.mk | 2 +- opengl/tools/glgen/gen | 17 + opengl/tools/glgen/src/JniCodeEmitter.java | 10 +- .../glgen/stubs/gles11/GLES10cHeader.cpp | 13 + opengl/tools/glgen/stubs/jsr239/GLCHeader.cpp | 50 +- .../glgen/stubs/jsr239/GLImplHeader.java-impl | 33 +- packages/SettingsProvider/AndroidManifest.xml | 12 +- .../SettingsProvider/res/values/defaults.xml | 10 +- .../SettingsProvider/res/values/strings.xml | 5 +- .../providers/settings/DatabaseHelper.java | 150 +- .../settings/SettingsBackupAgent.java | 332 + .../providers/settings/SettingsHelper.java | 198 + .../providers/settings/SettingsProvider.java | 21 +- .../AndroidManifest.xml | 2 +- .../res/values/strings.xml | 21 + packages/TtsService/Android.mk | 13 + packages/TtsService/AndroidManifest.xml | 16 + packages/TtsService/MODULE_LICENSE_APACHE2 | 0 packages/TtsService/NOTICE | 190 + packages/TtsService/jni/Android.mk | 31 + .../TtsService/jni/android_tts_SynthProxy.cpp | 778 ++ .../src/android/tts/SynthProxy.java | 200 + .../src/android/tts/TtsService.java | 936 +++ packages/VpnServices/Android.mk | 16 + packages/VpnServices/AndroidManifest.xml | 22 + packages/VpnServices/MODULE_LICENSE_APACHE2 | 0 packages/VpnServices/NOTICE | 190 + .../res/drawable/vpn_connected.png | Bin 0 -> 757 bytes .../res/drawable/vpn_disconnected.png | Bin 0 -> 717 bytes packages/VpnServices/res/values/strings.xml | 10 + .../server/vpn/AndroidServiceProxy.java | 243 + .../server/vpn/L2tpIpsecPskService.java | 49 + .../android/server/vpn/L2tpIpsecService.java | 64 + .../com/android/server/vpn/L2tpService.java | 38 + .../com/android/server/vpn/MtpdHelper.java | 60 + .../server/vpn/NormalProcessProxy.java | 85 + .../com/android/server/vpn/PptpService.java | 36 + .../com/android/server/vpn/ProcessProxy.java | 210 + .../com/android/server/vpn/VpnService.java | 520 ++ .../android/server/vpn/VpnServiceBinder.java | 116 + .../server/AccessibilityManagerService.java | 668 ++ .../com/android/server/AppWidgetService.java | 47 +- .../com/android/server/AttributeCache.java | 114 +- .../android/server/BackupManagerService.java | 1543 +++- .../com/android/server/EntropyService.java | 148 + .../com/android/server/HeadsetObserver.java | 3 +- .../com/android/server/IntentResolver.java | 20 +- .../server/LocationManagerService.java | 59 +- .../server/NotificationManagerService.java | 141 +- .../server/PackageManagerBackupAgent.java | 413 ++ .../android/server/PackageManagerService.java | 369 +- .../android/server/PowerManagerService.java | 5 +- .../java/com/android/server/ProcessStats.java | 16 +- .../java/com/android/server/RandomBlock.java | 100 + .../com/android/server/SensorService.java | 6 +- .../java/com/android/server/SystemServer.java | 11 + .../com/android/server/TelephonyRegistry.java | 224 +- .../com/android/server/WallpaperService.java | 13 +- .../java/com/android/server/Watchdog.java | 2 + .../java/com/android/server/WifiService.java | 169 +- .../android/server/WindowManagerService.java | 1292 ++-- .../server/am/ActivityManagerService.java | 1052 ++- .../com/android/server/am/AppErrorDialog.java | 21 +- .../server/am/AppNotRespondingDialog.java | 46 +- .../com/android/server/am/BackupRecord.java | 57 + .../server/am/BatteryStatsService.java | 49 +- .../android/server/am/BroadcastRecord.java | 2 +- .../com/android/server/am/HistoryRecord.java | 10 + .../server/am/PendingIntentRecord.java | 4 +- .../com/android/server/am/ProcessRecord.java | 17 +- .../com/android/server/am/ReceiverList.java | 2 +- .../android/server/am/UsageStatsService.java | 127 +- .../server/status/StatusBarPolicy.java | 490 +- .../server/status/StatusBarService.java | 11 + .../jni/com_android_server_SensorService.cpp | 77 +- .../java/android/telephony/CellLocation.java | 23 +- .../JapanesePhoneNumberFormatter.java | 14 +- .../telephony/NeighboringCellInfo.aidl | 16 +- .../telephony/NeighboringCellInfo.java | 14 +- .../android/telephony/PhoneNumberUtils.java | 105 +- .../android/telephony/PhoneStateListener.java | 57 +- .../java/android/telephony/ServiceState.java | 81 +- .../android/telephony/SignalStrength.aidl | 22 + .../android/telephony/SignalStrength.java | 311 + .../java/android/telephony/SmsManager.java | 52 +- .../java/android/telephony/SmsMessage.java | 173 +- .../android/telephony/TelephonyManager.java | 142 +- .../android/telephony/gsm/SmsMessage.java | 7 +- telephony/java/android/telephony/package.html | 2 +- .../internal/telephony/BaseCommands.java | 117 +- .../com/android/internal/telephony/Call.java | 52 +- .../internal/telephony/CallTracker.java | 28 +- .../internal/telephony/CallerInfo.java | 61 +- .../telephony/CallerInfoAsyncQuery.java | 134 +- .../internal/telephony/CommandsInterface.java | 199 +- .../internal/telephony/Connection.java | 84 +- ...DPContextState.java => DataCallState.java} | 20 +- .../internal/telephony/DataConnection.java | 94 +- .../telephony/DataConnectionTracker.java | 34 +- .../telephony/DefaultPhoneNotifier.java | 6 +- .../internal/telephony/GsmAlphabet.java | 51 +- .../telephony/IExtendedNetworkService.aidl | 4 +- .../telephony/IPhoneStateListener.aidl | 2 + .../internal/telephony/ITelephony.aidl | 22 + .../telephony/ITelephonyRegistry.aidl | 3 +- .../internal/telephony/IccConstants.java | 1 + .../internal/telephony/IccRecords.java | 2 +- .../telephony/IccVmFixedException.java | 2 +- .../telephony/IccVmNotSupportedException.java | 2 +- .../com/android/internal/telephony/Phone.java | 345 +- .../android/internal/telephony/PhoneBase.java | 164 +- .../internal/telephony/PhoneFactory.java | 55 +- .../internal/telephony/PhoneProxy.java | 134 +- .../telephony/PhoneStateIntentReceiver.java | 24 +- .../com/android/internal/telephony/RIL.java | 567 +- .../internal/telephony/RILConstants.java | 23 +- .../internal/telephony/SMSDispatcher.java | 217 +- .../telephony/ServiceStateTracker.java | 25 +- .../android/internal/telephony/SmsHeader.java | 385 +- .../internal/telephony/SmsMessageBase.java | 47 +- .../internal/telephony/SmsResponse.java | 8 +- .../internal/telephony/TelephonyEventLog.java | 2 + .../internal/telephony/TelephonyIntents.java | 49 +- .../telephony/TelephonyProperties.java | 11 + .../internal/telephony/WapPushOverSms.java | 47 +- .../internal/telephony/cdma/CDMAPhone.java | 570 +- .../telephony/cdma/CallFailCause.java | 45 +- .../internal/telephony/cdma/CdmaCall.java | 4 +- .../telephony/cdma/CdmaCallTracker.java | 197 +- .../cdma/CdmaCallWaitingNotification.java | 48 + .../telephony/cdma/CdmaConnection.java | 354 +- .../telephony/cdma/CdmaDataConnection.java | 14 +- .../cdma/CdmaDataConnectionTracker.java | 200 +- .../cdma/CdmaInformationRecords.java | 263 + .../telephony/cdma/CdmaSMSDispatcher.java | 287 +- .../cdma/CdmaServiceStateTracker.java | 818 ++- .../internal/telephony/cdma/EriInfo.java | 43 + .../internal/telephony/cdma/EriManager.java | 436 ++ .../internal/telephony/cdma/FeatureCode.java | 6 +- .../telephony/cdma/RuimFileHandler.java | 7 +- .../internal/telephony/cdma/RuimRecords.java | 133 +- .../telephony/cdma/SignalToneUtil.java | 280 + .../internal/telephony/cdma/SmsMessage.java | 268 +- .../internal/telephony/cdma/package.html | 2 +- .../telephony/cdma/sms/BearerData.java | 588 +- .../telephony/cdma/sms/CdmaSmsAddress.java | 80 +- .../internal/telephony/cdma/sms/UserData.java | 57 +- .../internal/telephony/cdma/sms/package.html | 2 +- .../internal/telephony/gsm/GSMPhone.java | 49 +- .../internal/telephony/gsm/GsmConnection.java | 28 +- .../gsm/GsmDataConnectionTracker.java | 235 +- .../internal/telephony/gsm/GsmMmiCode.java | 12 +- .../telephony/gsm/GsmSMSDispatcher.java | 233 +- .../telephony/gsm/GsmServiceStateTracker.java | 142 +- .../internal/telephony/gsm/MccTable.java | 2 +- .../internal/telephony/gsm/PdpConnection.java | 106 +- .../internal/telephony/gsm/PppLink.java | 219 - .../telephony/gsm/RestrictedState.java | 12 +- .../internal/telephony/gsm/SIMRecords.java | 11 +- .../telephony/gsm/SmsBroadcastConfigInfo.java | 133 + .../internal/telephony/gsm/SmsMessage.java | 117 +- .../gsm/SuppServiceNotification.java | 4 +- .../internal/telephony/gsm/package.html | 2 +- .../telephony/gsm/stk/AppInterface.java | 40 +- .../telephony/gsm/stk/CommandDetails.java | 12 +- .../telephony/gsm/stk/CommandParams.java | 2 +- .../gsm/stk/CommandParamsFactory.java | 2 +- .../telephony/gsm/stk/ComprehensionTlv.java | 6 +- .../internal/telephony/gsm/stk/Input.java | 4 +- .../internal/telephony/gsm/stk/Menu.java | 2 +- .../telephony/gsm/stk/ResponseData.java | 8 +- .../telephony/gsm/stk/StkCmdMessage.java | 4 +- .../internal/telephony/gsm/stk/StkLog.java | 2 +- .../telephony/gsm/stk/StkService.java | 30 +- .../telephony/gsm/stk/ToneSettings.java | 2 +- .../telephony/gsm/stk/ValueParser.java | 26 +- .../telephony/test/ModelInterpreter.java | 70 +- .../telephony/test/SimulatedCommands.java | 193 +- .../telephony/test/SimulatedGsmCallState.java | 66 +- .../telephony/test/SimulatedRadioControl.java | 2 +- .../test/InstrumentationTestRunner.java | 26 +- test-runner/android/test/MoreAsserts.java | 8 +- .../android/test/TestLocationProvider.java | 3 + .../android/test/mock/MockContext.java | 18 +- .../android/test/mock/MockPackageManager.java | 21 +- tests/AndroidTests/AndroidManifest.xml | 21 +- tests/AndroidTests/res/values/strings.xml | 3 + tests/AndroidTests/res/xml/searchable.xml | 11 +- .../com/android/unit_tests/AppCacheTest.java | 2 +- .../unit_tests/BitwiseStreamsTest.java | 33 +- .../com/android/unit_tests/CdmaSmsTest.java | 255 +- .../unit_tests/DatabaseGeneralTest.java | 245 +- .../unit_tests/NeighboringCellInfoTest.java | 55 + .../src/com/android/unit_tests/SMSTest.java | 25 +- .../android/unit_tests/SearchManagerTest.java | 204 +- .../unit_tests/SearchableActivity.java | 30 + .../android/unit_tests/SearchablesTest.java | 50 +- .../unit_tests/SuggestionProvider.java | 110 + .../com/android/unit_tests/TextUtilsTest.java | 1 + .../content/MemoryFileProvider.java | 211 + .../content/MemoryFileProviderTest.java | 82 + .../android/unit_tests/os/MemoryFileTest.java | 194 +- .../LocationManagerProximityTest.java | 5 +- .../internal/telephony/GsmAlphabetTest.java | 19 +- .../telephony/PhoneNumberUtilsTest.java | 7 + .../internal/telephony/SMSDispatcherTest.java | 36 +- tests/DpiTest/AndroidManifest.xml | 2 + .../res/values-largeScreen/strings.xml | 19 + .../res/values-normalScreen/strings.xml | 19 + .../res/values-smallScreen/strings.xml | 19 + tests/DpiTest/res/values/strings.xml | 19 + .../android/test/dpi/DpiTestActivity.java | 1 + tests/DumpRenderTree/AndroidManifest.xml | 8 +- .../assets/results/layout_tests_failed.txt | 978 ++- .../assets/results/layout_tests_nontext.txt | 2427 ++++++- .../assets/results/layout_tests_passed.txt | 1244 +++- .../DumpRenderTree/assets/run_layout_tests.py | 41 +- .../assets/run_reliability_tests.py | 172 +- .../com/android/dumprendertree/FileList.java | 73 +- .../com/android/dumprendertree/FsUtils.java | 80 + .../dumprendertree/LayoutTestsAutoRunner.java | 23 +- .../dumprendertree/LayoutTestsAutoTest.java | 64 +- .../dumprendertree/LoadTestsAutoTest.java | 104 +- .../src/com/android/dumprendertree/Menu.java | 42 +- .../dumprendertree/ReliabilityTest.java | 166 + .../ReliabilityTestActivity.java | 290 + .../ReliabilityTestsAutoTest.java | 209 - .../dumprendertree/TestShellActivity.java | 153 +- tests/FrameworkTest/AndroidManifest.xml | 11 +- .../AccessibilityTestService.java | 167 + .../widget/AutoCompleteTextViewPopup.java | 2 + .../RecycleAccessibilityEventTest.java | 81 + tests/backup/Android.mk | 4 +- tests/backup/AndroidManifest.xml | 7 +- tests/backup/backup_helper_test.cpp | 24 +- .../backuptest/BackupTestActivity.java | 78 +- .../android/backuptest/BackupTestAgent.java | 32 + .../android/backuptest/BackupTestService.java | 43 - tests/backup/test_backup.sh | 27 + tests/backup/test_restore.sh | 53 + tests/permission/Android.mk | 14 + tests/permission/AndroidManifest.xml | 33 + .../tests/ActivityManagerPermissionTests.java | 182 + .../tests/HardwareServicePermissionTest.java | 136 + .../permission/tests/PmPermissionsTests.java | 141 + .../tests/ServiceManagerPermissionTests.java | 50 + .../tests/SettingsPermissionsTests.java | 54 + .../tests/SmsManagerPermissionTest.java | 85 + .../tests/WindowManagerPermissionTests.java | 409 ++ tools/aapt/AaptAssets.cpp | 50 +- tools/aapt/AaptAssets.h | 3 + tools/aapt/Bundle.h | 23 + tools/aapt/Command.cpp | 196 +- tools/aapt/Main.cpp | 78 +- tools/aapt/Resource.cpp | 93 +- tools/aapt/ResourceTable.cpp | 176 +- tools/aapt/ResourceTable.h | 12 +- tools/aapt/XMLNode.cpp | 61 + tools/aapt/XMLNode.h | 10 + tools/aidl/AST.h | 1 + .../bridge/src/android/graphics/Matrix.java | 132 +- .../com/android/layoutlib/bridge/Bridge.java | 254 +- .../layoutlib/bridge/BridgeAssetManager.java | 3 +- .../layoutlib/bridge/BridgeContext.java | 21 +- tools/localize/Android.mk | 1 - tools/localize/Perforce.cpp | 1 + tools/localize/SourcePos.cpp | 1 + tools/localize/Values.cpp | 1 + tools/localize/XLIFFFile.cpp | 1 + tools/localize/file_utils.cpp | 37 +- tools/localize/localize_test.cpp | 1 + tools/localize/merge_res_and_xliff.cpp | 1 + tools/localize/merge_res_and_xliff_test.cpp | 2 +- tools/localize/xmb.cpp | 1 + vpn/java/android/net/vpn/IVpnService.aidl | 43 + .../android/net/vpn/L2tpIpsecProfile.java | 65 + .../android/net/vpn/L2tpIpsecPskProfile.java | 54 + vpn/java/android/net/vpn/L2tpProfile.java | 68 + vpn/java/android/net/vpn/PptpProfile.java | 30 + vpn/java/android/net/vpn/VpnManager.java | 162 + vpn/java/android/net/vpn/VpnProfile.aidl | 19 + vpn/java/android/net/vpn/VpnProfile.java | 177 + vpn/java/android/net/vpn/VpnState.java | 33 + vpn/java/android/net/vpn/VpnType.java | 53 + wifi/java/android/net/wifi/IWifiManager.aidl | 6 +- .../android/net/wifi/WifiConfiguration.java | 119 +- wifi/java/android/net/wifi/WifiManager.java | 177 +- .../android/net/wifi/WifiStateTracker.java | 56 +- 1032 files changed, 81329 insertions(+), 15135 deletions(-) create mode 100644 cmds/backup/Android.mk create mode 100644 cmds/backup/NOTICE create mode 100644 cmds/backup/backup.cpp create mode 100644 cmds/bmgr/Android.mk create mode 100644 cmds/bmgr/MODULE_LICENSE_APACHE2 create mode 100644 cmds/bmgr/NOTICE create mode 100755 cmds/bmgr/bmgr create mode 100644 cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java create mode 100644 cmds/bootanimation/Android.mk rename {libs/surfaceflinger => cmds/bootanimation}/BootAnimation.cpp (94%) rename {libs/surfaceflinger => cmds/bootanimation}/BootAnimation.h (92%) create mode 100644 cmds/bootanimation/bootanimation_main.cpp create mode 100644 cmds/keystore/Android.mk create mode 100644 cmds/keystore/certtool.h create mode 100644 cmds/keystore/common.h create mode 100644 cmds/keystore/keymgmt.c create mode 100644 cmds/keystore/keymgmt.h create mode 100644 cmds/keystore/keystore_get.h create mode 100644 cmds/keystore/netkeystore.c create mode 100644 cmds/keystore/netkeystore.h create mode 100644 core/java/android/accessibilityservice/AccessibilityService.java create mode 100644 core/java/android/accessibilityservice/AccessibilityServiceInfo.aidl create mode 100644 core/java/android/accessibilityservice/AccessibilityServiceInfo.java create mode 100644 core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl create mode 100644 core/java/android/accessibilityservice/IEventListener.aidl create mode 100644 core/java/android/app/ApplicationErrorReport.java rename core/java/android/{backup/BackupService.java => app/BackupAgent.java} (61%) create mode 100644 core/java/android/app/FullBackupAgent.java rename core/java/android/{backup/IBackupService.aidl => app/IBackupAgent.aidl} (82%) create mode 100644 core/java/android/app/ISearchManagerCallback.aidl create mode 100644 core/java/android/backup/AbsoluteFileBackupHelper.java create mode 100644 core/java/android/backup/BackupDataInput.java create mode 100644 core/java/android/backup/BackupDataInputStream.java create mode 100644 core/java/android/backup/BackupHelper.java create mode 100644 core/java/android/backup/BackupHelperAgent.java create mode 100644 core/java/android/backup/BackupHelperDispatcher.java create mode 100644 core/java/android/backup/FileBackupHelperBase.java create mode 100644 core/java/android/backup/IRestoreObserver.aidl create mode 100644 core/java/android/backup/IRestoreSession.aidl create mode 100644 core/java/android/backup/RestoreSet.aidl create mode 100644 core/java/android/backup/RestoreSet.java create mode 100755 core/java/android/content/IIntentReceiver.aidl create mode 100644 core/java/android/content/IIntentSender.aidl create mode 100644 core/java/android/content/IntentSender.aidl create mode 100644 core/java/android/content/IntentSender.java create mode 100644 core/java/android/content/res/CompatibilityInfo.java create mode 100644 core/java/android/database/sqlite/SQLiteContentHelper.java create mode 100755 core/java/android/gesture/Gesture.java create mode 100644 core/java/android/gesture/GestureConstants.java create mode 100644 core/java/android/gesture/GestureLibraries.java create mode 100644 core/java/android/gesture/GestureLibrary.java create mode 100755 core/java/android/gesture/GestureOverlayView.java create mode 100644 core/java/android/gesture/GesturePoint.java create mode 100644 core/java/android/gesture/GestureStore.java create mode 100644 core/java/android/gesture/GestureStroke.java create mode 100755 core/java/android/gesture/GestureUtilities.java create mode 100755 core/java/android/gesture/Instance.java create mode 100644 core/java/android/gesture/InstanceLearner.java create mode 100755 core/java/android/gesture/Learner.java create mode 100644 core/java/android/gesture/OrientedBoundingBox.java create mode 100755 core/java/android/gesture/Prediction.java create mode 100644 core/java/android/gesture/package.html create mode 100644 core/java/android/speech/RecognitionResult.aidl create mode 100644 core/java/android/speech/RecognitionResult.java create mode 100755 core/java/android/speech/tts/ITts.aidl create mode 100755 core/java/android/speech/tts/ITtsCallback.aidl create mode 100644 core/java/android/speech/tts/TextToSpeech.java create mode 100644 core/java/android/syncml/pim/VBuilderCollection.java create mode 100644 core/java/android/syncml/pim/vcard/VCardDataBuilder.java create mode 100644 core/java/android/syncml/pim/vcard/VCardEntryCounter.java create mode 100644 core/java/android/syncml/pim/vcard/VCardNestedException.java create mode 100644 core/java/android/syncml/pim/vcard/VCardSourceDetector.java create mode 100644 core/java/android/util/LongSparseArray.java create mode 100644 core/java/android/view/accessibility/AccessibilityEvent.aidl create mode 100644 core/java/android/view/accessibility/AccessibilityEvent.java create mode 100644 core/java/android/view/accessibility/AccessibilityEventSource.java create mode 100644 core/java/android/view/accessibility/AccessibilityManager.java create mode 100644 core/java/android/view/accessibility/IAccessibilityManager.aidl create mode 100644 core/java/android/view/accessibility/IAccessibilityManagerClient.aidl create mode 100644 core/java/com/android/internal/backup/LocalTransport.java create mode 100644 core/java/com/android/internal/backup/SystemBackupAgent.java create mode 100644 core/java/com/android/internal/os/PowerProfile.java rename {libs/ui => core/jni}/Time.cpp (99%) rename {include/utils => core/jni}/TimeUtils.h (100%) create mode 100644 core/jni/android_backup_BackupDataInput.cpp create mode 100644 core/jni/android_backup_BackupDataOutput.cpp create mode 100644 core/jni/android_backup_BackupHelperDispatcher.cpp delete mode 100644 core/jni/android_backup_FileBackupHelper.cpp create mode 100644 core/jni/android_backup_FileBackupHelperBase.cpp mode change 100644 => 100755 core/jni/android_location_GpsLocationProvider.cpp create mode 100644 core/res/res/anim/slide_in_up.xml create mode 100644 core/res/res/anim/slide_out_down.xml create mode 100644 core/res/res/drawable/call_contact.png create mode 100644 core/res/res/drawable/create_contact.png delete mode 100644 core/res/res/drawable/progress.xml delete mode 100644 core/res/res/drawable/progress_circular_background.png delete mode 100644 core/res/res/drawable/progress_circular_background_small.png delete mode 100644 core/res/res/drawable/progress_circular_indeterminate.png rename core/{java/android/app/IIntentSender.aidl => res/res/drawable/progress_large_white.xml} (61%) rename core/res/res/drawable/{progress_indeterminate.xml => progress_medium_white.xml} (54%) rename core/{java/android/app/IIntentReceiver.aidl => res/res/drawable/progress_small_white.xml} (52%) mode change 100755 => 100644 mode change 100755 => 100644 core/res/res/drawable/search_dropdown_background.9.png delete mode 100644 core/res/res/drawable/search_dropdown_background_apps.9.png create mode 100644 core/res/res/drawable/search_spinner.xml create mode 100644 core/res/res/drawable/spinner_black_16.png create mode 100755 core/res/res/drawable/spinner_black_20.png create mode 100644 core/res/res/drawable/spinner_black_48.png create mode 100644 core/res/res/drawable/spinner_black_76.png rename core/res/res/drawable/{progress_particle.png => spinner_white_16.png} (87%) create mode 100644 core/res/res/drawable/spinner_white_48.png create mode 100644 core/res/res/drawable/spinner_white_76.png create mode 100644 core/res/res/drawable/stat_ecb_mode.png create mode 100755 core/res/res/drawable/stat_sys_data_dormant_1xrtt.png create mode 100755 core/res/res/drawable/stat_sys_data_dormant_evdo.png create mode 100755 core/res/res/drawable/stat_sys_roaming_cdma_0.png create mode 100644 core/res/res/drawable/stat_sys_roaming_cdma_flash.xml create mode 100755 core/res/res/drawable/stat_sys_roaming_cdma_flash_anim0.png create mode 100755 core/res/res/drawable/stat_sys_roaming_cdma_flash_anim1.png create mode 100755 core/res/res/drawable/stat_sys_signal_cdma_0.png create mode 100755 core/res/res/drawable/stat_sys_signal_cdma_1.png create mode 100755 core/res/res/drawable/stat_sys_signal_cdma_2.png create mode 100755 core/res/res/drawable/stat_sys_signal_cdma_3.png create mode 100755 core/res/res/drawable/stat_sys_signal_cdma_4.png create mode 100755 core/res/res/drawable/stat_sys_signal_evdo_0.png create mode 100755 core/res/res/drawable/stat_sys_signal_evdo_1.png create mode 100755 core/res/res/drawable/stat_sys_signal_evdo_2.png create mode 100755 core/res/res/drawable/stat_sys_signal_evdo_3.png create mode 100755 core/res/res/drawable/stat_sys_signal_evdo_4.png create mode 100644 core/res/res/drawable/stat_sys_vp_phone_call_bluetooth.png create mode 100644 core/res/res/layout/list_gestures_overlay.xml create mode 100644 core/res/res/values-ar-rEG/donottranslate-cldr.xml create mode 100644 core/res/res/values-bg-rBG/donottranslate-cldr.xml create mode 100644 core/res/res/values-ca-rES/donottranslate-cldr.xml create mode 100644 core/res/res/values-cs-rCZ/donottranslate-cldr.xml create mode 100644 core/res/res/values-cs/donottranslate-cldr.xml create mode 100644 core/res/res/values-da-rDK/donottranslate-cldr.xml create mode 100644 core/res/res/values-da/donottranslate-cldr.xml create mode 100644 core/res/res/values-de-rAT/donottranslate-cldr.xml create mode 100644 core/res/res/values-de-rCH/donottranslate-cldr.xml create mode 100644 core/res/res/values-de-rDE/donottranslate-cldr.xml create mode 100644 core/res/res/values-de-rLI/donottranslate-cldr.xml create mode 100644 core/res/res/values-de/donottranslate-cldr.xml create mode 100644 core/res/res/values-el-rGR/donottranslate-cldr.xml create mode 100644 core/res/res/values-el/donottranslate-cldr.xml create mode 100644 core/res/res/values-en-rAU/donottranslate-cldr.xml create mode 100644 core/res/res/values-en-rCA/donottranslate-cldr.xml create mode 100644 core/res/res/values-en-rGB/donottranslate-cldr.xml create mode 100644 core/res/res/values-en-rIE/donottranslate-cldr.xml create mode 100644 core/res/res/values-en-rIN/donottranslate-cldr.xml create mode 100644 core/res/res/values-en-rNZ/donottranslate-cldr.xml create mode 100644 core/res/res/values-en-rSG/donottranslate-cldr.xml create mode 100644 core/res/res/values-en-rUS/donottranslate-cldr.xml create mode 100644 core/res/res/values-en-rZA/donottranslate-cldr.xml create mode 100644 core/res/res/values-es-rES/donottranslate-cldr.xml create mode 100644 core/res/res/values-es-rUS/donottranslate-cldr.xml create mode 100644 core/res/res/values-es/donottranslate-cldr.xml create mode 100644 core/res/res/values-fi-rFI/donottranslate-cldr.xml create mode 100644 core/res/res/values-fr-rBE/donottranslate-cldr.xml create mode 100644 core/res/res/values-fr-rCA/donottranslate-cldr.xml create mode 100644 core/res/res/values-fr-rCH/donottranslate-cldr.xml create mode 100644 core/res/res/values-fr-rFR/donottranslate-cldr.xml create mode 100644 core/res/res/values-fr/donottranslate-cldr.xml create mode 100644 core/res/res/values-he-rIL/donottranslate-cldr.xml create mode 100644 core/res/res/values-hi-rIN/donottranslate-cldr.xml create mode 100644 core/res/res/values-hu-rHU/donottranslate-cldr.xml create mode 100644 core/res/res/values-id-rID/donottranslate-cldr.xml create mode 100644 core/res/res/values-it-rCH/donottranslate-cldr.xml create mode 100644 core/res/res/values-it-rIT/donottranslate-cldr.xml create mode 100644 core/res/res/values-it/donottranslate-cldr.xml create mode 100644 core/res/res/values-ja-rJP/donottranslate-cldr.xml create mode 100644 core/res/res/values-ja/donottranslate-cldr.xml create mode 100644 core/res/res/values-ja/donottranslate.xml create mode 100644 core/res/res/values-ko-rKR/donottranslate-cldr.xml create mode 100644 core/res/res/values-ko/donottranslate-cldr.xml create mode 100644 core/res/res/values-lt-rLT/donottranslate-cldr.xml create mode 100644 core/res/res/values-lv-rLV/donottranslate-cldr.xml create mode 100644 core/res/res/values-mcc204-pt/strings.xml create mode 100644 core/res/res/values-mcc230-pt/strings.xml create mode 100644 core/res/res/values-mcc232-pt/strings.xml create mode 100644 core/res/res/values-mcc234-pt/strings.xml create mode 100644 core/res/res/values-mcc260-pt/strings.xml create mode 100644 core/res/res/values-mcc262-pt/strings.xml create mode 100644 core/res/res/values-nb/donottranslate-cldr.xml create mode 100644 core/res/res/values-nl-rBE/donottranslate-cldr.xml create mode 100644 core/res/res/values-nl-rNL/donottranslate-cldr.xml create mode 100644 core/res/res/values-nl/donottranslate-cldr.xml create mode 100644 core/res/res/values-pl-rPL/donottranslate-cldr.xml create mode 100644 core/res/res/values-pl/donottranslate-cldr.xml create mode 100644 core/res/res/values-pt-rBR/donottranslate-cldr.xml create mode 100644 core/res/res/values-pt-rPT/donottranslate-cldr.xml create mode 100644 core/res/res/values-pt/donottranslate-cldr.xml create mode 100644 core/res/res/values-pt/strings.xml create mode 100644 core/res/res/values-ro-rRO/donottranslate-cldr.xml create mode 100644 core/res/res/values-ru-rRU/donottranslate-cldr.xml create mode 100644 core/res/res/values-ru/donottranslate-cldr.xml create mode 100644 core/res/res/values-sk-rSK/donottranslate-cldr.xml create mode 100644 core/res/res/values-sl-rSI/donottranslate-cldr.xml create mode 100644 core/res/res/values-sr-rRS/donottranslate-cldr.xml create mode 100644 core/res/res/values-sv-rSE/donottranslate-cldr.xml create mode 100644 core/res/res/values-sv/donottranslate-cldr.xml create mode 100644 core/res/res/values-th-rTH/donottranslate-cldr.xml create mode 100644 core/res/res/values-tr-rTR/donottranslate-cldr.xml create mode 100644 core/res/res/values-tr/donottranslate-cldr.xml create mode 100644 core/res/res/values-uk-rUA/donottranslate-cldr.xml create mode 100644 core/res/res/values-vi-rVN/donottranslate-cldr.xml create mode 100644 core/res/res/values-zh-rCN/donottranslate-cldr.xml create mode 100644 core/res/res/values-zh-rTW/donottranslate-cldr.xml create mode 100644 core/res/res/values/donottranslate-cldr.xml create mode 100644 core/res/res/values/donottranslate.xml create mode 100644 core/res/res/xml/eri.xml create mode 100644 core/res/res/xml/power_profile.xml create mode 100644 data/sounds/Silence.ogg create mode 100644 docs/html/guide/practices/ui_guidelines/activity_task_design.jd create mode 100644 docs/html/guide/practices/ui_guidelines/icon_design.jd create mode 100755 docs/html/guide/topics/resources/res-selection-flowchart.png mode change 100644 => 100755 docs/html/guide/topics/resources/resources-i18n.jd create mode 100644 docs/html/images/activity_task_design/ActivityChooser.png create mode 100644 docs/html/images/activity_task_design/ContactNew.png create mode 100644 docs/html/images/activity_task_design/ContactView.png create mode 100644 docs/html/images/activity_task_design/ContactsDialer.png create mode 100644 docs/html/images/activity_task_design/ContactsList.png create mode 100644 docs/html/images/activity_task_design/HomeTaskBasics1a.png create mode 100644 docs/html/images/activity_task_design/HomeTaskBasics1b.png create mode 100644 docs/html/images/activity_task_design/HomeTaskBasics1c.png create mode 100644 docs/html/images/activity_task_design/HomeTaskBasics1d.png create mode 100644 docs/html/images/activity_task_design/HomeTaskBasics1e.png create mode 100644 docs/html/images/activity_task_design/HomeTaskSwitching1a.png create mode 100644 docs/html/images/activity_task_design/HomeTaskSwitching1b.png create mode 100644 docs/html/images/activity_task_design/HomeTaskSwitching1c.png create mode 100644 docs/html/images/activity_task_design/HomeTaskSwitching2.png create mode 100644 docs/html/images/activity_task_design/HomeTaskSwitching3a.png create mode 100644 docs/html/images/activity_task_design/HomeTaskSwitching3b.png create mode 100644 docs/html/images/activity_task_design/HomeTaskSwitching3c.png create mode 100644 docs/html/images/activity_task_design/IntentsDiagram.png create mode 100644 docs/html/images/activity_task_design/PhoneActivitiesDiagram.png create mode 100644 docs/html/images/activity_task_design/ReplacingAnActivity.png create mode 100644 docs/html/images/activity_task_design/ReusingAnActivity1.png create mode 100644 docs/html/images/activity_task_design/ReusingAnActivity2.png create mode 100644 docs/html/images/icon_design/dialog_icon.png create mode 100644 docs/html/images/icon_design/dialog_light.png create mode 100644 docs/html/images/icon_design/do_dont.png create mode 100644 docs/html/images/icon_design/ic_launcher_IM.png create mode 100644 docs/html/images/icon_design/ic_launcher_alarmclock.png create mode 100644 docs/html/images/icon_design/ic_launcher_browser.png create mode 100644 docs/html/images/icon_design/ic_launcher_calculator.png create mode 100644 docs/html/images/icon_design/ic_launcher_calendar.png create mode 100644 docs/html/images/icon_design/ic_launcher_camera.png create mode 100644 docs/html/images/icon_design/ic_launcher_contacts.png create mode 100644 docs/html/images/icon_design/ic_launcher_email.png create mode 100644 docs/html/images/icon_design/ic_launcher_email_generic.png create mode 100644 docs/html/images/icon_design/ic_launcher_gallery.png create mode 100644 docs/html/images/icon_design/ic_launcher_generic_application.png create mode 100644 docs/html/images/icon_design/ic_launcher_google_talk.png create mode 100644 docs/html/images/icon_design/ic_launcher_maps.png create mode 100644 docs/html/images/icon_design/ic_launcher_marketplace.png create mode 100644 docs/html/images/icon_design/ic_launcher_musicplayer_2.png create mode 100644 docs/html/images/icon_design/ic_launcher_phone_dialer.png create mode 100644 docs/html/images/icon_design/ic_launcher_settings.png create mode 100644 docs/html/images/icon_design/ic_launcher_sms_mms.png create mode 100644 docs/html/images/icon_design/ic_launcher_video_camera.png create mode 100644 docs/html/images/icon_design/ic_launcher_voicedial.png create mode 100644 docs/html/images/icon_design/ic_launcher_voicesearch.png create mode 100644 docs/html/images/icon_design/ic_launcher_youtube.png create mode 100644 docs/html/images/icon_design/ic_menu_add.png create mode 100644 docs/html/images/icon_design/ic_menu_archive.png create mode 100644 docs/html/images/icon_design/ic_menu_attachment.png create mode 100644 docs/html/images/icon_design/ic_menu_back.png create mode 100644 docs/html/images/icon_design/ic_menu_call.png create mode 100644 docs/html/images/icon_design/ic_menu_camera.png create mode 100644 docs/html/images/icon_design/ic_menu_camera_video_view.png create mode 100644 docs/html/images/icon_design/ic_menu_close_clear_cancel.png create mode 100644 docs/html/images/icon_design/ic_menu_compass.png create mode 100644 docs/html/images/icon_design/ic_menu_delete.png create mode 100644 docs/html/images/icon_design/ic_menu_directions.png create mode 100644 docs/html/images/icon_design/ic_menu_edit.png create mode 100644 docs/html/images/icon_design/ic_menu_favorite.png create mode 100644 docs/html/images/icon_design/ic_menu_forward.png create mode 100644 docs/html/images/icon_design/ic_menu_gallery.png create mode 100644 docs/html/images/icon_design/ic_menu_goto.png create mode 100644 docs/html/images/icon_design/ic_menu_help.png create mode 100644 docs/html/images/icon_design/ic_menu_home.png create mode 100644 docs/html/images/icon_design/ic_menu_info_details.png create mode 100644 docs/html/images/icon_design/ic_menu_mapmode.png create mode 100644 docs/html/images/icon_design/ic_menu_mark.png create mode 100644 docs/html/images/icon_design/ic_menu_more.png create mode 100644 docs/html/images/icon_design/ic_menu_mylocation.png create mode 100644 docs/html/images/icon_design/ic_menu_play_clip.png create mode 100644 docs/html/images/icon_design/ic_menu_preferences.png create mode 100644 docs/html/images/icon_design/ic_menu_recent_history.png create mode 100644 docs/html/images/icon_design/ic_menu_refresh.png create mode 100644 docs/html/images/icon_design/ic_menu_rotate.png create mode 100644 docs/html/images/icon_design/ic_menu_save.png create mode 100644 docs/html/images/icon_design/ic_menu_search.png create mode 100644 docs/html/images/icon_design/ic_menu_send.png create mode 100644 docs/html/images/icon_design/ic_menu_share.png create mode 100644 docs/html/images/icon_design/ic_menu_shuffle.png create mode 100644 docs/html/images/icon_design/ic_menu_upload.png create mode 100644 docs/html/images/icon_design/ic_menu_view.png create mode 100644 docs/html/images/icon_design/ic_menu_zoom.png create mode 100644 docs/html/images/icon_design/icon_guidelines_logo.png create mode 100644 docs/html/images/icon_design/launcher_light.png create mode 100644 docs/html/images/icon_design/launcher_palette_black.png create mode 100644 docs/html/images/icon_design/launcher_palette_dark.png create mode 100644 docs/html/images/icon_design/launcher_palette_gradient_dark.png create mode 100644 docs/html/images/icon_design/launcher_palette_gradient_light.png create mode 100644 docs/html/images/icon_design/launcher_palette_gradient_medium.png create mode 100644 docs/html/images/icon_design/launcher_palette_light.png create mode 100644 docs/html/images/icon_design/launcher_palette_medium.png create mode 100644 docs/html/images/icon_design/launcher_palette_white.png create mode 100644 docs/html/images/icon_design/launcher_structure.png create mode 100644 docs/html/images/icon_design/listview_icon.png create mode 100644 docs/html/images/icon_design/listview_icon_details.png create mode 100644 docs/html/images/icon_design/menu_light.png create mode 100644 docs/html/images/icon_design/menu_palette_black.png create mode 100644 docs/html/images/icon_design/menu_palette_fill.png create mode 100644 docs/html/images/icon_design/menu_palette_gradient_medium.png create mode 100644 docs/html/images/icon_design/menu_palette_white.png create mode 100644 docs/html/images/icon_design/menu_structure.png create mode 100644 docs/html/images/icon_design/stat_notify_alarm.png create mode 100644 docs/html/images/icon_design/stat_notify_calendar.png create mode 100644 docs/html/images/icon_design/stat_notify_chat.png create mode 100644 docs/html/images/icon_design/stat_notify_disk_full.png create mode 100644 docs/html/images/icon_design/stat_notify_email.png create mode 100644 docs/html/images/icon_design/stat_notify_email_generic.png create mode 100644 docs/html/images/icon_design/stat_notify_missed_call.png create mode 100644 docs/html/images/icon_design/stat_notify_musicplayer.png create mode 100644 docs/html/images/icon_design/stat_notify_sms.png create mode 100644 docs/html/images/icon_design/stat_notify_sync_anim0.png create mode 100644 docs/html/images/icon_design/stat_notify_sync_error.png create mode 100644 docs/html/images/icon_design/stat_notify_voicemail.png create mode 100644 docs/html/images/icon_design/stat_notify_wifi_in_range.png create mode 100644 docs/html/images/icon_design/stat_sys_battery_100.png create mode 100644 docs/html/images/icon_design/stat_sys_battery_empty.png create mode 100644 docs/html/images/icon_design/stat_sys_data_bluetooth.png create mode 100644 docs/html/images/icon_design/stat_sys_data_bluetooth_connected.png create mode 100644 docs/html/images/icon_design/stat_sys_data_connected_3g.png create mode 100644 docs/html/images/icon_design/stat_sys_data_connected_e.png create mode 100644 docs/html/images/icon_design/stat_sys_data_connected_g.png create mode 100644 docs/html/images/icon_design/stat_sys_data_usb.png create mode 100644 docs/html/images/icon_design/stat_sys_gps_on.png create mode 100644 docs/html/images/icon_design/stat_sys_install_complete.png create mode 100644 docs/html/images/icon_design/stat_sys_phone_call.png create mode 100644 docs/html/images/icon_design/stat_sys_phone_call_forward.png create mode 100644 docs/html/images/icon_design/stat_sys_phone_call_on_hold.png create mode 100644 docs/html/images/icon_design/stat_sys_r_signal_4.png create mode 100644 docs/html/images/icon_design/stat_sys_ringer_silent_old.png create mode 100644 docs/html/images/icon_design/stat_sys_ringer_vibrate.png create mode 100644 docs/html/images/icon_design/stat_sys_signal_4.png create mode 100644 docs/html/images/icon_design/stat_sys_signal_flightmode.png create mode 100644 docs/html/images/icon_design/stat_sys_signal_null.png create mode 100644 docs/html/images/icon_design/stat_sys_speakerphone.png create mode 100644 docs/html/images/icon_design/stat_sys_warning.png create mode 100644 docs/html/images/icon_design/stat_sys_wifi_signal_4.png create mode 100644 docs/html/images/icon_design/stat_sys_wifi_unavailable.png create mode 100644 docs/html/images/icon_design/statusbar_light.png create mode 100644 docs/html/images/icon_design/statusbar_palette_black.png create mode 100644 docs/html/images/icon_design/statusbar_palette_fill.png create mode 100644 docs/html/images/icon_design/statusbar_palette_grey.png create mode 100644 docs/html/images/icon_design/statusbar_palette_white.png create mode 100644 docs/html/images/icon_design/statusbar_structure.png create mode 100644 docs/html/images/icon_design/tab_icon_selected.png create mode 100644 docs/html/images/icon_design/tab_icon_unselected.png create mode 100644 docs/html/images/icon_design/tab_palette_selected_fill.png create mode 100644 docs/html/images/icon_design/tab_selected_light.png create mode 100644 docs/html/images/icon_design/tab_unselected_light.png create mode 100644 docs/html/sdk/1.5_r2/index.jd create mode 100644 docs/html/sdk/1.5_r2/installing.jd create mode 100644 docs/html/sdk/1.5_r2/requirements.jd create mode 100644 docs/html/sdk/1.5_r2/upgrading.jd create mode 100644 docs/html/shareables/icon_templates-v1.0.zip rename location/java/android/location/ILocationCollector.aidl => graphics/java/android/graphics/drawable/Animatable.java (56%) create mode 100644 graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java create mode 100644 include/tts/TtsEngine.h create mode 100644 include/utils/BackupHelpers.h delete mode 100644 include/utils/backup_helpers.h create mode 100644 keystore/java/android/security/CertTool.java create mode 100644 keystore/java/android/security/Keystore.java create mode 100644 keystore/java/android/security/Reply.java create mode 100644 keystore/java/android/security/ServiceCommand.java create mode 100644 keystore/jni/Android.mk create mode 100644 keystore/jni/cert.c create mode 100644 keystore/jni/cert.h create mode 100644 keystore/jni/certtool.c delete mode 100644 libs/ui/Point.cpp create mode 100644 libs/utils/BackupData.cpp create mode 100644 libs/utils/BackupHelpers.cpp rename libs/utils/{characterData.h => CharacterData.h} (100%) delete mode 100644 libs/utils/file_backup_helper.cpp mode change 100644 => 100755 location/java/com/android/internal/location/GpsLocationProvider.java create mode 100644 media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaPlayerStressTest.java create mode 100644 opengl/tests/lighting1709/Android.mk create mode 100644 opengl/tests/lighting1709/AndroidManifest.xml create mode 100644 opengl/tests/lighting1709/src/com/android/lightingtest/ClearActivity.java create mode 100644 packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java create mode 100644 packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java create mode 100644 packages/SubscribedFeedsProvider/res/values/strings.xml create mode 100644 packages/TtsService/Android.mk create mode 100755 packages/TtsService/AndroidManifest.xml create mode 100644 packages/TtsService/MODULE_LICENSE_APACHE2 create mode 100644 packages/TtsService/NOTICE create mode 100755 packages/TtsService/jni/Android.mk create mode 100644 packages/TtsService/jni/android_tts_SynthProxy.cpp create mode 100755 packages/TtsService/src/android/tts/SynthProxy.java create mode 100755 packages/TtsService/src/android/tts/TtsService.java create mode 100644 packages/VpnServices/Android.mk create mode 100644 packages/VpnServices/AndroidManifest.xml create mode 100644 packages/VpnServices/MODULE_LICENSE_APACHE2 create mode 100644 packages/VpnServices/NOTICE create mode 100644 packages/VpnServices/res/drawable/vpn_connected.png create mode 100644 packages/VpnServices/res/drawable/vpn_disconnected.png create mode 100755 packages/VpnServices/res/values/strings.xml create mode 100644 packages/VpnServices/src/com/android/server/vpn/AndroidServiceProxy.java create mode 100644 packages/VpnServices/src/com/android/server/vpn/L2tpIpsecPskService.java create mode 100644 packages/VpnServices/src/com/android/server/vpn/L2tpIpsecService.java create mode 100644 packages/VpnServices/src/com/android/server/vpn/L2tpService.java create mode 100644 packages/VpnServices/src/com/android/server/vpn/MtpdHelper.java create mode 100644 packages/VpnServices/src/com/android/server/vpn/NormalProcessProxy.java create mode 100644 packages/VpnServices/src/com/android/server/vpn/PptpService.java create mode 100644 packages/VpnServices/src/com/android/server/vpn/ProcessProxy.java create mode 100644 packages/VpnServices/src/com/android/server/vpn/VpnService.java create mode 100644 packages/VpnServices/src/com/android/server/vpn/VpnServiceBinder.java create mode 100644 services/java/com/android/server/AccessibilityManagerService.java create mode 100644 services/java/com/android/server/EntropyService.java create mode 100644 services/java/com/android/server/PackageManagerBackupAgent.java create mode 100644 services/java/com/android/server/RandomBlock.java create mode 100644 services/java/com/android/server/am/BackupRecord.java create mode 100644 telephony/java/android/telephony/SignalStrength.aidl create mode 100644 telephony/java/android/telephony/SignalStrength.java rename telephony/java/com/android/internal/telephony/{gsm/PDPContextState.java => DataCallState.java} (63%) create mode 100644 telephony/java/com/android/internal/telephony/cdma/CdmaCallWaitingNotification.java create mode 100644 telephony/java/com/android/internal/telephony/cdma/CdmaInformationRecords.java create mode 100644 telephony/java/com/android/internal/telephony/cdma/EriInfo.java create mode 100644 telephony/java/com/android/internal/telephony/cdma/EriManager.java create mode 100644 telephony/java/com/android/internal/telephony/cdma/SignalToneUtil.java delete mode 100644 telephony/java/com/android/internal/telephony/gsm/PppLink.java create mode 100644 telephony/java/com/android/internal/telephony/gsm/SmsBroadcastConfigInfo.java create mode 100644 tests/AndroidTests/src/com/android/unit_tests/NeighboringCellInfoTest.java create mode 100644 tests/AndroidTests/src/com/android/unit_tests/SearchableActivity.java create mode 100644 tests/AndroidTests/src/com/android/unit_tests/SuggestionProvider.java create mode 100644 tests/AndroidTests/src/com/android/unit_tests/content/MemoryFileProvider.java create mode 100644 tests/AndroidTests/src/com/android/unit_tests/content/MemoryFileProviderTest.java create mode 100644 tests/DpiTest/res/values-largeScreen/strings.xml create mode 100644 tests/DpiTest/res/values-normalScreen/strings.xml create mode 100644 tests/DpiTest/res/values-smallScreen/strings.xml create mode 100644 tests/DpiTest/res/values/strings.xml create mode 100644 tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java create mode 100644 tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTest.java create mode 100644 tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestActivity.java delete mode 100644 tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestsAutoTest.java create mode 100644 tests/FrameworkTest/src/com/android/frameworktest/accessibility/AccessibilityTestService.java create mode 100644 tests/FrameworkTest/tests/src/com/android/frameworktest/accessibility/RecycleAccessibilityEventTest.java create mode 100644 tests/backup/src/com/android/backuptest/BackupTestAgent.java delete mode 100644 tests/backup/src/com/android/backuptest/BackupTestService.java create mode 100755 tests/backup/test_backup.sh create mode 100755 tests/backup/test_restore.sh create mode 100644 tests/permission/Android.mk create mode 100644 tests/permission/AndroidManifest.xml create mode 100644 tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java create mode 100644 tests/permission/src/com/android/framework/permission/tests/HardwareServicePermissionTest.java create mode 100644 tests/permission/src/com/android/framework/permission/tests/PmPermissionsTests.java create mode 100644 tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java create mode 100644 tests/permission/src/com/android/framework/permission/tests/SettingsPermissionsTests.java create mode 100644 tests/permission/src/com/android/framework/permission/tests/SmsManagerPermissionTest.java create mode 100644 tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java create mode 100644 vpn/java/android/net/vpn/IVpnService.aidl create mode 100644 vpn/java/android/net/vpn/L2tpIpsecProfile.java create mode 100644 vpn/java/android/net/vpn/L2tpIpsecPskProfile.java create mode 100644 vpn/java/android/net/vpn/L2tpProfile.java create mode 100644 vpn/java/android/net/vpn/PptpProfile.java create mode 100644 vpn/java/android/net/vpn/VpnManager.java create mode 100644 vpn/java/android/net/vpn/VpnProfile.aidl create mode 100644 vpn/java/android/net/vpn/VpnProfile.java create mode 100644 vpn/java/android/net/vpn/VpnState.java create mode 100644 vpn/java/android/net/vpn/VpnType.java diff --git a/Android.mk b/Android.mk index ca76fb4b74de..f32129e40fa5 100644 --- a/Android.mk +++ b/Android.mk @@ -64,15 +64,17 @@ endif ## ## READ ME: ######################################################## LOCAL_SRC_FILES += \ + core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl \ + core/java/android/accessibilityservice/IEventListener.aidl \ core/java/android/accounts/IAccountsService.aidl \ core/java/android/app/IActivityPendingResult.aidl \ core/java/android/app/IActivityWatcher.aidl \ core/java/android/app/IAlarmManager.aidl \ + core/java/android/app/IBackupAgent.aidl \ core/java/android/app/IInstrumentationWatcher.aidl \ - core/java/android/app/IIntentReceiver.aidl \ - core/java/android/app/IIntentSender.aidl \ core/java/android/app/INotificationManager.aidl \ core/java/android/app/ISearchManager.aidl \ + core/java/android/app/ISearchManagerCallback.aidl \ core/java/android/app/IServiceConnection.aidl \ core/java/android/app/IStatusBar.aidl \ core/java/android/app/IThumbnailReceiver.aidl \ @@ -80,15 +82,18 @@ LOCAL_SRC_FILES += \ core/java/android/app/IWallpaperService.aidl \ core/java/android/app/IWallpaperServiceCallback.aidl \ core/java/android/backup/IBackupManager.aidl \ - core/java/android/backup/IBackupService.aidl \ + core/java/android/backup/IRestoreObserver.aidl \ + core/java/android/backup/IRestoreSession.aidl \ core/java/android/bluetooth/IBluetoothA2dp.aidl \ core/java/android/bluetooth/IBluetoothDevice.aidl \ core/java/android/bluetooth/IBluetoothDeviceCallback.aidl \ core/java/android/bluetooth/IBluetoothHeadset.aidl \ - core/java/android/content/IContentService.aidl \ + core/java/android/content/IContentService.aidl \ + core/java/android/content/IIntentReceiver.aidl \ + core/java/android/content/IIntentSender.aidl \ core/java/android/content/ISyncAdapter.aidl \ core/java/android/content/ISyncContext.aidl \ - core/java/android/content/ISyncStatusObserver.aidl \ + core/java/android/content/ISyncStatusObserver.aidl \ core/java/android/content/pm/IPackageDataObserver.aidl \ core/java/android/content/pm/IPackageDeleteObserver.aidl \ core/java/android/content/pm/IPackageInstallObserver.aidl \ @@ -106,6 +111,8 @@ LOCAL_SRC_FILES += \ core/java/android/os/IPermissionController.aidl \ core/java/android/os/IPowerManager.aidl \ core/java/android/text/IClipboard.aidl \ + core/java/android/view/accessibility/IAccessibilityManager.aidl \ + core/java/android/view/accessibility/IAccessibilityManagerClient.aidl \ core/java/android/view/IApplicationToken.aidl \ core/java/android/view/IOnKeyguardExitResult.aidl \ core/java/android/view/IRotationWatcher.aidl \ @@ -114,6 +121,8 @@ LOCAL_SRC_FILES += \ core/java/android/view/IWindowSession.aidl \ core/java/android/speech/IRecognitionListener.aidl \ core/java/android/speech/IRecognitionService.aidl \ + core/java/android/speech/tts/ITts.aidl \ + core/java/android/speech/tts/ITtsCallback.aidl \ core/java/com/android/internal/app/IBatteryStats.aidl \ core/java/com/android/internal/app/IUsageStats.aidl \ core/java/com/android/internal/appwidget/IAppWidgetService.aidl \ @@ -131,7 +140,6 @@ LOCAL_SRC_FILES += \ location/java/android/location/IGeocodeProvider.aidl \ location/java/android/location/IGpsStatusListener.aidl \ location/java/android/location/IGpsStatusProvider.aidl \ - location/java/android/location/ILocationCollector.aidl \ location/java/android/location/ILocationListener.aidl \ location/java/android/location/ILocationManager.aidl \ location/java/android/location/ILocationProvider.aidl \ @@ -145,7 +153,8 @@ LOCAL_SRC_FILES += \ telephony/java/com/android/internal/telephony/IIccPhoneBook.aidl \ telephony/java/com/android/internal/telephony/ISms.aidl \ wifi/java/android/net/wifi/IWifiManager.aidl \ - telephony/java/com/android/internal/telephony/IExtendedNetworkService.aidl + telephony/java/com/android/internal/telephony/IExtendedNetworkService.aidl \ + vpn/java/android/net/vpn/IVpnService.aidl \ # FRAMEWORKS_BASE_JAVA_SRC_DIRS comes from build/core/pathmap.mk LOCAL_AIDL_INCLUDES += $(FRAMEWORKS_BASE_JAVA_SRC_DIRS) @@ -190,6 +199,7 @@ aidl_files := \ frameworks/base/core/java/android/app/PendingIntent.aidl \ frameworks/base/core/java/android/content/ComponentName.aidl \ frameworks/base/core/java/android/content/Intent.aidl \ + frameworks/base/core/java/android/content/IntentSender.aidl \ frameworks/base/core/java/android/content/SyncStats.aidl \ frameworks/base/core/java/android/content/res/Configuration.aidl \ frameworks/base/core/java/android/appwidget/AppWidgetProviderInfo.aidl \ @@ -215,7 +225,8 @@ aidl_files := \ frameworks/base/location/java/android/location/Location.aidl \ frameworks/base/telephony/java/android/telephony/ServiceState.aidl \ frameworks/base/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl \ - frameworks/base/telephony/java/com/android/internal/telephony/ITelephony.aidl + frameworks/base/telephony/java/com/android/internal/telephony/ITelephony.aidl \ + frameworks/base/vpn/java/android/net/vpn/IVpnService.aidl \ gen := $(TARGET_OUT_COMMON_INTERMEDIATES)/framework.aidl $(gen): PRIVATE_SRC_FILES := $(aidl_files) @@ -337,7 +348,7 @@ web_docs_sample_code_flags := \ # most current Android platform version included in the SDK package. framework_docs_SDK_VERSION := 1.5 # release version for SDK (ie "Release x") -framework_docs_SDK_REL_ID := 1 +framework_docs_SDK_REL_ID := 2 framework_docs_SDK_CURRENT_DIR := $(framework_docs_SDK_VERSION)_r$(framework_docs_SDK_REL_ID) framework_docs_LOCAL_DROIDDOC_OPTIONS += \ diff --git a/NOTICE b/NOTICE index 267a6aafd2e9..bb9c5f269f89 100644 --- a/NOTICE +++ b/NOTICE @@ -220,3 +220,54 @@ the Apache2 License. END OF TERMS AND CONDITIONS + + +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE + +Unicode Data Files include all data files under the directories +http://www.unicode.org/Public/, http://www.unicode.org/reports/, +and http://www.unicode.org/cldr/data/ . Unicode Software includes any +source code published in the Unicode Standard or under the directories +http://www.unicode.org/Public/, http://www.unicode.org/reports/, and +http://www.unicode.org/cldr/data/. + +NOTICE TO USER: Carefully read the following legal agreement. BY +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA +FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY +ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF +THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, +DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 1991-2008 Unicode, Inc. All rights reserved. Distributed +under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation (the +"Data Files") or Unicode software and any associated documentation (the +"Software") to deal in the Data Files or Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, and/or sell copies of the Data Files or Software, +and to permit persons to whom the Data Files or Software are furnished to +do so, provided that (a) the above copyright notice(s) and this permission +notice appear with all copies of the Data Files or Software, (b) both the +above copyright notice(s) and this permission notice appear in associated +documentation, and (c) there is clear notice in each modified Data File +or in the Software as well as in the documentation associated with the +Data File(s) or Software that the data or software has been modified. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT +OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in these Data Files or Software without prior written +authorization of the copyright holder. diff --git a/api/4.xml b/api/4.xml index 893301e10009..c8a2e83fd136 100644 --- a/api/4.xml +++ b/api/4.xml @@ -122,17 +122,6 @@ visibility="public" > - - - - - - - - + + - - - - + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -26988,6 +30337,17 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + @@ -134630,6 +139865,23 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -167532,6 +173661,17 @@ deprecated="not deprecated" visibility="public" > + + + + + + + + + + + + + + + + + + + + #include "CameraService.h" +#include #include namespace android { @@ -42,6 +43,7 @@ extern "C" { #include #include #include +#include } // When you enable this, as well as DEBUG_REFS=1 and @@ -63,6 +65,10 @@ extern "C" { static int debug_frame_cnt; #endif +static int getCallingPid() { + return IPCThreadState::self()->getCallingPid(); +} + // ---------------------------------------------------------------------------- void CameraService::instantiate() { @@ -76,6 +82,7 @@ CameraService::CameraService() : BnCameraService() { LOGI("CameraService started: pid=%d", getpid()); + mUsers = 0; } CameraService::~CameraService() @@ -87,72 +94,105 @@ CameraService::~CameraService() sp CameraService::connect(const sp& cameraClient) { - LOGD("Connect E from ICameraClient %p", cameraClient->asBinder().get()); + int callingPid = getCallingPid(); + LOGD("CameraService::connect E (pid %d, client %p)", callingPid, + cameraClient->asBinder().get()); - Mutex::Autolock lock(mLock); + Mutex::Autolock lock(mServiceLock); sp client; if (mClient != 0) { sp currentClient = mClient.promote(); if (currentClient != 0) { sp currentCameraClient(currentClient->getCameraClient()); if (cameraClient->asBinder() == currentCameraClient->asBinder()) { - // this is the same client reconnecting... - LOGD("Connect X same client (%p) is reconnecting...", cameraClient->asBinder().get()); + // This is the same client reconnecting... + LOGD("CameraService::connect X (pid %d, same client %p) is reconnecting...", + callingPid, cameraClient->asBinder().get()); return currentClient; } else { - // it's another client... reject it - LOGD("new client (%p) attempting to connect - rejected", cameraClient->asBinder().get()); + // It's another client... reject it + LOGD("CameraService::connect X (pid %d, new client %p) rejected. " + "(old pid %d, old client %p)", + callingPid, cameraClient->asBinder().get(), + currentClient->mClientPid, currentCameraClient->asBinder().get()); + if (kill(currentClient->mClientPid, 0) == -1 && errno == ESRCH) { + LOGD("The old client is dead!"); + } return client; } } else { // can't promote, the previous client has died... - LOGD("new client connecting, old reference was dangling..."); + LOGD("New client (pid %d) connecting, old reference was dangling...", + callingPid); mClient.clear(); } } + if (mUsers > 0) { + LOGD("Still have client, rejected"); + return client; + } + // create a new Client object - client = new Client(this, cameraClient, IPCThreadState::self()->getCallingPid()); + client = new Client(this, cameraClient, callingPid); mClient = client; #if DEBUG_CLIENT_REFERENCES // Enable tracking for this object, and track increments and decrements of // the refcount. client->trackMe(true, true); #endif - LOGD("Connect X"); + LOGD("CameraService::connect X"); return client; } void CameraService::removeClient(const sp& cameraClient) { - // declar this outside the lock to make absolutely sure the + int callingPid = getCallingPid(); + + // Declare this outside the lock to make absolutely sure the // destructor won't be called with the lock held. sp client; - Mutex::Autolock lock(mLock); + Mutex::Autolock lock(mServiceLock); if (mClient == 0) { // This happens when we have already disconnected. - LOGV("mClient is null."); + LOGD("removeClient (pid %d): already disconnected", callingPid); return; } - // Promote mClient. It should never fail because we're called from - // a binder call, so someone has to have a strong reference. + // Promote mClient. It can fail if we are called from this path: + // Client::~Client() -> disconnect() -> removeClient(). client = mClient.promote(); if (client == 0) { - LOGW("can't get a strong reference on mClient!"); + LOGD("removeClient (pid %d): no more strong reference", callingPid); mClient.clear(); return; } if (cameraClient->asBinder() != client->getCameraClient()->asBinder()) { // ugh! that's not our client!! - LOGW("removeClient() called, but mClient doesn't match!"); + LOGW("removeClient (pid %d): mClient doesn't match!", callingPid); } else { // okay, good, forget about mClient mClient.clear(); } + + LOGD("removeClient (pid %d) done", callingPid); +} + +// The reason we need this count is a new CameraService::connect() request may +// come in while the previous Client's destructor has not been run or is still +// running. If the last strong reference of the previous Client is gone but +// destructor has not been run, we should not allow the new Client to be created +// because we need to wait for the previous Client to tear down the hardware +// first. +void CameraService::incUsers() { + android_atomic_inc(&mUsers); +} + +void CameraService::decUsers() { + android_atomic_dec(&mUsers); } static sp newMediaPlayer(const char *file) @@ -177,7 +217,8 @@ static sp newMediaPlayer(const char *file) CameraService::Client::Client(const sp& cameraService, const sp& cameraClient, pid_t clientPid) { - LOGD("Client E constructor"); + int callingPid = getCallingPid(); + LOGD("Client::Client E (pid %d)", callingPid); mCameraService = cameraService; mCameraClient = cameraClient; mClientPid = clientPid; @@ -189,22 +230,28 @@ CameraService::Client::Client(const sp& cameraService, // Callback is disabled by default mPreviewCallbackFlag = FRAME_CALLBACK_FLAG_NOOP; - LOGD("Client X constructor"); + cameraService->incUsers(); + LOGD("Client::Client X (pid %d)", callingPid); } status_t CameraService::Client::checkPid() { - if (mClientPid == IPCThreadState::self()->getCallingPid()) return NO_ERROR; - LOGW("Attempt to use locked camera (%p) from different process", getCameraClient()->asBinder().get()); + int callingPid = getCallingPid(); + if (mClientPid == callingPid) return NO_ERROR; + LOGW("Attempt to use locked camera (client %p) from different process " + " (old pid %d, new pid %d)", + getCameraClient()->asBinder().get(), mClientPid, callingPid); return -EBUSY; } status_t CameraService::Client::lock() { + int callingPid = getCallingPid(); + LOGD("lock from pid %d (mClientPid %d)", callingPid, mClientPid); Mutex::Autolock _l(mLock); // lock camera to this client if the the camera is unlocked if (mClientPid == 0) { - mClientPid = IPCThreadState::self()->getCallingPid(); + mClientPid = callingPid; return NO_ERROR; } // returns NO_ERROR if the client already owns the camera, -EBUSY otherwise @@ -213,13 +260,14 @@ status_t CameraService::Client::lock() status_t CameraService::Client::unlock() { + int callingPid = getCallingPid(); + LOGD("unlock from pid %d (mClientPid %d)", callingPid, mClientPid); Mutex::Autolock _l(mLock); // allow anyone to use camera - LOGV("unlock (%p)", getCameraClient()->asBinder().get()); status_t result = checkPid(); if (result == NO_ERROR) { mClientPid = 0; - + LOGD("clear mCameraClient (pid %d)", callingPid); // we need to remove the reference so that when app goes // away, the reference count goes to 0. mCameraClient.clear(); @@ -229,15 +277,17 @@ status_t CameraService::Client::unlock() status_t CameraService::Client::connect(const sp& client) { + int callingPid = getCallingPid(); + // connect a new process to the camera - LOGV("connect (%p)", client->asBinder().get()); + LOGD("Client::connect E (pid %d, client %p)", callingPid, client->asBinder().get()); // I hate this hack, but things get really ugly when the media recorder // service is handing back the camera to the app. The ICameraClient // destructor will be called during the same IPC, making it look like // the remote client is trying to disconnect. This hack temporarily // sets the mClientPid to an invalid pid to prevent the hardware from - // being torn down. + // being torn down. { // hold a reference to the old client or we will deadlock if the client is @@ -245,25 +295,30 @@ status_t CameraService::Client::connect(const sp& client) sp oldClient; { Mutex::Autolock _l(mLock); - if (mClientPid != 0) { - LOGW("Tried to connect to locked camera"); + if (mClientPid != 0 && checkPid() != NO_ERROR) { + LOGW("Tried to connect to locked camera (old pid %d, new pid %d)", + mClientPid, callingPid); return -EBUSY; } oldClient = mCameraClient; // did the client actually change? - if (client->asBinder() == mCameraClient->asBinder()) return NO_ERROR; + if (client->asBinder() == mCameraClient->asBinder()) { + LOGD("Connect to the same client"); + return NO_ERROR; + } mCameraClient = client; mClientPid = -1; mPreviewCallbackFlag = FRAME_CALLBACK_FLAG_NOOP; - LOGV("connect new process (%d) to existing camera client", mClientPid); + LOGD("Connect to the new client (pid %d, client %p)", + callingPid, mCameraClient->asBinder().get()); } } // the old client destructor is called when oldClient goes out of scope // now we set the new PID to lock the interface again - mClientPid = IPCThreadState::self()->getCallingPid(); + mClientPid = callingPid; return NO_ERROR; } @@ -280,8 +335,11 @@ static void *unregister_surface(void *arg) CameraService::Client::~Client() { + int callingPid = getCallingPid(); + // tear down client - LOGD("Client (%p) E destructor", getCameraClient()->asBinder().get()); + LOGD("Client::~Client E (pid %d, client %p)", + callingPid, getCameraClient()->asBinder().get()); if (mSurface != 0 && !mUseOverlay) { #if HAVE_ANDROID_OS pthread_t thr; @@ -307,49 +365,59 @@ CameraService::Client::~Client() } // make sure we tear down the hardware - mClientPid = IPCThreadState::self()->getCallingPid(); + mClientPid = callingPid; disconnect(); - LOGD("Client X destructor"); + LOGD("Client::~Client X (pid %d)", mClientPid); } void CameraService::Client::disconnect() { - LOGD("Client (%p) E disconnect from (%d)", - getCameraClient()->asBinder().get(), - IPCThreadState::self()->getCallingPid()); + int callingPid = getCallingPid(); + + LOGD("Client::disconnect() E (pid %d client %p)", + callingPid, getCameraClient()->asBinder().get()); + Mutex::Autolock lock(mLock); if (mClientPid <= 0) { - LOGV("camera is unlocked, don't tear down hardware"); + LOGD("camera is unlocked (mClientPid = %d), don't tear down hardware", mClientPid); return; } if (checkPid() != NO_ERROR) { - LOGV("Different client - don't disconnect"); + LOGD("Different client - don't disconnect"); return; } - mCameraService->removeClient(mCameraClient); - if (mHardware != 0) { - LOGV("hardware teardown"); - // Before destroying mHardware, we must make sure it's in the - // idle state. - mHardware->stopPreview(); - // Cancel all picture callbacks. - mHardware->cancelPicture(true, true, true); - // Release the hardware resources. - mHardware->release(); - } + // Make sure disconnect() is done once and once only, whether it is called + // from the user directly, or called by the destructor. + if (mHardware == 0) return; + + LOGD("hardware teardown"); + // Before destroying mHardware, we must make sure it's in the + // idle state. + mHardware->stopPreview(); + // Cancel all picture callbacks. + mHardware->cancelPicture(true, true, true); + // Release the hardware resources. + mHardware->release(); mHardware.clear(); - LOGD("Client X disconnect"); + + mCameraService->removeClient(mCameraClient); + mCameraService->decUsers(); + + LOGD("Client::disconnect() X (pid %d)", callingPid); } // pass the buffered ISurface to the camera service status_t CameraService::Client::setPreviewDisplay(const sp& surface) { - LOGD("setPreviewDisplay(%p)", surface.get()); + LOGD("setPreviewDisplay(%p) (pid %d)", + ((surface == NULL) ? NULL : surface.get()), getCallingPid()); Mutex::Autolock lock(mLock); status_t result = checkPid(); if (result != NO_ERROR) return result; + Mutex::Autolock surfaceLock(mSurfaceLock); + result = NO_ERROR; // asBinder() is safe on NULL (returns NULL) if (surface->asBinder() != mSurface->asBinder()) { if (mSurface != 0 && !mUseOverlay) { @@ -357,24 +425,35 @@ status_t CameraService::Client::setPreviewDisplay(const sp& surface) mSurface->unregisterBuffers(); } mSurface = surface; + // If preview has been already started, set overlay or register preview + // buffers now. + if (mHardware->previewEnabled()) { + if (mUseOverlay) { + result = setOverlay(); + } else if (mSurface != 0) { + result = registerPreviewBuffers(); + } + } } - return NO_ERROR; + return result; } // set the preview callback flag to affect how the received frames from // preview are handled. void CameraService::Client::setPreviewCallbackFlag(int callback_flag) { - LOGV("setPreviewCallbackFlag"); + LOGV("setPreviewCallbackFlag (pid %d)", getCallingPid()); Mutex::Autolock lock(mLock); if (checkPid() != NO_ERROR) return; mPreviewCallbackFlag = callback_flag; } -// start preview mode, must call setPreviewDisplay first +// start preview mode status_t CameraService::Client::startCameraMode(camera_mode mode) { - LOGD("startCameraMode(%d)", mode); + int callingPid = getCallingPid(); + + LOGD("startCameraMode(%d) (pid %d)", mode, callingPid); /* we cannot call into mHardware with mLock held because * mHardware has callbacks onto us which acquire this lock @@ -389,23 +468,25 @@ status_t CameraService::Client::startCameraMode(camera_mode mode) return INVALID_OPERATION; } - if (mSurface == 0) { - LOGE("setPreviewDisplay must be called before startCameraMode!"); - return INVALID_OPERATION; - } - switch(mode) { case CAMERA_RECORDING_MODE: + if (mSurface == 0) { + LOGE("setPreviewDisplay must be called before startRecordingMode."); + return INVALID_OPERATION; + } return startRecordingMode(); default: // CAMERA_PREVIEW_MODE + if (mSurface == 0) { + LOGD("mSurface is not set yet."); + } return startPreviewMode(); } } status_t CameraService::Client::startRecordingMode() { - LOGV("startRecordingMode"); + LOGD("startRecordingMode (pid %d)", getCallingPid()); status_t ret = UNKNOWN_ERROR; @@ -431,9 +512,65 @@ status_t CameraService::Client::startRecordingMode() return ret; } +status_t CameraService::Client::setOverlay() +{ + LOGD("setOverlay"); + int w, h; + CameraParameters params(mHardware->getParameters()); + params.getPreviewSize(&w, &h); + + const char *format = params.getPreviewFormat(); + int fmt; + if (!strcmp(format, "yuv422i")) + fmt = OVERLAY_FORMAT_YCbCr_422_I; + else if (!strcmp(format, "rgb565")) + fmt = OVERLAY_FORMAT_RGB_565; + else { + LOGE("Invalid preview format for overlays"); + return -EINVAL; + } + + status_t ret = NO_ERROR; + if (mSurface != 0) { + sp ref = mSurface->createOverlay(w, h, fmt); + ret = mHardware->setOverlay(new Overlay(ref)); + } else { + ret = mHardware->setOverlay(NULL); + } + if (ret != NO_ERROR) { + LOGE("mHardware->setOverlay() failed with status %d\n", ret); + } + return ret; +} + +status_t CameraService::Client::registerPreviewBuffers() +{ + int w, h; + CameraParameters params(mHardware->getParameters()); + params.getPreviewSize(&w, &h); + + uint32_t transform = 0; + if (params.getOrientation() == + CameraParameters::CAMERA_ORIENTATION_PORTRAIT) { + LOGV("portrait mode"); + transform = ISurface::BufferHeap::ROT_90; + } + ISurface::BufferHeap buffers(w, h, w, h, + PIXEL_FORMAT_YCbCr_420_SP, + transform, + 0, + mHardware->getPreviewHeap()); + + status_t ret = mSurface->registerBuffers(buffers); + if (ret != NO_ERROR) { + LOGE("registerBuffers failed with status %d", ret); + } + return ret; +} + status_t CameraService::Client::startPreviewMode() { - LOGV("startPreviewMode"); + LOGD("startPreviewMode (pid %d)", getCallingPid()); // if preview has been enabled, nothing needs to be done if (mHardware->previewEnabled()) { @@ -444,55 +581,24 @@ status_t CameraService::Client::startPreviewMode() #if DEBUG_DUMP_PREVIEW_FRAME_TO_FILE debug_frame_cnt = 0; #endif - status_t ret = UNKNOWN_ERROR; - int w, h; - CameraParameters params(mHardware->getParameters()); - params.getPreviewSize(&w, &h); + status_t ret = NO_ERROR; if (mUseOverlay) { - const char *format = params.getPreviewFormat(); - int fmt; - LOGD("Use Overlays"); - if (!strcmp(format, "yuv422i")) - fmt = OVERLAY_FORMAT_YCbCr_422_I; - else if (!strcmp(format, "rgb565")) - fmt = OVERLAY_FORMAT_RGB_565; - else { - LOGE("Invalid preview format for overlays"); - return -EINVAL; - } - sp ref = mSurface->createOverlay(w, h, fmt); - ret = mHardware->setOverlay(new Overlay(ref)); - if (ret != NO_ERROR) { - LOGE("mHardware->setOverlay() failed with status %d\n", ret); - return ret; + // If preview display has been set, set overlay now. + if (mSurface != 0) { + ret = setOverlay(); } + if (ret != NO_ERROR) return ret; ret = mHardware->startPreview(NULL, mCameraService.get()); - if (ret != NO_ERROR) - LOGE("mHardware->startPreview() failed with status %d\n", ret); - } else { ret = mHardware->startPreview(previewCallback, mCameraService.get()); - if (ret == NO_ERROR) { - - mSurface->unregisterBuffers(); - - uint32_t transform = 0; - if (params.getOrientation() == - CameraParameters::CAMERA_ORIENTATION_PORTRAIT) { - LOGV("portrait mode"); - transform = ISurface::BufferHeap::ROT_90; - } - ISurface::BufferHeap buffers(w, h, w, h, - PIXEL_FORMAT_YCbCr_420_SP, - transform, - 0, - mHardware->getPreviewHeap()); - - mSurface->registerBuffers(buffers); - } else { - LOGE("mHardware->startPreview() failed with status %d", ret); + if (ret != NO_ERROR) return ret; + // If preview display has been set, register preview buffers now. + if (mSurface != 0) { + // Unregister here because the surface registered with raw heap. + mSurface->unregisterBuffers(); + ret = registerPreviewBuffers(); } } return ret; @@ -500,11 +606,15 @@ status_t CameraService::Client::startPreviewMode() status_t CameraService::Client::startPreview() { + LOGD("startPreview (pid %d)", getCallingPid()); + return startCameraMode(CAMERA_PREVIEW_MODE); } status_t CameraService::Client::startRecording() { + LOGD("startRecording (pid %d)", getCallingPid()); + if (mMediaPlayerBeep.get() != NULL) { mMediaPlayerBeep->seekTo(0); mMediaPlayerBeep->start(); @@ -515,7 +625,7 @@ status_t CameraService::Client::startRecording() // stop preview mode void CameraService::Client::stopPreview() { - LOGD("stopPreview()"); + LOGD("stopPreview (pid %d)", getCallingPid()); Mutex::Autolock lock(mLock); if (checkPid() != NO_ERROR) return; @@ -537,7 +647,7 @@ void CameraService::Client::stopPreview() // stop recording mode void CameraService::Client::stopRecording() { - LOGV("stopRecording()"); + LOGD("stopRecording (pid %d)", getCallingPid()); Mutex::Autolock lock(mLock); if (checkPid() != NO_ERROR) return; @@ -552,15 +662,13 @@ void CameraService::Client::stopRecording() mMediaPlayerBeep->start(); } mHardware->stopRecording(); - LOGV("stopRecording(), hardware stopped OK"); + LOGD("stopRecording(), hardware stopped OK"); mPreviewBuffer.clear(); } // release a recording frame void CameraService::Client::releaseRecordingFrame(const sp& mem) { - LOGV("releaseRecordingFrame()"); - Mutex::Autolock lock(mLock); if (checkPid() != NO_ERROR) return; @@ -592,7 +700,7 @@ sp CameraService::Client::getClientFromCookie(void* user) sp client = 0; CameraService *service = static_cast(user); if (service != NULL) { - Mutex::Autolock ourLock(service->mLock); + Mutex::Autolock ourLock(service->mServiceLock); if (service->mClient != 0) { client = service->mClient.promote(); if (client == 0) { @@ -704,7 +812,7 @@ void CameraService::Client::recordingCallback(const sp& mem, void* user // take a picture - image is returned in callback status_t CameraService::Client::autoFocus() { - LOGV("autoFocus"); + LOGD("autoFocus (pid %d)", getCallingPid()); Mutex::Autolock lock(mLock); status_t result = checkPid(); @@ -722,7 +830,7 @@ status_t CameraService::Client::autoFocus() // take a picture - image is returned in callback status_t CameraService::Client::takePicture() { - LOGD("takePicture"); + LOGD("takePicture (pid %d)", getCallingPid()); Mutex::Autolock lock(mLock); status_t result = checkPid(); @@ -920,6 +1028,7 @@ void CameraService::Client::postAutoFocus(bool focused) void CameraService::Client::postShutter() { + LOGD("postShutter"); mCameraClient->notifyCallback(CAMERA_MSG_SHUTTER, 0, 0); } @@ -1029,12 +1138,12 @@ status_t CameraService::dump(int fd, const Vector& args) if (checkCallingPermission(String16("android.permission.DUMP")) == false) { snprintf(buffer, SIZE, "Permission Denial: " "can't dump CameraService from pid=%d, uid=%d\n", - IPCThreadState::self()->getCallingPid(), + getCallingPid(), IPCThreadState::self()->getCallingUid()); result.append(buffer); write(fd, result.string(), result.size()); } else { - AutoMutex lock(&mLock); + AutoMutex lock(&mServiceLock); if (mClient != 0) { sp currentClient = mClient.promote(); sprintf(buffer, "Client (%p) PID: %d\n", @@ -1052,8 +1161,6 @@ status_t CameraService::dump(int fd, const Vector& args) } -#if DEBUG_HEAP_LEAKS - #define CHECK_INTERFACE(interface, data, reply) \ do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \ LOGW("Call incorrectly routed to " #interface); \ @@ -1085,6 +1192,7 @@ status_t CameraService::onTransact( status_t err = BnCameraService::onTransact(code, data, reply, flags); +#if DEBUG_HEAP_LEAKS LOGD("+++ onTransact err %d code %d", err, code); if (err == UNKNOWN_TRANSACTION || err == PERMISSION_DENIED) { @@ -1120,9 +1228,9 @@ status_t CameraService::onTransact( break; } } +#endif // DEBUG_HEAP_LEAKS + return err; } -#endif // DEBUG_HEAP_LEAKS - }; // namespace android diff --git a/camera/libcameraservice/CameraService.h b/camera/libcameraservice/CameraService.h index 6752f265dabb..0f0767394021 100644 --- a/camera/libcameraservice/CameraService.h +++ b/camera/libcameraservice/CameraService.h @@ -58,10 +58,8 @@ public: void removeClient(const sp& cameraClient); -#if DEBUG_HEAP_LEAKS virtual status_t onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags); -#endif private: @@ -159,6 +157,8 @@ private: status_t startCameraMode(camera_mode mode); status_t startPreviewMode(); status_t startRecordingMode(); + status_t setOverlay(); + status_t registerPreviewBuffers(); // Ensures atomicity among the public methods mutable Mutex mLock; @@ -196,7 +196,12 @@ private: CameraService(); virtual ~CameraService(); - mutable Mutex mLock; + // We use a count for number of clients (shoule only be 0 or 1). + volatile int32_t mUsers; + virtual void incUsers(); + virtual void decUsers(); + + mutable Mutex mServiceLock; wp mClient; #if DEBUG_HEAP_LEAKS diff --git a/cmds/am/am b/cmds/am/am index a5b13f9eb5ae..c82363498242 100755 --- a/cmds/am/am +++ b/cmds/am/am @@ -3,5 +3,5 @@ # base=/system export CLASSPATH=$base/framework/am.jar -exec app_process $base/bin com.android.commands.am.Am $* +exec app_process $base/bin com.android.commands.am.Am "$@" diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java index 6d4b4552bbc0..3782136f5c73 100644 --- a/cmds/am/src/com/android/commands/am/Am.java +++ b/cmds/am/src/com/android/commands/am/Am.java @@ -26,10 +26,13 @@ import android.content.ComponentName; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.ServiceManager; import android.view.IWindowManager; +import java.io.File; +import java.io.FileNotFoundException; import java.util.Iterator; import java.util.Set; @@ -194,18 +197,17 @@ public class Am { if (intent != null) { System.out.println("Starting: " + intent); try { - intent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // XXX should do something to determine the MIME type. int res = mAm.startActivity(null, intent, intent.getType(), null, 0, null, null, 0, false, mDebugOption); switch (res) { case IActivityManager.START_SUCCESS: break; - case IActivityManager.START_CLASS_NOT_FOUND: - System.err.println("Error type 3"); - System.err.println("Error: Activity class " + - intent.getComponent().toShortString() - + " does not exist."); + case IActivityManager.START_SWITCHES_CANCELED: + System.err.println( + "Warning: Activity not started because the " + + " current activity is being kept for the user."); break; case IActivityManager.START_DELIVERED_TO_TOP: System.err.println( @@ -213,25 +215,36 @@ public class Am { + "been delivered to currently running " + "top-most instance."); break; - case IActivityManager.START_FORWARD_AND_REQUEST_CONFLICT: + case IActivityManager.START_RETURN_INTENT_TO_CALLER: System.err.println( - "Error: Activity not started, you requested to " - + "both forward and receive its result"); + "Warning: Activity not started because intent " + + "should be handled by the caller"); + break; + case IActivityManager.START_TASK_TO_FRONT: + System.err.println( + "Warning: Activity not started, its current " + + "task has been brought to the front"); break; case IActivityManager.START_INTENT_NOT_RESOLVED: System.err.println( "Error: Activity not started, unable to " + "resolve " + intent.toString()); break; - case IActivityManager.START_RETURN_INTENT_TO_CALLER: + case IActivityManager.START_CLASS_NOT_FOUND: + System.err.println("Error type 3"); + System.err.println("Error: Activity class " + + intent.getComponent().toShortString() + + " does not exist."); + break; + case IActivityManager.START_FORWARD_AND_REQUEST_CONFLICT: System.err.println( - "Warning: Activity not started because intent " - + "should be handled by the caller"); + "Error: Activity not started, you requested to " + + "both forward and receive its result"); break; - case IActivityManager.START_TASK_TO_FRONT: + case IActivityManager.START_PERMISSION_DENIED: System.err.println( - "Warning: Activity not started, its current " - + "task has been brought to the front"); + "Error: Activity not started, you do not " + + "have permission to access it."); break; default: System.err.println( @@ -436,6 +449,8 @@ public class Am { return; } + ParcelFileDescriptor fd = null; + String cmd = nextArg(); if ("start".equals(cmd)) { start = true; @@ -445,6 +460,16 @@ public class Am { showUsage(); return; } + try { + fd = ParcelFileDescriptor.open( + new File(profileFile), + ParcelFileDescriptor.MODE_CREATE | + ParcelFileDescriptor.MODE_TRUNCATE | + ParcelFileDescriptor.MODE_READ_WRITE); + } catch (FileNotFoundException e) { + System.err.println("Error: Unable to open file: " + profileFile); + return; + } } else if (!"stop".equals(cmd)) { System.err.println("Error: Profile command " + cmd + " not valid"); showUsage(); @@ -452,8 +477,8 @@ public class Am { } try { - if (!mAm.profileControl(process, start, profileFile)) { - System.out.println("PROFILE FAILED on process " + process); + if (!mAm.profileControl(process, start, profileFile, fd)) { + System.err.println("PROFILE FAILED on process " + process); return; } } catch (IllegalArgumentException e) { @@ -516,7 +541,7 @@ public class Am { private void showUsage() { System.err.println("usage: am [start|broadcast|instrument|profile]"); - System.err.println(" am start -D INTENT"); + System.err.println(" am start [-D] INTENT"); System.err.println(" am broadcast INTENT"); System.err.println(" am instrument [-r] [-e ] [-p ]"); System.err.println(" [-w] "); diff --git a/cmds/backup/Android.mk b/cmds/backup/Android.mk new file mode 100644 index 000000000000..508aec073570 --- /dev/null +++ b/cmds/backup/Android.mk @@ -0,0 +1,15 @@ +# Copyright 2009 The Android Open Source Project + +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES:= backup.cpp + +LOCAL_SHARED_LIBRARIES := libcutils libutils + +LOCAL_MODULE:= btool + +LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) +LOCAL_MODULE_TAGS := debug + +include $(BUILD_EXECUTABLE) diff --git a/cmds/backup/NOTICE b/cmds/backup/NOTICE new file mode 100644 index 000000000000..c5b1efa7aac7 --- /dev/null +++ b/cmds/backup/NOTICE @@ -0,0 +1,190 @@ + + Copyright (c) 2005-2008, The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + + 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. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + diff --git a/cmds/backup/backup.cpp b/cmds/backup/backup.cpp new file mode 100644 index 000000000000..d4e669b5d9e8 --- /dev/null +++ b/cmds/backup/backup.cpp @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include +#include +#include + +using namespace android; + +#include + +int +usage(int argc, const char** argv) +{ + const char* p = argv[0]; + + fprintf(stderr, "%s: Backs up your data.\n" + "\n" + "usage: %s\n" + " Prints all of the data that can be backed up to stdout.\n" + "\n" + "usage: %s list FILE\n" + " Lists the backup entities in the file.\n" + "\n" + "usage: %s print NAME FILE\n" + " Prints the entity named NAME in FILE.\n", + p, p, p, p); + return 1; +} + +int +perform_full_backup() +{ + printf("this would have written all of your data to stdout\n"); + return 0; +} + +int +perform_list(const char* filename) +{ + int err; + int fd; + + fd = open(filename, O_RDONLY); + if (fd == -1) { + fprintf(stderr, "Error opening: %s\n", filename); + return 1; + } + + BackupDataReader reader(fd); + bool done; + int type; + + while (reader.ReadNextHeader(&done, &type) == 0) { + if (done) { + break; + } + switch (type) { + case BACKUP_HEADER_ENTITY_V1: + { + String8 key; + size_t dataSize; + err = reader.ReadEntityHeader(&key, &dataSize); + if (err == 0) { + printf(" entity: %s (%d bytes)\n", key.string(), dataSize); + } else { + printf(" Error reading entity header\n"); + } + break; + } + default: + { + printf("Unknown chunk type: 0x%08x\n", type); + break; + } + } + } + + return 0; +} + +int perform_print(const char* entityname, const char* filename) +{ + printf("perform_print(%s, %s);", entityname, filename); + return 0; +} + +int +main(int argc, const char** argv) +{ + if (argc <= 1) { + return perform_full_backup(); + } + if (argc == 3 && 0 == strcmp(argv[1], "list")) { + return perform_list(argv[2]); + } + if (argc == 4 && 0 == strcmp(argv[1], "print")) { + return perform_print(argv[2], argv[3]); + } + return usage(argc, argv); +} + diff --git a/cmds/bmgr/Android.mk b/cmds/bmgr/Android.mk new file mode 100644 index 000000000000..8a1670b2ccff --- /dev/null +++ b/cmds/bmgr/Android.mk @@ -0,0 +1,15 @@ +# Copyright 2007 The Android Open Source Project +# +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(call all-subdir-java-files) +LOCAL_MODULE := bmgr +include $(BUILD_JAVA_LIBRARY) + + +include $(CLEAR_VARS) +ALL_PREBUILT += $(TARGET_OUT)/bin/bmgr +$(TARGET_OUT)/bin/bmgr : $(LOCAL_PATH)/bmgr | $(ACP) + $(transform-prebuilt-to-target) + diff --git a/cmds/bmgr/MODULE_LICENSE_APACHE2 b/cmds/bmgr/MODULE_LICENSE_APACHE2 new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/cmds/bmgr/NOTICE b/cmds/bmgr/NOTICE new file mode 100644 index 000000000000..64aaa8dbd68e --- /dev/null +++ b/cmds/bmgr/NOTICE @@ -0,0 +1,190 @@ + + Copyright (c) 2009, The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + + 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. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + diff --git a/cmds/bmgr/bmgr b/cmds/bmgr/bmgr new file mode 100755 index 000000000000..6b4bbe2d9032 --- /dev/null +++ b/cmds/bmgr/bmgr @@ -0,0 +1,7 @@ +# Script to start "bmgr" on the device, which has a very rudimentary +# shell. +# +base=/system +export CLASSPATH=$base/framework/bmgr.jar +exec app_process $base/bin com.android.commands.bmgr.Bmgr "$@" + diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java new file mode 100644 index 000000000000..ee3ec1aa18fb --- /dev/null +++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java @@ -0,0 +1,403 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.commands.bmgr; + +import android.backup.IBackupManager; +import android.backup.IRestoreObserver; +import android.backup.IRestoreSession; +import android.backup.RestoreSet; +import android.os.RemoteException; +import android.os.ServiceManager; + +public final class Bmgr { + IBackupManager mBmgr; + IRestoreSession mRestore; + + static final String BMGR_NOT_RUNNING_ERR = + "Error: Could not access the Backup Manager. Is the system running?"; + static final String TRANSPORT_NOT_RUNNING_ERR = + "Error: Could not access the backup transport. Is the system running?"; + + private String[] mArgs; + private int mNextArg; + private String mCurArgData; + + public static void main(String[] args) { + try { + new Bmgr().run(args); + } catch (Exception e) { + System.err.println("Exception caught:"); + e.printStackTrace(); + } + } + + public void run(String[] args) { + boolean validCommand = false; + if (args.length < 1) { + showUsage(); + return; + } + + mBmgr = IBackupManager.Stub.asInterface(ServiceManager.getService("backup")); + if (mBmgr == null) { + System.err.println(BMGR_NOT_RUNNING_ERR); + return; + } + + mArgs = args; + String op = args[0]; + mNextArg = 1; + + if ("enabled".equals(op)) { + doEnabled(); + return; + } + + if ("enable".equals(op)) { + doEnable(); + return; + } + + if ("run".equals(op)) { + doRun(); + return; + } + + if ("backup".equals(op)) { + doBackup(); + return; + } + + if ("list".equals(op)) { + doList(); + return; + } + + if ("restore".equals(op)) { + doRestore(); + return; + } + + if ("transport".equals(op)) { + doTransport(); + return; + } + + if ("wipe".equals(op)) { + doWipe(); + return; + } + + System.err.println("Unknown command"); + showUsage(); + } + + private String enableToString(boolean enabled) { + return enabled ? "enabled" : "disabled"; + } + + private void doEnabled() { + try { + boolean isEnabled = mBmgr.isBackupEnabled(); + System.out.println("Backup Manager currently " + + enableToString(isEnabled)); + } catch (RemoteException e) { + System.err.println(e.toString()); + System.err.println(BMGR_NOT_RUNNING_ERR); + } + } + + private void doEnable() { + String arg = nextArg(); + if (arg == null) { + showUsage(); + return; + } + + try { + boolean enable = Boolean.parseBoolean(arg); + mBmgr.setBackupEnabled(enable); + System.out.println("Backup Manager now " + enableToString(enable)); + } catch (NumberFormatException e) { + showUsage(); + return; + } catch (RemoteException e) { + System.err.println(e.toString()); + System.err.println(BMGR_NOT_RUNNING_ERR); + } + } + + private void doRun() { + try { + mBmgr.backupNow(); + } catch (RemoteException e) { + System.err.println(e.toString()); + System.err.println(BMGR_NOT_RUNNING_ERR); + } + } + + private void doBackup() { + boolean isFull = false; + String pkg = nextArg(); + if ("-f".equals(pkg)) { + isFull = true; + pkg = nextArg(); + } + + if (pkg == null || pkg.startsWith("-")) { + showUsage(); + return; + } + + try { + // !!! TODO: handle full backup + mBmgr.dataChanged(pkg); + } catch (RemoteException e) { + System.err.println(e.toString()); + System.err.println(BMGR_NOT_RUNNING_ERR); + } + } + + private void doTransport() { + try { + String which = nextArg(); + String old = mBmgr.selectBackupTransport(which); + if (old == null) { + System.out.println("Unknown transport '" + which + + "' specified; no changes made."); + } else { + System.out.println("Selected transport " + which + " (formerly " + old + ")"); + } + } catch (RemoteException e) { + System.err.println(e.toString()); + System.err.println(BMGR_NOT_RUNNING_ERR); + } + } + + private void doWipe() { + String pkg = nextArg(); + if (pkg == null) { + showUsage(); + return; + } + + try { + mBmgr.clearBackupData(pkg); + System.out.println("Wiped backup data for " + pkg); + } catch (RemoteException e) { + System.err.println(e.toString()); + System.err.println(BMGR_NOT_RUNNING_ERR); + } + } + + private void doList() { + String arg = nextArg(); // sets, transports, packages set# + if ("transports".equals(arg)) { + doListTransports(); + return; + } + + // The rest of the 'list' options work with a restore session on the current transport + try { + String curTransport = mBmgr.getCurrentTransport(); + mRestore = mBmgr.beginRestoreSession(curTransport); + if (mRestore == null) { + System.err.println(BMGR_NOT_RUNNING_ERR); + return; + } + + if ("sets".equals(arg)) { + doListRestoreSets(); + } else if ("transports".equals(arg)) { + doListTransports(); + } + + mRestore.endRestoreSession(); + } catch (RemoteException e) { + System.err.println(e.toString()); + System.err.println(BMGR_NOT_RUNNING_ERR); + } + } + + private void doListTransports() { + try { + String current = mBmgr.getCurrentTransport(); + String[] transports = mBmgr.listAllTransports(); + if (transports == null || transports.length == 0) { + System.out.println("No transports available."); + return; + } + + for (String t : transports) { + String pad = (t.equals(current)) ? " * " : " "; + System.out.println(pad + t); + } + } catch (RemoteException e) { + System.err.println(e.toString()); + System.err.println(BMGR_NOT_RUNNING_ERR); + } + } + + private void doListRestoreSets() { + try { + RestoreSet[] sets = mRestore.getAvailableRestoreSets(); + if (sets == null || sets.length == 0) { + System.out.println("No restore sets available"); + } else { + printRestoreSets(sets); + } + } catch (RemoteException e) { + System.err.println(e.toString()); + System.err.println(TRANSPORT_NOT_RUNNING_ERR); + } + } + + private void printRestoreSets(RestoreSet[] sets) { + for (RestoreSet s : sets) { + System.out.println(" " + s.token + " : " + s.name); + } + } + + class RestoreObserver extends IRestoreObserver.Stub { + boolean done; + public void restoreStarting(int numPackages) { + System.out.println("restoreStarting: " + numPackages + " packages"); + } + + public void onUpdate(int nowBeingRestored) { + System.out.println("onUpdate: " + nowBeingRestored); + } + + public void restoreFinished(int error) { + System.out.println("restoreFinished: " + error); + synchronized (this) { + done = true; + this.notify(); + } + } + } + + private void doRestore() { + long token; + try { + token = Long.parseLong(nextArg()); + } catch (NumberFormatException e) { + showUsage(); + return; + } + + RestoreObserver observer = new RestoreObserver(); + + try { + boolean didRestore = false; + String curTransport = mBmgr.getCurrentTransport(); + mRestore = mBmgr.beginRestoreSession(curTransport); + if (mRestore == null) { + System.err.println(BMGR_NOT_RUNNING_ERR); + return; + } + RestoreSet[] sets = mRestore.getAvailableRestoreSets(); + for (RestoreSet s : sets) { + if (s.token == token) { + System.out.println("Scheduling restore: " + s.name); + mRestore.performRestore(token, observer); + didRestore = true; + break; + } + } + if (!didRestore) { + if (sets == null || sets.length == 0) { + System.out.println("No available restore sets; no restore performed"); + } else { + System.out.println("No matching restore set token. Available sets:"); + printRestoreSets(sets); + } + } + mRestore.endRestoreSession(); + } catch (RemoteException e) { + System.err.println(e.toString()); + System.err.println(BMGR_NOT_RUNNING_ERR); + } + + // now wait for it to be done + synchronized (observer) { + while (!observer.done) { + try { + observer.wait(); + } catch (InterruptedException ex) { + } + } + } + System.out.println("done"); + } + + private String nextArg() { + if (mNextArg >= mArgs.length) { + return null; + } + String arg = mArgs[mNextArg]; + mNextArg++; + return arg; + } + + private static void showUsage() { + System.err.println("usage: bmgr [backup|restore|list|transport|run]"); + System.err.println(" bmgr backup PACKAGE"); + System.err.println(" bmgr enable BOOL"); + System.err.println(" bmgr enabled"); + System.err.println(" bmgr list transports"); + System.err.println(" bmgr list sets"); + System.err.println(" bmgr transport WHICH"); + System.err.println(" bmgr restore TOKEN"); + System.err.println(" bmgr run"); + System.err.println(" bmgr wipe PACKAGE"); + System.err.println(""); + System.err.println("The 'backup' command schedules a backup pass for the named package."); + System.err.println("Note that the backup pass will effectively be a no-op if the package"); + System.err.println("does not actually have changed data to store."); + System.err.println(""); + System.err.println("The 'enable' command enables or disables the entire backup mechanism."); + System.err.println("If the argument is 'true' it will be enabled, otherwise it will be"); + System.err.println("disabled. When disabled, neither backup or restore operations will"); + System.err.println("be performed."); + System.err.println(""); + System.err.println("The 'enabled' command reports the current enabled/disabled state of"); + System.err.println("the backup mechanism."); + System.err.println(""); + System.err.println("The 'list transports' command reports the names of the backup transports"); + System.err.println("currently available on the device. These names can be passed as arguments"); + System.err.println("to the 'transport' command. The currently selected transport is indicated"); + System.err.println("with a '*' character."); + System.err.println(""); + System.err.println("The 'list sets' command reports the token and name of each restore set"); + System.err.println("available to the device via the current transport."); + System.err.println(""); + System.err.println("The 'transport' command designates the named transport as the currently"); + System.err.println("active one. This setting is persistent across reboots."); + System.err.println(""); + System.err.println("The 'restore' command initiates a restore operation, using the restore set"); + System.err.println("from the current transport whose token matches the argument."); + System.err.println(""); + System.err.println("The 'run' command causes any scheduled backup operation to be initiated"); + System.err.println("immediately, without the usual waiting period for batching together"); + System.err.println("data changes."); + System.err.println(""); + System.err.println("The 'wipe' command causes all backed-up data for the given package to be"); + System.err.println("erased from the current transport's storage. The next backup operation"); + System.err.println("that the given application performs will rewrite its entire data set."); + } +} diff --git a/cmds/bootanimation/Android.mk b/cmds/bootanimation/Android.mk new file mode 100644 index 000000000000..9c94c2ef3cf9 --- /dev/null +++ b/cmds/bootanimation/Android.mk @@ -0,0 +1,30 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES:= \ + bootanimation_main.cpp \ + BootAnimation.cpp + +# need "-lrt" on Linux simulator to pick up clock_gettime +ifeq ($(TARGET_SIMULATOR),true) + ifeq ($(HOST_OS),linux) + LOCAL_LDLIBS += -lrt + endif +endif + +LOCAL_SHARED_LIBRARIES := \ + libcutils \ + libutils \ + libui \ + libcorecg \ + libsgl \ + libEGL \ + libGLESv1_CM + +LOCAL_C_INCLUDES := \ + $(call include-path-for, corecg graphics) + +LOCAL_MODULE:= bootanimation + + +include $(BUILD_EXECUTABLE) diff --git a/libs/surfaceflinger/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp similarity index 94% rename from libs/surfaceflinger/BootAnimation.cpp rename to cmds/bootanimation/BootAnimation.cpp index db403857323a..3b9db8db496f 100644 --- a/libs/surfaceflinger/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -49,10 +50,9 @@ namespace android { // --------------------------------------------------------------------------- -BootAnimation::BootAnimation(const sp& composer) : - Thread(false) { - mSession = SurfaceComposerClient::clientForConnection( - composer->createConnection()->asBinder()); +BootAnimation::BootAnimation() : Thread(false) +{ + mSession = new SurfaceComposerClient(); } BootAnimation::~BootAnimation() { @@ -131,7 +131,7 @@ status_t BootAnimation::readyToRun() { // create the native surface sp s = session()->createSurface(getpid(), 0, dinfo.w, dinfo.h, - PIXEL_FORMAT_RGB_565); + PIXEL_FORMAT_RGB_565, ISurfaceComposer::eGPU); session()->openTransaction(); s->setLayer(0x40000000); session()->closeTransaction(); @@ -144,7 +144,10 @@ status_t BootAnimation::readyToRun() { EGLConfig config; EGLSurface surface; EGLContext context; + EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); + + eglInitialize(display, 0, 0); eglChooseConfig(display, attribs, &config, 1, &numConfigs); mNativeWindowSurface = new EGLNativeWindowSurface(s); @@ -170,17 +173,15 @@ status_t BootAnimation::readyToRun() { return NO_ERROR; } -void BootAnimation::requestExit() { - mBarrier.open(); - Thread::requestExit(); -} - bool BootAnimation::threadLoop() { bool r = android(); eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroyContext(mDisplay, mContext); eglDestroySurface(mDisplay, mSurface); mNativeWindowSurface.clear(); + mFlingerSurface.clear(); + eglTerminate(mDisplay); + IPCThreadState::self()->stopProcess(); return r; } @@ -227,8 +228,10 @@ bool BootAnimation::android() { glBindTexture(GL_TEXTURE_2D, mAndroid[0].name); glDrawTexiOES(xc, yc, 0, mAndroid[0].w, mAndroid[0].h); - eglSwapBuffers(mDisplay, mSurface); - + EGLBoolean res = eglSwapBuffers(mDisplay, mSurface); + if (res == EGL_FALSE) + break; + // 12fps: don't animate too fast to preserve CPU const nsecs_t sleepTime = 83333 - ns2us(systemTime() - now); if (sleepTime > 0) diff --git a/libs/surfaceflinger/BootAnimation.h b/cmds/bootanimation/BootAnimation.h similarity index 92% rename from libs/surfaceflinger/BootAnimation.h rename to cmds/bootanimation/BootAnimation.h index 3fb6670b3ef4..42e9eed7d3eb 100644 --- a/libs/surfaceflinger/BootAnimation.h +++ b/cmds/bootanimation/BootAnimation.h @@ -29,8 +29,6 @@ #include #include -#include "Barrier.h" - class SkBitmap; namespace android { @@ -43,11 +41,10 @@ class EGLNativeWindowSurface; class BootAnimation : public Thread { public: - BootAnimation(const sp& composer); + BootAnimation(); virtual ~BootAnimation(); const sp& session() const; - virtual void requestExit(); private: virtual bool threadLoop(); @@ -73,7 +70,6 @@ private: EGLDisplay mSurface; sp mFlingerSurface; sp mNativeWindowSurface; - Barrier mBarrier; }; // --------------------------------------------------------------------------- diff --git a/cmds/bootanimation/bootanimation_main.cpp b/cmds/bootanimation/bootanimation_main.cpp new file mode 100644 index 000000000000..675ea8167a0e --- /dev/null +++ b/cmds/bootanimation/bootanimation_main.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "BootAnimation" + +#include +#include +#include +#include +#include + +#include + +#if defined(HAVE_PTHREADS) +# include +# include +#endif + +#include "BootAnimation.h" + +using namespace android; + +// --------------------------------------------------------------------------- + +int main(int argc, char** argv) +{ +#if defined(HAVE_PTHREADS) + setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_DISPLAY); +#endif + + sp proc(ProcessState::self()); + ProcessState::self()->startThreadPool(); + + // create the boot animation object + sp boot = new BootAnimation(); + + IPCThreadState::self()->joinThreadPool(); + return 0; +} diff --git a/cmds/dumpstate/dumpstate.c b/cmds/dumpstate/dumpstate.c index eabf98e8d0e0..cc951c1bcbd1 100644 --- a/cmds/dumpstate/dumpstate.c +++ b/cmds/dumpstate/dumpstate.c @@ -165,6 +165,7 @@ int main(int argc, char *argv[]) { int c, fd, vibrate_fd, fds[2]; char path[PATH_MAX]; pid_t pid; + gid_t groups[] = { AID_LOG, AID_SDCARD_RW }; /* set as high priority, and protect from OOM killer */ setpriority(PRIO_PROCESS, 0, -20); @@ -207,7 +208,7 @@ int main(int argc, char *argv[]) { vibrate_fd = -1; /* switch to non-root user and group */ - setgid(AID_LOG); + setgroups(sizeof(groups)/sizeof(groups[0]), groups); setuid(AID_SHELL); /* make it safe to use both printf and STDOUT_FILENO */ diff --git a/cmds/keystore/Android.mk b/cmds/keystore/Android.mk new file mode 100644 index 000000000000..3daf44e40a00 --- /dev/null +++ b/cmds/keystore/Android.mk @@ -0,0 +1,22 @@ +ifneq ($(TARGET_SIMULATOR),true) + +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES:= \ + netkeystore.c keymgmt.c + +LOCAL_C_INCLUDES := \ + $(call include-path-for, system-core)/cutils \ + external/openssl/include + +LOCAL_SHARED_LIBRARIES := \ + libcutils libssl + +LOCAL_STATIC_LIBRARIES := + +LOCAL_MODULE:= keystore + +include $(BUILD_EXECUTABLE) + +endif # !simulator)) diff --git a/cmds/keystore/certtool.h b/cmds/keystore/certtool.h new file mode 100644 index 000000000000..aefad668d160 --- /dev/null +++ b/cmds/keystore/certtool.h @@ -0,0 +1,91 @@ +/* +** +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#ifndef __CERTTOOL_H__ +#define __CERTTOOL_H__ + +#include +#include +#include +#include + +#include "common.h" +#include "netkeystore.h" + +#define CERT_NAME_LEN (2 * MAX_KEY_NAME_LENGTH + 2) + +/* + * The specific function 'get_cert' is used in daemons to get the key value + * from keystore. Caller should allocate the buffer and the length of the buffer + * should be MAX_KEY_VALUE_LENGTH. + */ +static inline int get_cert(const char *certname, unsigned char *value, int *size) +{ + int count, fd, ret = -1; + LPC_MARSHAL cmd; + char delimiter[] = "_"; + char *namespace, *keyname; + char *context = NULL; + char cname[CERT_NAME_LEN]; + + if ((certname == NULL) || (value == NULL)) { + LOGE("get_cert: certname or value is null\n"); + return -1; + } + + if (strlcpy(cname, certname, CERT_NAME_LEN) >= CERT_NAME_LEN) { + LOGE("get_cert: keyname is too long\n"); + return -1; + } + + fd = socket_local_client(SOCKET_PATH, + ANDROID_SOCKET_NAMESPACE_RESERVED, + SOCK_STREAM); + if (fd == -1) { + LOGE("Keystore service is not up and running.\n"); + return -1; + } + + cmd.opcode = GET; + if (((namespace = strtok_r(cname, delimiter, &context)) == NULL) || + ((keyname = strtok_r(NULL, delimiter, &context)) == NULL)) { + goto err; + } + if ((cmd.len = snprintf((char*)cmd.data, BUFFER_MAX, "%s %s", namespace, keyname)) + > (2 * MAX_KEY_NAME_LENGTH + 1)) goto err; + + if (write_marshal(fd, &cmd)) { + LOGE("Incorrect command or command line is too long.\n"); + goto err; + } + if (read_marshal(fd, &cmd)) { + LOGE("Failed to read the result.\n"); + goto err; + } + + // copy the result if succeeded. + if (!cmd.retcode && cmd.len <= BUFFER_MAX) { + memcpy(value, cmd.data, cmd.len); + ret = 0; + *size = cmd.len; + } +err: + close(fd); + return ret; +} + +#endif diff --git a/cmds/keystore/common.h b/cmds/keystore/common.h new file mode 100644 index 000000000000..a18114e91abc --- /dev/null +++ b/cmds/keystore/common.h @@ -0,0 +1,60 @@ +/* +** +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#ifndef __COMMON_H__ +#define __COMMON_H__ + +#define SOCKET_PATH "keystore" +#define KEYSTORE_DIR "/data/misc/keystore/" + +#define READ_TIMEOUT 3 +#define MAX_KEY_NAME_LENGTH 64 +#define MAX_NAMESPACE_LENGTH MAX_KEY_NAME_LENGTH +#define MAX_KEY_VALUE_LENGTH 4096 + +#define BUFFER_MAX MAX_KEY_VALUE_LENGTH + +typedef enum { + BOOTUP, + UNINITIALIZED, + LOCKED, + UNLOCKED, +} KEYSTORE_STATE; + +typedef enum { + LOCK, + UNLOCK, + PASSWD, + GETSTATE, + LISTKEYS, + GET, + PUT, + REMOVE, + RESET, + MAX_OPCODE +} KEYSTORE_OPCODE; + +typedef struct { + uint32_t len; + union { + uint32_t opcode; + uint32_t retcode; + }; + unsigned char data[BUFFER_MAX + 1]; +} LPC_MARSHAL; + +#endif diff --git a/cmds/keystore/keymgmt.c b/cmds/keystore/keymgmt.c new file mode 100644 index 000000000000..66edd566166a --- /dev/null +++ b/cmds/keystore/keymgmt.c @@ -0,0 +1,372 @@ +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common.h" +#include "keymgmt.h" + +static int retry_count = 0; +static unsigned char iv[IV_LEN]; +static KEYSTORE_STATE state = BOOTUP; +static AES_KEY encryptKey, decryptKey; + +inline void unlock_keystore(unsigned char *master_key) +{ + AES_set_encrypt_key(master_key, AES_KEY_LEN, &encryptKey); + AES_set_decrypt_key(master_key, AES_KEY_LEN, &decryptKey); + memset(master_key, 0, sizeof(master_key)); + state = UNLOCKED; +} + +inline void lock_keystore() +{ + memset(&encryptKey, 0 , sizeof(AES_KEY)); + memset(&decryptKey, 0 , sizeof(AES_KEY)); + state = LOCKED; +} + +inline void get_encrypt_key(char *passwd, AES_KEY *key) +{ + unsigned char user_key[USER_KEY_LEN]; + gen_key(passwd, user_key, USER_KEY_LEN); + AES_set_encrypt_key(user_key, AES_KEY_LEN, key); +} + +inline void get_decrypt_key(char *passwd, AES_KEY *key) +{ + unsigned char user_key[USER_KEY_LEN]; + gen_key(passwd, user_key, USER_KEY_LEN); + AES_set_decrypt_key(user_key, AES_KEY_LEN, key); +} + +static int gen_random_blob(unsigned char *key, int size) +{ + int ret = 0; + int fd = open("/dev/urandom", O_RDONLY); + if (fd == -1) return -1; + if (read(fd, key, size) != size) ret = -1; + close(fd); + return ret; +} + +static int encrypt_n_save(AES_KEY *enc_key, DATA_BLOB *blob, + const char *keyfile) +{ + int size, fd, ret = -1; + unsigned char enc_blob[MAX_BLOB_LEN]; + + char tmpfile[KEYFILE_LEN]; + strcpy(tmpfile, keyfile); + strcat(tmpfile, ".tmp"); + + // prepare the blob + memcpy(blob->iv, iv, IV_LEN); + blob->blob_size = get_blob_size(blob); + memcpy(enc_blob, blob->blob, blob->blob_size); + AES_cbc_encrypt((unsigned char *)enc_blob, (unsigned char *)blob->blob, + blob->blob_size, enc_key, iv, AES_ENCRYPT); + // write to keyfile + size = data_blob_size(blob); + if ((fd = open(tmpfile, O_CREAT|O_RDWR)) == -1) return -1; + if (write(fd, blob, size) == size) ret = 0; + close(fd); + if (!ret) { + unlink(keyfile); + rename(tmpfile, keyfile); + chmod(keyfile, 0440); + } + return ret; +} + +static int load_n_decrypt(const char *keyname, const char *keyfile, + AES_KEY *key, DATA_BLOB *blob) +{ + int fd, ret = -1; + if ((fd = open(keyfile, O_RDONLY)) == -1) return -1; + // get the encrypted blob and iv + if ((read(fd, blob->iv, sizeof(blob->iv)) != sizeof(blob->iv)) || + (read(fd, &blob->blob_size, sizeof(uint32_t)) != sizeof(uint32_t)) || + (blob->blob_size > MAX_BLOB_LEN)) { + goto err; + } else { + unsigned char enc_blob[MAX_BLOB_LEN]; + if (read(fd, enc_blob, blob->blob_size) != + (int) blob->blob_size) goto err; + // decrypt the blob + AES_cbc_encrypt((unsigned char *)enc_blob, (unsigned char*)blob->blob, + blob->blob_size, key, blob->iv, AES_DECRYPT); + if (strcmp(keyname, (char*)blob->keyname) == 0) ret = 0; + } +err: + close(fd); + return ret; +} + +static int store_master_key(char *upasswd, unsigned char *master_key) +{ + AES_KEY key; + DATA_BLOB blob; + + // prepare the blob + strlcpy(blob.keyname, MASTER_KEY_TAG, USER_KEY_LEN); + blob.value_size = USER_KEY_LEN; + memcpy((void*)blob.value, (const void*)master_key, USER_KEY_LEN); + + // generate the encryption key + get_encrypt_key(upasswd, &key); + return encrypt_n_save(&key, &blob, MASTER_KEY); +} + +static int get_master_key(char *upasswd, unsigned char *master_key) +{ + AES_KEY key; + int size, ret = 0; + DATA_BLOB blob; + + get_decrypt_key(upasswd, &key); + ret = load_n_decrypt(MASTER_KEY_TAG, MASTER_KEY, &key, &blob); + if (!ret) memcpy(master_key, blob.value, blob.value_size); + return ret; +} + +static int create_master_key(char *upasswd) +{ + int ret; + unsigned char mpasswd[AES_KEY_LEN]; + unsigned char master_key[USER_KEY_LEN]; + + gen_random_blob(mpasswd, AES_KEY_LEN); + gen_key((char*)mpasswd, master_key, USER_KEY_LEN); + if ((ret = store_master_key(upasswd, master_key)) == 0) { + unlock_keystore(master_key); + } + memset(master_key, 0, USER_KEY_LEN); + memset(mpasswd, 0, AES_KEY_LEN); + + return ret; +} + +static int change_passwd(char *data) +{ + unsigned char master_key[USER_KEY_LEN]; + char *old_pass, *new_pass = NULL, *p, *delimiter=" "; + int ret, count = 0; + char *context = NULL; + + old_pass = p = strtok_r(data, delimiter, &context); + while (p != NULL) { + count++; + new_pass = p; + p = strtok_r(NULL, delimiter, &context); + } + if (count != 2) return -1; + if (strlen(new_pass) < MIN_PASSWD_LENGTH) return -1; + if ((ret = get_master_key(old_pass, master_key)) == 0) { + ret = store_master_key(new_pass, master_key); + retry_count = 0; + } else { + ret = MAX_RETRY_COUNT - ++retry_count; + if (ret == 0) { + retry_count = 0; + LOGE("passwd:reach max retry count, reset the keystore now."); + reset_keystore(); + return -1; + } + + } + return ret; +} + +int remove_key(const char *namespace, const char *keyname) +{ + char keyfile[KEYFILE_LEN]; + + if (state != UNLOCKED) return -state; + sprintf(keyfile, KEYFILE_NAME, namespace, keyname); + return unlink(keyfile); +} + +int put_key(const char *namespace, const char *keyname, + unsigned char *data, int size) +{ + DATA_BLOB blob; + uint32_t real_size; + char keyfile[KEYFILE_LEN]; + + if (state != UNLOCKED) { + LOGE("Can not store key with current state %d\n", state); + return -state; + } + sprintf(keyfile, KEYFILE_NAME, namespace, keyname); + // flatten the args + strcpy(blob.keyname, keyname); + blob.value_size = size; + memcpy(blob.value, data, size); + return encrypt_n_save(&encryptKey, &blob, keyfile); +} + +int get_key(const char *namespace, const char *keyname, + unsigned char *data, int *size) +{ + int ret; + DATA_BLOB blob; + uint32_t blob_size; + char keyfile[KEYFILE_LEN]; + + if (state != UNLOCKED) { + LOGE("Can not retrieve key value with current state %d\n", state); + return -state; + } + sprintf(keyfile, KEYFILE_NAME, namespace, keyname); + ret = load_n_decrypt(keyname, keyfile, &decryptKey, &blob); + if (!ret) { + if ((blob.value_size > MAX_KEY_VALUE_LENGTH)) { + ret = -1; + } else { + *size = blob.value_size; + memcpy(data, blob.value, *size); + } + } + return ret; +} + +int list_keys(const char *namespace, char reply[BUFFER_MAX]) +{ + DIR *d; + struct dirent *de; + + if (state != UNLOCKED) { + LOGE("Can not list key with current state %d\n", state); + return -1; + } + + if (!namespace || ((d = opendir("."))) == NULL) { + LOGE("cannot open keystore dir or namespace is null\n"); + return -1; + } + while ((de = readdir(d))) { + char *prefix, *name, *keyfile = de->d_name; + char *context = NULL; + + if (de->d_type != DT_REG) continue; + if ((prefix = strtok_r(keyfile, NAME_DELIMITER, &context)) + == NULL) continue; + if (strcmp(prefix, namespace)) continue; + if ((name = strtok_r(NULL, NAME_DELIMITER, &context)) == NULL) continue; + // append the key name into reply + if (reply[0] != 0) strlcat(reply, " ", BUFFER_MAX); + if (strlcat(reply, name, BUFFER_MAX) >= BUFFER_MAX) { + LOGE("too many files under keystore directory\n"); + return -1; + } + } + closedir(d); + return 0; +} + +int passwd(char *data) +{ + if (state == UNINITIALIZED) { + if (strchr(data, ' ')) return -1; + if (strlen(data) < MIN_PASSWD_LENGTH) return -1; + return create_master_key(data); + } + return change_passwd(data); +} + +int lock() +{ + switch(state) { + case UNLOCKED: + lock_keystore(); + case LOCKED: + return 0; + default: + return -1; + } +} + +int unlock(char *passwd) +{ + unsigned char master_key[USER_KEY_LEN]; + int ret = get_master_key(passwd, master_key); + if (!ret) { + unlock_keystore(master_key); + retry_count = 0; + } else { + ret = MAX_RETRY_COUNT - ++retry_count; + if (ret == 0) { + retry_count = 0; + LOGE("unlock:reach max retry count, reset the keystore now."); + reset_keystore(); + return -1; + } + } + return ret; +} + +KEYSTORE_STATE get_state() +{ + return state; +} + +int reset_keystore() +{ + DIR *d; + struct dirent *de; + + if ((d = opendir(".")) == NULL) { + LOGE("cannot open keystore dir\n"); + return -1; + } + while ((de = readdir(d))) unlink(de->d_name); + closedir(d); + state = UNINITIALIZED; + LOGI("keystore is reset."); + return 0; +} + +int init_keystore(const char *dir) +{ + int fd; + + if (!dir) mkdir(dir, 0770); + if (!dir || chdir(dir)) { + LOGE("Can not open/create the keystore directory %s\n", + dir ? dir : "(null)"); + return -1; + } + gen_random_blob(iv, IV_LEN); + if ((fd = open(MASTER_KEY, O_RDONLY)) == -1) { + state = UNINITIALIZED; + return 0; + } + close(fd); + state = LOCKED; + return 0; +} diff --git a/cmds/keystore/keymgmt.h b/cmds/keystore/keymgmt.h new file mode 100644 index 000000000000..0e928db494fd --- /dev/null +++ b/cmds/keystore/keymgmt.h @@ -0,0 +1,82 @@ +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#ifndef __KEYMGMT_H__ +#define __KEYMGMT_H__ + +#define MASTER_KEY_TAG "master_key" +#define MASTER_KEY ".keymaster" +#define MAX_PATH_LEN 128 +#define SALT "Android Keystore 0.1" +#define NAME_DELIMITER "_" +#define KEYFILE_NAME "%s"NAME_DELIMITER"%s" +#define KEYGEN_ITER 1024 +#define AES_KEY_LEN 128 +#define USER_KEY_LEN (AES_KEY_LEN/8) +#define IV_LEN USER_KEY_LEN +#define MAX_RETRY_COUNT 6 +#define MIN_PASSWD_LENGTH 8 + +#define gen_key(passwd, key, len) \ + PKCS5_PBKDF2_HMAC_SHA1(passwd, strlen(passwd), \ + (unsigned char*)SALT, \ + strlen(SALT), KEYGEN_ITER, \ + len, key) + +#define KEYFILE_LEN MAX_NAMESPACE_LENGTH + MAX_KEY_NAME_LENGTH + 6 + +#define get_blob_size(blob) \ + (((blob->value_size + sizeof(uint32_t) + MAX_KEY_NAME_LENGTH \ + + USER_KEY_LEN - 1) / USER_KEY_LEN) * USER_KEY_LEN) + +#define MAX_BLOB_LEN ((MAX_KEY_VALUE_LENGTH + MAX_KEY_NAME_LENGTH + \ + sizeof(uint32_t) + USER_KEY_LEN - 1) / USER_KEY_LEN)\ + * USER_KEY_LEN + +#define data_blob_size(blob) USER_KEY_LEN + sizeof(uint32_t) + blob->blob_size + +typedef struct { + unsigned char iv[USER_KEY_LEN]; + uint32_t blob_size; + union { + unsigned char blob[1]; + struct { + uint32_t value_size; + char keyname[MAX_KEY_NAME_LENGTH]; + unsigned char value[MAX_KEY_VALUE_LENGTH]; + } __attribute__((packed)); + }; +} DATA_BLOB; + +typedef struct { + char tag[USER_KEY_LEN]; + unsigned char master_key[USER_KEY_LEN]; +} MASTER_BLOB; + +int put_key(const char *namespace, const char *keyname, + unsigned char *data, int size); +int get_key(const char *namespace, const char *keyname, + unsigned char *data, int *size); +int remove_key(const char *namespace, const char *keyname); +int list_keys(const char *namespace, char reply[BUFFER_MAX]); +int passwd(char *data); +int lock(); +int unlock(char *passwd); +KEYSTORE_STATE get_state(); +int reset_keystore(); +int init_keystore(const char *dir); + +#endif diff --git a/cmds/keystore/keystore_get.h b/cmds/keystore/keystore_get.h new file mode 100644 index 000000000000..a7fd9a556af8 --- /dev/null +++ b/cmds/keystore/keystore_get.h @@ -0,0 +1,53 @@ +/* +** +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#ifndef __KEYSTORE_GET_H__ +#define __KEYSTORE_GET_H__ + +#include +#include +#include + +#include "certtool.h" + +/* This function is provided to native components to get values from keystore. + * Users are required to link against libcutils. If something goes wrong, NULL + * is returned. Otherwise it returns the value in dynamically allocated memory + * and sets the size if the pointer is not NULL. One can release the memory by + * calling free(). */ +static char *keystore_get(char *key, int *size) +{ + char buffer[MAX_KEY_VALUE_LENGTH]; + char *value; + int length; + + if (get_cert(key, (unsigned char *)buffer, &length) != 0) { + return NULL; + } + value = malloc(length + 1); + if (!value) { + return NULL; + } + memcpy(value, buffer, length); + value[length] = 0; + if (size) { + *size = length; + } + return value; +} + +#endif diff --git a/cmds/keystore/netkeystore.c b/cmds/keystore/netkeystore.c new file mode 100644 index 000000000000..eac455e0c544 --- /dev/null +++ b/cmds/keystore/netkeystore.c @@ -0,0 +1,410 @@ +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#define LOG_TAG "keystore" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "netkeystore.h" +#include "keymgmt.h" + +#define CMD_PUT_WITH_FILE "putfile" + +typedef void CMD_FUNC(LPC_MARSHAL *cmd, LPC_MARSHAL *reply); + +struct cmdinfo { + const char *name; + CMD_FUNC *func; +}; + +static CMD_FUNC do_lock; +static CMD_FUNC do_unlock; +static CMD_FUNC do_passwd; +static CMD_FUNC do_get_state;; +static CMD_FUNC do_listkeys; +static CMD_FUNC do_get_key; +static CMD_FUNC do_put_key; +static CMD_FUNC do_remove_key; +static CMD_FUNC do_reset_keystore; + +#define str(x) #x + +struct cmdinfo cmds[] = { + { str(LOCK), do_lock }, + { str(UNLOCK), do_unlock }, + { str(PASSWD), do_passwd }, + { str(GETSTATE), do_get_state }, + { str(LISTKEYS), do_listkeys }, + { str(GET), do_get_key }, + { str(PUT), do_put_key }, + { str(REMOVE), do_remove_key }, + { str(RESET), do_reset_keystore }, +}; + +static struct ucred cr; + +static int check_get_perm(int uid) +{ + if (uid == AID_WIFI || uid == AID_VPN) return 0; + return -1; +} + +static int check_reset_perm(int uid) +{ + if (uid == AID_SYSTEM) return 0; + return -1; +} + +static int parse_keyname(char *name, uint32_t len, + char *namespace, char *keyname) +{ + int count = 0; + char *c = namespace, *p = namespace, *t = name; + + if (!name || !namespace || !keyname) return -1; + while (t < name + len && (*t != 0)) { + if (*t == ' ') { + if (c == keyname) return -1; + *p = count = 0; + c = p = keyname; + t++; + } else { + if (!isalnum(*t)) return -1; + *p++ = *t++; + // also check if the keyname/namespace is too long. + if (count++ == MAX_KEY_NAME_LENGTH) return -1; + } + } + *p = 0; + return 0; +} + +// args of passwd(): +// firstPassword - for the first time +// oldPassword newPassword - for changing the password +static void do_passwd(LPC_MARSHAL *cmd, LPC_MARSHAL *reply) +{ + reply->retcode = passwd((char*)cmd->data); +} + +// args of lock(): +// no argument +static void do_lock(LPC_MARSHAL *cmd, LPC_MARSHAL *reply) +{ + reply->retcode = lock(); +} + +// args of unlock(): +// password +static void do_unlock(LPC_MARSHAL *cmd, LPC_MARSHAL *reply) +{ + reply->retcode = unlock((char*)cmd->data); +} + +// args of get_state(): +// no argument +static void do_get_state(LPC_MARSHAL *cmd, LPC_MARSHAL *reply) +{ + reply->retcode = get_state(); +} + +// args of listkeys(): +// namespace +static void do_listkeys(LPC_MARSHAL *cmd, LPC_MARSHAL *reply) +{ + reply->retcode = list_keys((const char*)cmd->data, (char*)reply->data); + if (!reply->retcode) reply->len = strlen((char*)reply->data); +} + +// args of get(): +// namespace keyname +static void do_get_key(LPC_MARSHAL *cmd, LPC_MARSHAL *reply) +{ + char namespace[MAX_KEY_NAME_LENGTH]; + char keyname[MAX_KEY_NAME_LENGTH]; + + if (check_get_perm(cr.uid)) { + LOGE("uid %d doesn't have the permission to get key value\n", cr.uid); + reply->retcode = -1; + return; + } + + if (parse_keyname((char*)cmd->data, cmd->len, namespace, keyname)) { + reply->retcode = -1; + } else { + reply->retcode = get_key(namespace, keyname, reply->data, + (int*)&reply->len); + } +} + +static int get_value_index(LPC_MARSHAL *cmd) +{ + uint32_t count = 0, i; + for (i = 0 ; i < cmd->len ; ++i) { + if (cmd->data[i] == ' ') { + if (++count == 2) return ++i; + } + } + return -1; +} + +// args of put(): +// namespace keyname keyvalue +static void do_put_key(LPC_MARSHAL *cmd, LPC_MARSHAL *reply) +{ + char namespace[MAX_KEY_NAME_LENGTH]; + char keyname[MAX_KEY_NAME_LENGTH]; + + int p = get_value_index(cmd); + if (p == -1) { + reply->retcode = -1; + } else { + unsigned char *value; + if (parse_keyname((char*)cmd->data, p - 1, namespace, keyname)) { + reply->retcode = -1; + return; + } + value = &cmd->data[p]; + int len = cmd->len - p; + reply->retcode = put_key(namespace, keyname, value, len); + } +} + +// args of remove_key(): +// namespace keyname +static void do_remove_key(LPC_MARSHAL *cmd, LPC_MARSHAL *reply) +{ + char namespace[MAX_KEY_NAME_LENGTH]; + char keyname[MAX_KEY_NAME_LENGTH]; + if (parse_keyname((char*)cmd->data, cmd->len, namespace, keyname)) { + reply->retcode = -1; + return; + } + reply->retcode = remove_key(namespace, keyname); +} + +// args of reset_keystore(): +// no argument +static void do_reset_keystore(LPC_MARSHAL *cmd, LPC_MARSHAL *reply) +{ + if (check_reset_perm(cr.uid)) { + LOGE("uid %d doesn't have the permission to reset the keystore\n", + cr.uid); + reply->retcode = -1; + return; + } + reply->retcode = reset_keystore(); +} + +static void execute(LPC_MARSHAL *cmd, LPC_MARSHAL *reply) +{ + uint32_t cmd_max = sizeof(cmds)/sizeof(struct cmdinfo); + + if (cmd->opcode >= cmd_max) { + LOGE("the opcode (%d) is not valid", cmd->opcode); + reply->retcode = -1; + return; + } + cmds[cmd->opcode].func(cmd, reply); +} + +static int set_read_timeout(int socket) +{ + struct timeval tv; + tv.tv_sec = READ_TIMEOUT; + if (setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof tv)) + { + LOGE("setsockopt failed"); + return -1; + } + return 0; +} + +static int append_input_from_file(const char *filename, LPC_MARSHAL *cmd) +{ + int fd, len, ret = 0; + + // get opcode of the function put() + if ((fd = open(filename, O_RDONLY)) == -1) { + fprintf(stderr, "Can not open file %s\n", filename); + return -1; + } + cmd->data[cmd->len] = ' '; + cmd->len++; + len = read(fd, cmd->data + cmd->len, BUFFER_MAX - cmd->len); + if (len < 0 || (len == (int)(BUFFER_MAX - cmd->len))) { + ret = -1; + } else { + cmd->len += len; + } + close(fd); + return ret; +} + +static int flatten_str_args(int argc, const char **argv, LPC_MARSHAL *cmd) +{ + int i, len = 0; + char *buf = (char*)cmd->data; + buf[0] = 0; + for (i = 0 ; i < argc ; ++i) { + if (i == 0) { + len = strlcpy(buf, argv[i], BUFFER_MAX); + } else { + len += snprintf(buf + len, BUFFER_MAX - len, " %s", argv[i]); + } + if (len >= BUFFER_MAX) return -1; + } + if (len) cmd->len = len; + return 0; +} + +static int parse_cmd(int argc, const char **argv, LPC_MARSHAL *cmd) +{ + uint32_t i, len = 0; + uint32_t cmd_max = sizeof(cmds)/sizeof(cmds[0]); + + for (i = 0 ; i < cmd_max ; ++i) { + if (!strcasecmp(argv[0], cmds[i].name)) break; + } + + if (i == cmd_max) { + // check if this is a command to put the key value with a file. + if (strcmp(argv[0], CMD_PUT_WITH_FILE) != 0) return -1; + cmd->opcode = PUT; + if (argc != 4) { + fprintf(stderr, "%s args\n\tnamespace keyname filename\n", + argv[0]); + return -1; + } + if (flatten_str_args(argc - 2, argv + 1, cmd)) return -1; + return append_input_from_file(argv[3], cmd); + } else { + cmd->opcode = i; + return flatten_str_args(argc - 1, argv + 1, cmd); + } +} + +static int shell_command(const int argc, const char **argv) +{ + int fd, i; + LPC_MARSHAL cmd; + + if (parse_cmd(argc, argv , &cmd)) { + fprintf(stderr, "Incorrect command or command line is too long.\n"); + exit(1); + } + fd = socket_local_client(SOCKET_PATH, + ANDROID_SOCKET_NAMESPACE_RESERVED, + SOCK_STREAM); + if (fd == -1) { + fprintf(stderr, "Keystore service is not up and running.\n"); + exit(1); + } + + if (write_marshal(fd, &cmd)) { + fprintf(stderr, "Incorrect command or command line is too long.\n"); + exit(1); + } + if (read_marshal(fd, &cmd)) { + fprintf(stderr, "Failed to read the result.\n"); + exit(1); + } + cmd.data[cmd.len] = 0; + fprintf(stdout, "%s\n", (cmd.retcode == 0) ? "Succeeded!" : "Failed!"); + if (cmd.len) fprintf(stdout, "\t%s\n", (char*)cmd.data); + close(fd); + return 0; +} + +int main(const int argc, const char *argv[]) +{ + struct sockaddr addr; + socklen_t alen; + int lsocket, s; + LPC_MARSHAL cmd, reply; + + if (argc > 1) { + return shell_command(argc - 1, argv + 1); + } + + if (init_keystore(KEYSTORE_DIR)) { + LOGE("Can not initialize the keystore, the directory exist?\n"); + exit(1); + } + + lsocket = android_get_control_socket(SOCKET_PATH); + if (lsocket < 0) { + LOGE("Failed to get socket from environment: %s\n", strerror(errno)); + exit(1); + } + if (listen(lsocket, 5)) { + LOGE("Listen on socket failed: %s\n", strerror(errno)); + exit(1); + } + fcntl(lsocket, F_SETFD, FD_CLOEXEC); + memset(&reply, 0, sizeof(LPC_MARSHAL)); + + for (;;) { + socklen_t cr_size = sizeof(cr); + alen = sizeof(addr); + s = accept(lsocket, &addr, &alen); + + /* retrieve the caller info here */ + if (getsockopt(s, SOL_SOCKET, SO_PEERCRED, &cr, &cr_size) < 0) { + close(s); + LOGE("Unable to recieve socket options\n"); + continue; + } + + if (s < 0) { + LOGE("Accept failed: %s\n", strerror(errno)); + continue; + } + fcntl(s, F_SETFD, FD_CLOEXEC); + if (set_read_timeout(s)) { + close(s); + continue; + } + + // read the command, execute and send the result back. + if(read_marshal(s, &cmd)) goto err; + LOGI("new connection\n"); + execute(&cmd, &reply); + write_marshal(s, &reply); +err: + memset(&reply, 0, sizeof(LPC_MARSHAL)); + LOGI("closing connection\n"); + close(s); + } + + return 0; +} diff --git a/cmds/keystore/netkeystore.h b/cmds/keystore/netkeystore.h new file mode 100644 index 000000000000..a87a667e9123 --- /dev/null +++ b/cmds/keystore/netkeystore.h @@ -0,0 +1,96 @@ +/* +** +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#ifndef __NETKEYSTORE_H__ +#define __NETKEYSTORE_H__ + +#include +#include +#include + +#include "common.h" + +static inline int readx(int s, void *_buf, int count) +{ + char *buf = _buf; + int n = 0, r; + if (count < 0) return -1; + while (n < count) { + r = read(s, buf + n, count - n); + if (r < 0) { + if (errno == EINTR) continue; + LOGE("read error: %s\n", strerror(errno)); + return -1; + } + if (r == 0) { + LOGE("eof\n"); + return -1; /* EOF */ + } + n += r; + } + return 0; +} + +static inline int writex(int s, const void *_buf, int count) +{ + const char *buf = _buf; + int n = 0, r; + if (count < 0) return -1; + while (n < count) { + r = write(s, buf + n, count - n); + if (r < 0) { + if (errno == EINTR) continue; + LOGE("write error: %s\n", strerror(errno)); + return -1; + } + n += r; + } + return 0; +} + +static inline int read_marshal(int s, LPC_MARSHAL *cmd) +{ + if (readx(s, cmd, 2 * sizeof(uint32_t))) { + LOGE("failed to read header\n"); + return -1; + } + if (cmd->len > BUFFER_MAX) { + LOGE("invalid size %d\n", cmd->len); + return -1; + } + if (readx(s, cmd->data, cmd->len)) { + LOGE("failed to read data\n"); + return -1; + } + cmd->data[cmd->len] = 0; + return 0; +} + +static inline int write_marshal(int s, LPC_MARSHAL *cmd) +{ + if (writex(s, cmd, 2 * sizeof(uint32_t))) { + LOGE("failed to write marshal header\n"); + return -1; + } + if (writex(s, cmd->data, cmd->len)) { + LOGE("failed to write marshal data\n"); + return -1; + } + return 0; +} + +#endif diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java index 8212b9212af8..fd9e70884e68 100644 --- a/cmds/pm/src/com/android/commands/pm/Pm.java +++ b/cmds/pm/src/com/android/commands/pm/Pm.java @@ -543,6 +543,9 @@ public final class Pm { case PackageManager.INSTALL_FAILED_TEST_ONLY: s = "INSTALL_FAILED_TEST_ONLY"; break; + case PackageManager.INSTALL_FAILED_CPU_ABI_INCOMPATIBLE: + s = "INSTALL_FAILED_CPU_ABI_INCOMPATIBLE"; + break; case PackageManager.INSTALL_PARSE_FAILED_NOT_APK: s = "INSTALL_PARSE_FAILED_NOT_APK"; break; diff --git a/cmds/runtime/main_runtime.cpp b/cmds/runtime/main_runtime.cpp index 1531a9efd154..476f38a4d073 100644 --- a/cmds/runtime/main_runtime.cpp +++ b/cmds/runtime/main_runtime.cpp @@ -45,9 +45,9 @@ static const char* ZYGOTE_ARGV[] = { "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,3001,3002,3003", /* CAP_SYS_TTY_CONFIG & CAP_SYS_RESOURCE & CAP_NET_BROADCAST & * CAP_NET_ADMIN & CAP_NET_RAW & CAP_NET_BIND_SERVICE & CAP_KILL & - * CAP_SYS_BOOT + * CAP_SYS_BOOT CAP_SYS_NICE */ - "--capabilities=88161312,88161312", + "--capabilities=96549920,96549920", "--runtime-init", "--nice-name=system_server", "com.android.server.SystemServer" diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java new file mode 100644 index 000000000000..a3456c756404 --- /dev/null +++ b/core/java/android/accessibilityservice/AccessibilityService.java @@ -0,0 +1,225 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.accessibilityservice; + +import com.android.internal.os.HandlerCaller; + +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; +import android.os.Message; +import android.os.RemoteException; +import android.util.Log; +import android.view.accessibility.AccessibilityEvent; + +/** + * An accessibility service runs in the background and receives callbacks by the system + * when {@link AccessibilityEvent}s are fired. Such events denote some state transition + * in the user interface, for example, the focus has changed, a button has been clicked, + * etc. + *

+ * An accessibility service extends this class and implements its abstract methods. Such + * a service is declared as any other service in an AndroidManifest.xml but it must also + * specify that it handles the "android.accessibilityservice.AccessibilityService" + * {@link android.content.Intent}. Following is an example of such a declaration: + *

+ * + * <service android:name=".MyAccessibilityService">
+ * <intent-filter>
+ * <action android:name="android.accessibilityservice.AccessibilityService" />
+ * </intent-filter>
+ * </service>
+ *
+ *

+ * The lifecycle of an accessibility service is managed exclusively by the system. Starting + * or stopping an accessibility service is triggered by an explicit user action through + * enabling or disabling it in the device settings. After the system binds to a service it + * calls {@link AccessibilityService#onServiceConnected()}. This method can be + * overriden by clients that want to perform post binding setup. An accessibility service + * is configured though setting an {@link AccessibilityServiceInfo} by calling + * {@link AccessibilityService#setServiceInfo(AccessibilityServiceInfo)}. You can call this + * method any time to change the service configuration but it is good practice to do that + * in the overriden {@link AccessibilityService#onServiceConnected()}. + *

+ * An accessibility service can be registered for events in specific packages to provide a + * specific type of feedback and is notified with a certain timeout after the last event + * of interest has been fired. + *

+ * Notification strategy + *

+ * For each feedback type only one accessibility service is notified. Services are notified + * in the order of registration. Hence, if two services are registered for the same + * feedback type in the same package the first one wins. It is possible however, to + * register a service as the default one for a given feedback type. In such a case this + * service is invoked if no other service was interested in the event. In other words, default + * services do not compete with other services and are notified last regardless of the + * registration order. This enables "generic" accessibility services that work reasonably + * well with most applications to coexist with "polished" ones that are targeted for + * specific applications. + *

+ * Event types + *

+ * {@link AccessibilityEvent#TYPE_VIEW_CLICKED} + * {@link AccessibilityEvent#TYPE_VIEW_LONG_CLICKED} + * {@link AccessibilityEvent#TYPE_VIEW_FOCUSED} + * {@link AccessibilityEvent#TYPE_VIEW_SELECTED} + * {@link AccessibilityEvent#TYPE_VIEW_TEXT_CHANGED} + * {@link AccessibilityEvent#TYPE_WINDOW_STATE_CHANGED} + * {@link AccessibilityEvent#TYPE_NOTIFICATION_STATE_CHANGED} + *

+ * Feedback types + *

+ * {@link AccessibilityServiceInfo#FEEDBACK_AUDIBLE} + * {@link AccessibilityServiceInfo#FEEDBACK_HAPTIC} + * {@link AccessibilityServiceInfo#FEEDBACK_AUDIBLE} + * {@link AccessibilityServiceInfo#FEEDBACK_VISUAL} + * {@link AccessibilityServiceInfo#FEEDBACK_GENERIC} + * + * @see AccessibilityEvent + * @see AccessibilityServiceInfo + * @see android.view.accessibility.AccessibilityManager + * + * Note: The event notification timeout is useful to avoid propagating events to the client + * too frequently since this is accomplished via an expensive interprocess call. + * One can think of the timeout as a criteria to determine when event generation has + * settled down. + */ +public abstract class AccessibilityService extends Service { + /** + * The {@link Intent} that must be declared as handled by the service. + */ + public static final String SERVICE_INTERFACE = + "android.accessibilityservice.AccessibilityService"; + + private static final String LOG_TAG = "AccessibilityService"; + + private AccessibilityServiceInfo mInfo; + + IAccessibilityServiceConnection mConnection; + + /** + * Callback for {@link android.view.accessibility.AccessibilityEvent}s. + * + * @param event An event. + */ + public abstract void onAccessibilityEvent(AccessibilityEvent event); + + /** + * Callback for interrupting the accessibility feedback. + */ + public abstract void onInterrupt(); + + /** + * This method is a part of the {@link AccessibilityService} lifecycle and is + * called after the system has successfully bound to the service. If is + * convenient to use this method for setting the {@link AccessibilityServiceInfo}. + * + * @see AccessibilityServiceInfo + * @see #setServiceInfo(AccessibilityServiceInfo) + */ + protected void onServiceConnected() { + + } + + /** + * Sets the {@link AccessibilityServiceInfo} that describes this service. + *

+ * Note: You can call this method any time but the info will be picked up after + * the system has bound to this service and when this method is called thereafter. + * + * @param info The info. + */ + public final void setServiceInfo(AccessibilityServiceInfo info) { + mInfo = info; + sendServiceInfo(); + } + + /** + * Sets the {@link AccessibilityServiceInfo} for this service if the latter is + * properly set and there is an {@link IAccessibilityServiceConnection} to the + * AccessibilityManagerService. + */ + private void sendServiceInfo() { + if (mInfo != null && mConnection != null) { + try { + mConnection.setServiceInfo(mInfo); + } catch (RemoteException re) { + Log.w(LOG_TAG, "Error while setting AccessibilityServiceInfo", re); + } + } + } + + @Override + public final IBinder onBind(Intent intent) { + return new IEventListenerWrapper(this); + } + + /** + * Implements the internal {@link IEventListener} interface to convert + * incoming calls to it back to calls on an {@link AccessibilityService}. + */ + class IEventListenerWrapper extends IEventListener.Stub + implements HandlerCaller.Callback { + + private static final int DO_SET_SET_CONNECTION = 10; + private static final int DO_ON_INTERRUPT = 20; + private static final int DO_ON_ACCESSIBILITY_EVENT = 30; + + private final HandlerCaller mCaller; + + private AccessibilityService mTarget; + + public IEventListenerWrapper(AccessibilityService context) { + mTarget = context; + mCaller = new HandlerCaller(context, this); + } + + public void setConnection(IAccessibilityServiceConnection connection) { + Message message = mCaller.obtainMessageO(DO_SET_SET_CONNECTION, connection); + mCaller.sendMessage(message); + } + + public void onInterrupt() { + Message message = mCaller.obtainMessage(DO_ON_INTERRUPT); + mCaller.sendMessage(message); + } + + public void onAccessibilityEvent(AccessibilityEvent event) { + Message message = mCaller.obtainMessageO(DO_ON_ACCESSIBILITY_EVENT, event); + mCaller.sendMessage(message); + } + + public void executeMessage(Message message) { + switch (message.what) { + case DO_ON_ACCESSIBILITY_EVENT : + AccessibilityEvent event = (AccessibilityEvent) message.obj; + mTarget.onAccessibilityEvent(event); + event.recycle(); + return; + case DO_ON_INTERRUPT : + mTarget.onInterrupt(); + return; + case DO_SET_SET_CONNECTION : + mConnection = ((IAccessibilityServiceConnection) message.obj); + mTarget.onServiceConnected(); + return; + default : + Log.w(LOG_TAG, "Unknown message type " + message.what); + } + } + } +} diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.aidl b/core/java/android/accessibilityservice/AccessibilityServiceInfo.aidl new file mode 100644 index 000000000000..1f5d3850d46f --- /dev/null +++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.accessibilityservice; + +parcelable AccessibilityServiceInfo; diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java new file mode 100644 index 000000000000..4761f98ed7c2 --- /dev/null +++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.accessibilityservice; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * This class describes an {@link AccessibilityService}. The system + * notifies an {@link AccessibilityService} for + * {@link android.view.accessibility.AccessibilityEvent}s + * according to the information encapsulated in this class. + * + * @see AccessibilityService + * @see android.view.accessibility.AccessibilityEvent + */ +public class AccessibilityServiceInfo implements Parcelable { + + /** + * Denotes spoken feedback. + */ + public static final int FEEDBACK_SPOKEN = 0x0000001; + + /** + * Denotes haptic feedback. + */ + public static final int FEEDBACK_HAPTIC = 0x0000002; + + /** + * Denotes audible (not spoken) feedback. + */ + public static final int FEEDBACK_AUDIBLE = 0x0000004; + + /** + * Denotes visual feedback. + */ + public static final int FEEDBACK_VISUAL = 0x0000008; + + /** + * Denotes generic feedback. + */ + public static final int FEEDBACK_GENERIC = 0x0000010; + + /** + * If an {@link AccessibilityService} is the default for a given type. + * Default service is invoked only if no package specific one exists. In case of + * more than one package specific service only the earlier registered is notified. + */ + public static final int DEFAULT = 0x0000001; + + /** + * The event types an {@link AccessibilityService} is interested in. + * + * @see android.view.accessibility.AccessibilityEvent#TYPE_VIEW_CLICKED + * @see android.view.accessibility.AccessibilityEvent#TYPE_VIEW_FOCUSED + * @see android.view.accessibility.AccessibilityEvent#TYPE_VIEW_SELECTED + * @see android.view.accessibility.AccessibilityEvent#TYPE_VIEW_TEXT_CHANGED + * @see android.view.accessibility.AccessibilityEvent#TYPE_ACTIVITY_STARTED + * @see android.view.accessibility.AccessibilityEvent#TYPE_WINDOW_STATE_CHANGED + * @see android.view.accessibility.AccessibilityEvent#TYPE_NOTIFICATION_STATE_CHANGED + */ + public int eventTypes; + + /** + * The package names an {@link AccessibilityService} is interested in. Setting + * to null is equivalent to all packages. + */ + public String[] packageNames; + + /** + * The feedback type an {@link AccessibilityService} provides. + * + * @see #FEEDBACK_AUDIBLE + * @see #FEEDBACK_GENERIC + * @see #FEEDBACK_HAPTIC + * @see #FEEDBACK_SPOKEN + * @see #FEEDBACK_VISUAL + */ + public int feedbackType; + + /** + * The timeout after the most recent event of a given type before an + * {@link AccessibilityService} is notified. + *

+ * Note: The event notification timeout is useful to avoid propagating events to the client + * too frequently since this is accomplished via an expensive interprocess call. + * One can think of the timeout as a criteria to determine when event generation has + * settled down + */ + public long notificationTimeout; + + /** + * This field represents a set of flags used for configuring an + * {@link AccessibilityService}. + * + * @see #DEFAULT + */ + public int flags; + + public int describeContents() { + return 0; + } + + public void writeToParcel(Parcel parcel, int flags) { + parcel.writeInt(eventTypes); + parcel.writeStringArray(packageNames); + parcel.writeInt(feedbackType); + parcel.writeLong(notificationTimeout); + parcel.writeInt(flags); + } + + /** + * @see Parcelable.Creator + */ + public static final Parcelable.Creator CREATOR = + new Parcelable.Creator() { + public AccessibilityServiceInfo createFromParcel(Parcel parcel) { + AccessibilityServiceInfo info = new AccessibilityServiceInfo(); + info.eventTypes = parcel.readInt(); + info.packageNames = parcel.readStringArray(); + info.feedbackType = parcel.readInt(); + info.notificationTimeout = parcel.readLong(); + info.flags = parcel.readInt(); + return info; + } + + public AccessibilityServiceInfo[] newArray(int size) { + return new AccessibilityServiceInfo[size]; + } + }; +} diff --git a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl new file mode 100644 index 000000000000..7157def606fa --- /dev/null +++ b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.accessibilityservice; + +import android.accessibilityservice.AccessibilityServiceInfo; + +/** + * Interface AccessibilityManagerService#Service implements, and passes to an + * AccessibilityService so it can dynamically configure how the system handles it. + * + * @hide + */ +oneway interface IAccessibilityServiceConnection { + + void setServiceInfo(in AccessibilityServiceInfo info); +} diff --git a/core/java/android/accessibilityservice/IEventListener.aidl b/core/java/android/accessibilityservice/IEventListener.aidl new file mode 100644 index 000000000000..5b849f1e40fd --- /dev/null +++ b/core/java/android/accessibilityservice/IEventListener.aidl @@ -0,0 +1,34 @@ +/* +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package android.accessibilityservice; + +import android.accessibilityservice.IAccessibilityServiceConnection; +import android.view.accessibility.AccessibilityEvent; + +/** + * Top-level interface to accessibility service component (implemented in Service). + * + * @hide + */ + oneway interface IEventListener { + + void setConnection(in IAccessibilityServiceConnection connection); + + void onAccessibilityEvent(in AccessibilityEvent event); + + void onInterrupt(); +} diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 9b1f0f97171f..ca9632a490b1 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -16,11 +16,14 @@ package android.app; +import com.android.internal.policy.PolicyManager; + import android.content.ComponentCallbacks; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; +import android.content.IIntentSender; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.content.res.Configuration; @@ -32,11 +35,12 @@ import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.net.Uri; import android.os.Bundle; -import android.os.RemoteException; import android.os.Handler; import android.os.IBinder; +import android.os.RemoteException; import android.text.Selection; import android.text.SpannableStringBuilder; +import android.text.TextUtils; import android.text.method.TextKeyListener; import android.util.AttributeSet; import android.util.Config; @@ -58,10 +62,10 @@ import android.view.Window; import android.view.WindowManager; import android.view.ContextMenu.ContextMenuInfo; import android.view.View.OnCreateContextMenuListener; +import android.view.ViewGroup.LayoutParams; +import android.view.accessibility.AccessibilityEvent; import android.widget.AdapterView; -import com.android.internal.policy.PolicyManager; - import java.util.ArrayList; import java.util.HashMap; @@ -625,6 +629,8 @@ public class Activity extends ContextThemeWrapper boolean mStartedActivity; /*package*/ int mConfigChangeFlags; /*package*/ Configuration mCurrentConfig; + private SearchManager mSearchManager; + private Bundle mSearchDialogState = null; private Window mWindow; @@ -785,6 +791,9 @@ public class Activity extends ContextThemeWrapper protected void onCreate(Bundle savedInstanceState) { mVisibleFromClient = mWindow.getWindowStyle().getBoolean( com.android.internal.R.styleable.Window_windowNoDisplay, true); + // uses super.getSystemService() since this.getSystemService() looks at the + // mSearchManager field. + mSearchManager = (SearchManager) super.getSystemService(Context.SEARCH_SERVICE); mCalled = true; } @@ -802,9 +811,10 @@ public class Activity extends ContextThemeWrapper // Also restore the state of a search dialog (if any) // TODO more generic than just this manager - SearchManager searchManager = - (SearchManager) getSystemService(Context.SEARCH_SERVICE); - searchManager.restoreSearchDialog(savedInstanceState, SAVED_SEARCH_DIALOG_KEY); + Bundle searchState = savedInstanceState.getBundle(SAVED_SEARCH_DIALOG_KEY); + if (searchState != null) { + mSearchManager.restoreSearchDialog(searchState); + } } /** @@ -854,13 +864,26 @@ public class Activity extends ContextThemeWrapper final Integer dialogId = ids[i]; Bundle dialogState = b.getBundle(savedDialogKeyFor(dialogId)); if (dialogState != null) { - final Dialog dialog = onCreateDialog(dialogId); - dialog.onRestoreInstanceState(dialogState); + // Calling onRestoreInstanceState() below will invoke dispatchOnCreate + // so tell createDialog() not to do it, otherwise we get an exception + final Dialog dialog = createDialog(dialogId, false); mManagedDialogs.put(dialogId, dialog); + onPrepareDialog(dialogId, dialog); + dialog.onRestoreInstanceState(dialogState); } } } + private Dialog createDialog(Integer dialogId, boolean dispatchOnCreate) { + final Dialog dialog = onCreateDialog(dialogId); + if (dialog == null) { + throw new IllegalArgumentException("Activity#onCreateDialog did " + + "not create a dialog for id " + dialogId); + } + if (dispatchOnCreate) dialog.dispatchOnCreate(null); + return dialog; + } + private String savedDialogKeyFor(int key) { return SAVED_DIALOG_KEY_PREFIX + key; } @@ -1010,9 +1033,11 @@ public class Activity extends ContextThemeWrapper // Also save the state of a search dialog (if any) // TODO more generic than just this manager - SearchManager searchManager = - (SearchManager) getSystemService(Context.SEARCH_SERVICE); - searchManager.saveSearchDialog(outState, SAVED_SEARCH_DIALOG_KEY); + // onPause() should always be called before this method, so mSearchManagerState + // should be up to date. + if (mSearchDialogState != null) { + outState.putBundle(SAVED_SEARCH_DIALOG_KEY, mSearchDialogState); + } } /** @@ -1283,12 +1308,6 @@ public class Activity extends ContextThemeWrapper } } } - - // also dismiss search dialog if showing - // TODO more generic than just this manager - SearchManager searchManager = - (SearchManager) getSystemService(Context.SEARCH_SERVICE); - searchManager.stopSearch(); // close any cursors we are managing. int numCursors = mManagedCursors.size(); @@ -1298,6 +1317,10 @@ public class Activity extends ContextThemeWrapper c.mCursor.close(); } } + + // Clear any search state saved in performPause(). If the state may be needed in the + // future, it will have been saved by performSaveInstanceState() + mSearchDialogState = null; } /** @@ -1321,9 +1344,7 @@ public class Activity extends ContextThemeWrapper // also update search dialog if showing // TODO more generic than just this manager - SearchManager searchManager = - (SearchManager) getSystemService(Context.SEARCH_SERVICE); - searchManager.onConfigurationChanged(newConfig); + mSearchManager.onConfigurationChanged(newConfig); if (mWindow != null) { // Pass the configuration changed event to the window @@ -2013,7 +2034,24 @@ public class Activity extends ContextThemeWrapper } return onTrackballEvent(ev); } - + + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + event.setClassName(getClass().getName()); + event.setPackageName(getPackageName()); + + LayoutParams params = getWindow().getAttributes(); + boolean isFullScreen = (params.width == LayoutParams.FILL_PARENT) && + (params.height == LayoutParams.FILL_PARENT); + event.setFullScreen(isFullScreen); + + CharSequence title = getTitle(); + if (!TextUtils.isEmpty(title)) { + event.getText().add(title); + } + + return true; + } + /** * Default implementation of * {@link android.view.Window.Callback#onCreatePanelView} @@ -2394,12 +2432,7 @@ public class Activity extends ContextThemeWrapper } Dialog dialog = mManagedDialogs.get(id); if (dialog == null) { - dialog = onCreateDialog(id); - if (dialog == null) { - throw new IllegalArgumentException("Activity#onCreateDialog did " - + "not create a dialog for id " + id); - } - dialog.dispatchOnCreate(null); + dialog = createDialog(id, true); mManagedDialogs.put(id, dialog); } @@ -2523,10 +2556,7 @@ public class Activity extends ContextThemeWrapper */ public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData, boolean globalSearch) { - // activate the search manager and start it up! - SearchManager searchManager = (SearchManager) - getSystemService(Context.SEARCH_SERVICE); - searchManager.startSearch(initialQuery, selectInitialQuery, getComponentName(), + mSearchManager.startSearch(initialQuery, selectInitialQuery, getComponentName(), appSearchData, globalSearch); } @@ -3245,6 +3275,8 @@ public class Activity extends ContextThemeWrapper if (WINDOW_SERVICE.equals(name)) { return mWindowManager; + } else if (SEARCH_SERVICE.equals(name)) { + return mSearchManager; } return super.getSystemService(name); } @@ -3543,10 +3575,21 @@ public class Activity extends ContextThemeWrapper "Activity " + mComponent.toShortString() + " did not call through to super.onPostResume()"); } + + // restore search dialog, if any + if (mSearchDialogState != null) { + mSearchManager.restoreSearchDialog(mSearchDialogState); + } + mSearchDialogState = null; } final void performPause() { onPause(); + + // save search dialog state if the search dialog is open, + // and then dismiss the search dialog + mSearchDialogState = mSearchManager.saveSearchDialog(); + mSearchManager.stopSearch(); } final void performUserLeaving() { diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 541f413676c8..dfa8139eecf4 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -17,9 +17,11 @@ package android.app; import android.content.ComponentName; -import android.content.ContentResolver; import android.content.Intent; import android.content.IntentFilter; +import android.content.IIntentSender; +import android.content.IIntentReceiver; +import android.content.pm.ApplicationInfo; import android.content.pm.ConfigurationInfo; import android.content.pm.IPackageDataObserver; import android.content.res.Configuration; @@ -984,7 +986,9 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM String process = data.readString(); boolean start = data.readInt() != 0; String path = data.readString(); - boolean res = profileControl(process, start, path); + ParcelFileDescriptor fd = data.readInt() != 0 + ? data.readFileDescriptor() : null; + boolean res = profileControl(process, start, path, fd); reply.writeNoException(); reply.writeInt(res ? 1 : 0); return true; @@ -998,6 +1002,20 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } + case STOP_APP_SWITCHES_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + stopAppSwitches(); + reply.writeNoException(); + return true; + } + + case RESUME_APP_SWITCHES_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + resumeAppSwitches(); + reply.writeNoException(); + return true; + } + case PEEK_SERVICE_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); Intent service = Intent.CREATOR.createFromParcel(data); @@ -1007,6 +1025,33 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM reply.writeStrongBinder(binder); return true; } + + case START_BACKUP_AGENT_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + ApplicationInfo info = ApplicationInfo.CREATOR.createFromParcel(data); + int backupRestoreMode = data.readInt(); + boolean success = bindBackupAgent(info, backupRestoreMode); + reply.writeNoException(); + reply.writeInt(success ? 1 : 0); + return true; + } + + case BACKUP_AGENT_CREATED_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + String packageName = data.readString(); + IBinder agent = data.readStrongBinder(); + backupAgentCreated(packageName, agent); + reply.writeNoException(); + return true; + } + + case UNBIND_BACKUP_AGENT_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + ApplicationInfo info = ApplicationInfo.CREATOR.createFromParcel(data); + unbindBackupAgent(info); + reply.writeNoException(); + return true; + } } return super.onTransact(code, data, reply, flags); @@ -1667,6 +1712,43 @@ class ActivityManagerProxy implements IActivityManager return binder; } + public boolean bindBackupAgent(ApplicationInfo app, int backupRestoreMode) + throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + app.writeToParcel(data, 0); + data.writeInt(backupRestoreMode); + mRemote.transact(START_BACKUP_AGENT_TRANSACTION, data, reply, 0); + reply.readException(); + boolean success = reply.readInt() != 0; + reply.recycle(); + data.recycle(); + return success; + } + + public void backupAgentCreated(String packageName, IBinder agent) throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeString(packageName); + data.writeStrongBinder(agent); + mRemote.transact(BACKUP_AGENT_CREATED_TRANSACTION, data, reply, 0); + reply.recycle(); + data.recycle(); + } + + public void unbindBackupAgent(ApplicationInfo app) throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + app.writeToParcel(data, 0); + mRemote.transact(UNBIND_BACKUP_AGENT_TRANSACTION, data, reply, 0); + reply.readException(); + reply.recycle(); + data.recycle(); + } + public boolean startInstrumentation(ComponentName className, String profileFile, int flags, Bundle arguments, IInstrumentationWatcher watcher) throws RemoteException { @@ -2152,7 +2234,7 @@ class ActivityManagerProxy implements IActivityManager } public boolean profileControl(String process, boolean start, - String path) throws RemoteException + String path, ParcelFileDescriptor fd) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); @@ -2160,6 +2242,12 @@ class ActivityManagerProxy implements IActivityManager data.writeString(process); data.writeInt(start ? 1 : 0); data.writeString(path); + if (fd != null) { + data.writeInt(1); + fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); + } else { + data.writeInt(0); + } mRemote.transact(PROFILE_CONTROL_TRANSACTION, data, reply, 0); reply.readException(); boolean res = reply.readInt() != 0; @@ -2182,5 +2270,25 @@ class ActivityManagerProxy implements IActivityManager return res; } + public void stopAppSwitches() throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + mRemote.transact(STOP_APP_SWITCHES_TRANSACTION, data, reply, 0); + reply.readException(); + reply.recycle(); + data.recycle(); + } + + public void resumeAppSwitches() throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + mRemote.transact(RESUME_APP_SWITCHES_TRANSACTION, data, reply, 0); + reply.readException(); + reply.recycle(); + data.recycle(); + } + private IBinder mRemote; } diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 1e15d14271d3..5ee29ac4f473 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -23,6 +23,7 @@ import android.content.ContentProvider; import android.content.Context; import android.content.IContentProvider; import android.content.Intent; +import android.content.IIntentReceiver; import android.content.ServiceConnection; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; @@ -31,6 +32,7 @@ import android.content.pm.InstrumentationInfo; import android.content.pm.PackageManager; import android.content.pm.ProviderInfo; import android.content.pm.ServiceInfo; +import android.content.pm.PackageParser.Component; import android.content.res.AssetManager; import android.content.res.Configuration; import android.content.res.Resources; @@ -46,6 +48,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.MessageQueue; +import android.os.ParcelFileDescriptor; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; @@ -72,6 +75,7 @@ import org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl; import java.io.File; import java.io.FileDescriptor; import java.io.FileOutputStream; +import java.io.IOException; import java.io.PrintWriter; import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -115,6 +119,7 @@ public final class ActivityThread { private static final boolean localLOGV = DEBUG ? Config.LOGD : Config.LOGV; private static final boolean DEBUG_BROADCAST = false; private static final boolean DEBUG_RESULTS = false; + private static final boolean DEBUG_BACKUP = true; private static final long MIN_TIME_BETWEEN_GCS = 5*1000; private static final Pattern PATTERN_SEMICOLON = Pattern.compile(";"); private static final int SQLITE_MEM_RELEASED_EVENT_LOG_TAG = 75003; @@ -161,7 +166,7 @@ public final class ActivityThread { return metrics; } - Resources getTopLevelResources(String appDir, float applicationScale) { + Resources getTopLevelResources(String appDir, PackageInfo pkgInfo) { synchronized (mPackages) { //Log.w(TAG, "getTopLevelResources: " + appDir); WeakReference wr = mActiveResources.get(appDir); @@ -180,23 +185,17 @@ public final class ActivityThread { if (assets.addAssetPath(appDir) == 0) { return null; } - DisplayMetrics metrics = getDisplayMetricsLocked(false); - // density used to load resources - // scaledDensity is calculated in Resources constructor - // - boolean usePreloaded = true; - - // TODO: use explicit flag to indicate the compatibility mode. - if (applicationScale != 1.0f) { - usePreloaded = false; - DisplayMetrics newMetrics = new DisplayMetrics(); - newMetrics.setTo(metrics); - float newDensity = metrics.density / applicationScale; - newMetrics.updateDensity(newDensity); - metrics = newMetrics; + ApplicationInfo appInfo; + try { + appInfo = getPackageManager().getApplicationInfo( + pkgInfo.getPackageName(), + PackageManager.GET_SUPPORTS_DENSITIES); + } catch (RemoteException e) { + throw new AssertionError(e); } //Log.i(TAG, "Resource:" + appDir + ", display metrics=" + metrics); - r = new Resources(assets, metrics, getConfiguration(), usePreloaded); + DisplayMetrics metrics = getDisplayMetricsLocked(false); + r = new Resources(assets, metrics, getConfiguration(), appInfo); //Log.i(TAG, "Created app resources " + r + ": " + r.getConfiguration()); // XXX need to remove entries when weak references go away mActiveResources.put(appDir, new WeakReference(r)); @@ -224,7 +223,6 @@ public final class ActivityThread { private Resources mResources; private ClassLoader mClassLoader; private Application mApplication; - private float mApplicationScale; private final HashMap> mReceivers = new HashMap>(); @@ -267,8 +265,6 @@ public final class ActivityThread { mClassLoader = mSystemContext.getClassLoader(); mResources = mSystemContext.getResources(); } - - mApplicationScale = -1.0f; } public PackageInfo(ActivityThread activityThread, String name, @@ -287,56 +283,20 @@ public final class ActivityThread { mIncludeCode = true; mClassLoader = systemContext.getClassLoader(); mResources = systemContext.getResources(); - mApplicationScale = systemContext.getApplicationScale(); } public String getPackageName() { return mPackageName; } + public ApplicationInfo getApplicationInfo() { + return mApplicationInfo; + } + public boolean isSecurityViolation() { return mSecurityViolation; } - public float getApplicationScale() { - if (mApplicationScale > 0.0f) { - return mApplicationScale; - } - DisplayMetrics metrics = mActivityThread.getDisplayMetricsLocked(false); - // Find out the density scale (relative to 160) of the supported density that - // is closest to the system's density. - try { - ApplicationInfo ai = getPackageManager().getApplicationInfo( - mPackageName, PackageManager.GET_SUPPORTS_DENSITIES); - - float appScale = -1.0f; - if (ai.supportsDensities != null) { - int minDiff = Integer.MAX_VALUE; - for (int density : ai.supportsDensities) { - int tmpDiff = (int) Math.abs(DisplayMetrics.DEVICE_DENSITY - density); - if (tmpDiff == 0) { - appScale = 1.0f; - break; - } - // prefer higher density (appScale>1.0), unless that's only option. - if (tmpDiff < minDiff && appScale < 1.0f) { - appScale = DisplayMetrics.DEVICE_DENSITY / density; - minDiff = tmpDiff; - } - } - } - if (appScale < 0.0f) { - mApplicationScale = metrics.density; - } else { - mApplicationScale = appScale; - } - } catch (RemoteException e) { - throw new AssertionError(e); - } - if (localLOGV) Log.v(TAG, "appScale=" + mApplicationScale + ", pkg=" + mPackageName); - return mApplicationScale; - } - /** * Gets the array of shared libraries that are listed as * used by the given package. @@ -494,12 +454,12 @@ public final class ActivityThread { public Resources getResources(ActivityThread mainThread) { if (mResources == null) { - mResources = mainThread.getTopLevelResources(mResDir, getApplicationScale()); + mResources = mainThread.getTopLevelResources(mResDir, this); } return mResources; } - public Application makeApplication() { + public Application makeApplication(boolean forceDefaultAppClass) { if (mApplication != null) { return mApplication; } @@ -507,7 +467,7 @@ public final class ActivityThread { Application app = null; String appClass = mApplicationInfo.className; - if (appClass == null) { + if (forceDefaultAppClass || (appClass == null)) { appClass = "android.app.Application"; } @@ -1199,6 +1159,16 @@ public final class ActivityThread { } } + private static final class CreateBackupAgentData { + ApplicationInfo appInfo; + int backupMode; + public String toString() { + return "CreateBackupAgentData{appInfo=" + appInfo + + " backupAgent=" + appInfo.backupAgentName + + " mode=" + backupMode + "}"; + } + } + private static final class CreateServiceData { IBinder token; ServiceInfo info; @@ -1239,6 +1209,7 @@ public final class ActivityThread { Bundle instrumentationArgs; IInstrumentationWatcher instrumentationWatcher; int debugMode; + boolean restrictedBackupMode; Configuration config; boolean handlingProfiling; public String toString() { @@ -1267,6 +1238,11 @@ public final class ActivityThread { String who; } + private static final class ProfilerControlData { + String path; + ParcelFileDescriptor fd; + } + private final class ApplicationThread extends ApplicationThreadNative { private static final String HEAP_COLUMN = "%17s %8s %8s %8s %8s"; private static final String ONE_COUNT_COLUMN = "%17s %8d"; @@ -1374,6 +1350,21 @@ public final class ActivityThread { queueOrSendMessage(H.RECEIVER, r); } + public final void scheduleCreateBackupAgent(ApplicationInfo app, int backupMode) { + CreateBackupAgentData d = new CreateBackupAgentData(); + d.appInfo = app; + d.backupMode = backupMode; + + queueOrSendMessage(H.CREATE_BACKUP_AGENT, d); + } + + public final void scheduleDestroyBackupAgent(ApplicationInfo app) { + CreateBackupAgentData d = new CreateBackupAgentData(); + d.appInfo = app; + + queueOrSendMessage(H.DESTROY_BACKUP_AGENT, d); + } + public final void scheduleCreateService(IBinder token, ServiceInfo info) { CreateServiceData s = new CreateServiceData(); @@ -1419,7 +1410,7 @@ public final class ActivityThread { ApplicationInfo appInfo, List providers, ComponentName instrumentationName, String profileFile, Bundle instrumentationArgs, IInstrumentationWatcher instrumentationWatcher, - int debugMode, Configuration config, + int debugMode, boolean isRestrictedBackupMode, Configuration config, Map services) { Process.setArgV0(processName); @@ -1437,6 +1428,7 @@ public final class ActivityThread { data.instrumentationArgs = instrumentationArgs; data.instrumentationWatcher = instrumentationWatcher; data.debugMode = debugMode; + data.restrictedBackupMode = isRestrictedBackupMode; data.config = config; queueOrSendMessage(H.BIND_APPLICATION, data); } @@ -1509,10 +1501,25 @@ public final class ActivityThread { } } - public void profilerControl(boolean start, String path) { - queueOrSendMessage(H.PROFILER_CONTROL, path, start ? 1 : 0); + public void profilerControl(boolean start, String path, ParcelFileDescriptor fd) { + ProfilerControlData pcd = new ProfilerControlData(); + pcd.path = path; + pcd.fd = fd; + queueOrSendMessage(H.PROFILER_CONTROL, pcd, start ? 1 : 0); + } + + public void setSchedulingGroup(int group) { + // Note: do this immediately, since going into the foreground + // should happen regardless of what pending work we have to do + // and the activity manager will wait for us to report back that + // we are done before sending us to the background. + try { + Process.setProcessGroup(Process.myPid(), group); + } catch (Exception e) { + Log.w(TAG, "Failed setting process group to " + group, e); + } } - + @Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { long nativeMax = Debug.getNativeHeapSize() / 1024; @@ -1706,6 +1713,8 @@ public final class ActivityThread { public static final int ACTIVITY_CONFIGURATION_CHANGED = 125; public static final int RELAUNCH_ACTIVITY = 126; public static final int PROFILER_CONTROL = 127; + public static final int CREATE_BACKUP_AGENT = 128; + public static final int DESTROY_BACKUP_AGENT = 129; String codeToString(int code) { if (localLOGV) { switch (code) { @@ -1737,6 +1746,8 @@ public final class ActivityThread { case ACTIVITY_CONFIGURATION_CHANGED: return "ACTIVITY_CONFIGURATION_CHANGED"; case RELAUNCH_ACTIVITY: return "RELAUNCH_ACTIVITY"; case PROFILER_CONTROL: return "PROFILER_CONTROL"; + case CREATE_BACKUP_AGENT: return "CREATE_BACKUP_AGENT"; + case DESTROY_BACKUP_AGENT: return "DESTROY_BACKUP_AGENT"; } } return "(unknown)"; @@ -1837,7 +1848,13 @@ public final class ActivityThread { handleActivityConfigurationChanged((IBinder)msg.obj); break; case PROFILER_CONTROL: - handleProfilerControl(msg.arg1 != 0, (String)msg.obj); + handleProfilerControl(msg.arg1 != 0, (ProfilerControlData)msg.obj); + break; + case CREATE_BACKUP_AGENT: + handleCreateBackupAgent((CreateBackupAgentData)msg.obj); + break; + case DESTROY_BACKUP_AGENT: + handleDestroyBackupAgent((CreateBackupAgentData)msg.obj); break; } } @@ -1896,6 +1913,8 @@ public final class ActivityThread { Application mInitialApplication; final ArrayList mAllApplications = new ArrayList(); + // set of instantiated backup agents, keyed by package name + final HashMap mBackupAgents = new HashMap(); static final ThreadLocal sThreadLocal = new ThreadLocal(); Instrumentation mInstrumentation; String mInstrumentationAppDir = null; @@ -2079,6 +2098,10 @@ public final class ActivityThread { return mInitialApplication; } + public String getProcessName() { + return mBoundApplication.processName; + } + public ApplicationContext getSystemContext() { synchronized (this) { if (mSystemContext == null) { @@ -2257,7 +2280,7 @@ public final class ActivityThread { } try { - Application app = r.packageInfo.makeApplication(); + Application app = r.packageInfo.makeApplication(false); if (localLOGV) Log.v(TAG, "Performing launch of " + r); if (localLOGV) Log.v( @@ -2452,7 +2475,7 @@ public final class ActivityThread { } try { - Application app = packageInfo.makeApplication(); + Application app = packageInfo.makeApplication(false); if (localLOGV) Log.v( TAG, "Performing receive of " + data.intent @@ -2495,6 +2518,85 @@ public final class ActivityThread { } } + // Instantiate a BackupAgent and tell it that it's alive + private final void handleCreateBackupAgent(CreateBackupAgentData data) { + if (DEBUG_BACKUP) Log.v(TAG, "handleCreateBackupAgent: " + data); + + // no longer idle; we have backup work to do + unscheduleGcIdler(); + + // instantiate the BackupAgent class named in the manifest + PackageInfo packageInfo = getPackageInfoNoCheck(data.appInfo); + String packageName = packageInfo.mPackageName; + if (mBackupAgents.get(packageName) != null) { + Log.d(TAG, "BackupAgent " + " for " + packageName + + " already exists"); + return; + } + + BackupAgent agent = null; + String classname = data.appInfo.backupAgentName; + if (classname == null) { + if (data.backupMode == IApplicationThread.BACKUP_MODE_INCREMENTAL) { + Log.e(TAG, "Attempted incremental backup but no defined agent for " + + packageName); + return; + } + classname = "android.app.FullBackupAgent"; + } + try { + java.lang.ClassLoader cl = packageInfo.getClassLoader(); + agent = (BackupAgent) cl.loadClass(data.appInfo.backupAgentName).newInstance(); + } catch (Exception e) { + throw new RuntimeException("Unable to instantiate backup agent " + + data.appInfo.backupAgentName + ": " + e.toString(), e); + } + + // set up the agent's context + try { + if (DEBUG_BACKUP) Log.v(TAG, "Initializing BackupAgent " + + data.appInfo.backupAgentName); + + ApplicationContext context = new ApplicationContext(); + context.init(packageInfo, null, this); + context.setOuterContext(agent); + agent.attach(context); + agent.onCreate(); + + // tell the OS that we're live now + IBinder binder = agent.onBind(); + try { + ActivityManagerNative.getDefault().backupAgentCreated(packageName, binder); + } catch (RemoteException e) { + // nothing to do. + } + mBackupAgents.put(packageName, agent); + } catch (Exception e) { + throw new RuntimeException("Unable to create BackupAgent " + + data.appInfo.backupAgentName + ": " + e.toString(), e); + } + } + + // Tear down a BackupAgent + private final void handleDestroyBackupAgent(CreateBackupAgentData data) { + if (DEBUG_BACKUP) Log.v(TAG, "handleDestroyBackupAgent: " + data); + + PackageInfo packageInfo = getPackageInfoNoCheck(data.appInfo); + String packageName = packageInfo.mPackageName; + BackupAgent agent = mBackupAgents.get(packageName); + if (agent != null) { + try { + agent.onDestroy(); + } catch (Exception e) { + Log.w(TAG, "Exception thrown in onDestroy by backup agent of " + data.appInfo); + e.printStackTrace(); + } + mBackupAgents.remove(packageName); + } else { + Log.w(TAG, "Attempt to destroy unknown backup agent " + data); + } + } + private final void handleCreateService(CreateServiceData data) { // If we are getting ready to gc after going to the background, well // we are back active so skip it. @@ -2520,7 +2622,7 @@ public final class ActivityThread { ApplicationContext context = new ApplicationContext(); context.init(packageInfo, null, this); - Application app = packageInfo.makeApplication(); + Application app = packageInfo.makeApplication(false); context.setOuterContext(service); service.attach(context, this, data.info.name, data.token, app, ActivityManagerNative.getDefault()); @@ -3134,7 +3236,7 @@ public final class ActivityThread { r.activity.getComponentName().getClassName()); if (!r.activity.mCalled) { throw new SuperNotCalledException( - "Activity " + r.intent.getComponent().toShortString() + "Activity " + safeToComponentShortString(r.intent) + " did not call through to super.onPause()"); } } catch (SuperNotCalledException e) { @@ -3143,7 +3245,7 @@ public final class ActivityThread { if (!mInstrumentation.onException(r.activity, e)) { throw new RuntimeException( "Unable to pause activity " - + r.intent.getComponent().toShortString() + + safeToComponentShortString(r.intent) + ": " + e.toString(), e); } } @@ -3158,7 +3260,7 @@ public final class ActivityThread { if (!mInstrumentation.onException(r.activity, e)) { throw new RuntimeException( "Unable to stop activity " - + r.intent.getComponent().toShortString() + + safeToComponentShortString(r.intent) + ": " + e.toString(), e); } } @@ -3183,7 +3285,7 @@ public final class ActivityThread { if (!mInstrumentation.onException(r.activity, e)) { throw new RuntimeException( "Unable to retain child activities " - + r.intent.getComponent().toShortString() + + safeToComponentShortString(r.intent) + ": " + e.toString(), e); } } @@ -3194,7 +3296,7 @@ public final class ActivityThread { r.activity.onDestroy(); if (!r.activity.mCalled) { throw new SuperNotCalledException( - "Activity " + r.intent.getComponent().toShortString() + + "Activity " + safeToComponentShortString(r.intent) + " did not call through to super.onDestroy()"); } if (r.window != null) { @@ -3205,8 +3307,7 @@ public final class ActivityThread { } catch (Exception e) { if (!mInstrumentation.onException(r.activity, e)) { throw new RuntimeException( - "Unable to destroy activity " - + r.intent.getComponent().toShortString() + "Unable to destroy activity " + safeToComponentShortString(r.intent) + ": " + e.toString(), e); } } @@ -3216,6 +3317,11 @@ public final class ActivityThread { return r; } + private static String safeToComponentShortString(Intent intent) { + ComponentName component = intent.getComponent(); + return component == null ? "[Unknown]" : component.toShortString(); + } + private final void handleDestroyActivity(IBinder token, boolean finishing, int configChanges, boolean getNonConfigInstance) { ActivityRecord r = performDestroyActivity(token, finishing, @@ -3475,8 +3581,6 @@ public final class ActivityThread { } mConfiguration.updateFrom(config); DisplayMetrics dm = getDisplayMetricsLocked(true); - DisplayMetrics appDm = new DisplayMetrics(); - appDm.setTo(dm); // set it for java, this also affects newly created Resources if (config.locale != null) { @@ -3496,11 +3600,7 @@ public final class ActivityThread { WeakReference v = it.next(); Resources r = v.get(); if (r != null) { - // keep the original density based on application cale. - appDm.updateDensity(r.getDisplayMetrics().density); - r.updateConfiguration(config, appDm); - // reset - appDm.setTo(dm); + r.updateConfiguration(config, dm); //Log.i(TAG, "Updated app resources " + v.getKey() // + " " + r + ": " + r.getConfiguration()); } else { @@ -3528,15 +3628,20 @@ public final class ActivityThread { performConfigurationChanged(r.activity, mConfiguration); } - final void handleProfilerControl(boolean start, String path) { + final void handleProfilerControl(boolean start, ProfilerControlData pcd) { if (start) { - File file = new File(path); - file.getParentFile().mkdirs(); try { - Debug.startMethodTracing(file.toString(), 8 * 1024 * 1024); + Debug.startMethodTracing(pcd.path, pcd.fd.getFileDescriptor(), + 8 * 1024 * 1024, 0); } catch (RuntimeException e) { - Log.w(TAG, "Profiling failed on path " + path + Log.w(TAG, "Profiling failed on path " + pcd.path + " -- can the process access this path?"); + } finally { + try { + pcd.fd.close(); + } catch (IOException e) { + Log.w(TAG, "Failure closing profile fd", e); + } } } else { Debug.stopMethodTracing(); @@ -3592,6 +3697,13 @@ public final class ActivityThread { */ Locale.setDefault(data.config.locale); + /* + * Update the system configuration since its preloaded and might not + * reflect configuration changes. The configuration object passed + * in AppBindData can be safely assumed to be up to date + */ + Resources.getSystem().updateConfiguration(mConfiguration, null); + data.info = getPackageInfoNoCheck(data.appInfo); if (data.debugMode != IApplicationThread.DEBUG_OFF) { @@ -3682,7 +3794,9 @@ public final class ActivityThread { mInstrumentation = new Instrumentation(); } - Application app = data.info.makeApplication(); + // If the app is being launched for full backup or restore, bring it up in + // a restricted environment with the base application class. + Application app = data.info.makeApplication(data.restrictedBackupMode); mInitialApplication = app; List providers = data.providers; @@ -3867,7 +3981,10 @@ public final class ActivityThread { ProviderRecord pr = mProviderMap.get(name); if (pr.mProvider.asBinder() == provider.asBinder()) { Log.i(TAG, "Removing dead content provider: " + name); - mProviderMap.remove(name); + ProviderRecord removed = mProviderMap.remove(name); + if (removed != null) { + removed.mProvider.asBinder().unlinkToDeath(removed, 0); + } } } } @@ -3876,7 +3993,10 @@ public final class ActivityThread { ProviderRecord pr = mProviderMap.get(name); if (pr.mProvider.asBinder() == provider.asBinder()) { Log.i(TAG, "Removing dead content provider: " + name); - mProviderMap.remove(name); + ProviderRecord removed = mProviderMap.remove(name); + if (removed != null) { + removed.mProvider.asBinder().unlinkToDeath(removed, 0); + } } } diff --git a/core/java/android/app/ApplicationContext.java b/core/java/android/app/ApplicationContext.java index bb17dc35b4e0..38ea686f7077 100644 --- a/core/java/android/app/ApplicationContext.java +++ b/core/java/android/app/ApplicationContext.java @@ -16,8 +16,11 @@ package android.app; -import com.google.android.collect.Maps; +import com.android.internal.policy.PolicyManager; import com.android.internal.util.XmlUtils; +import com.google.android.collect.Maps; + +import org.xmlpull.v1.XmlPullParserException; import android.bluetooth.BluetoothDevice; import android.bluetooth.IBluetoothDevice; @@ -29,6 +32,8 @@ import android.content.ContextWrapper; import android.content.IContentProvider; import android.content.Intent; import android.content.IntentFilter; +import android.content.IIntentReceiver; +import android.content.IntentSender; import android.content.ReceiverCallNotAllowedException; import android.content.ServiceConnection; import android.content.SharedPreferences; @@ -37,9 +42,9 @@ import android.content.pm.ApplicationInfo; import android.content.pm.ComponentInfo; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageDeleteObserver; -import android.content.pm.IPackageStatsObserver; import android.content.pm.IPackageInstallObserver; import android.content.pm.IPackageManager; +import android.content.pm.IPackageStatsObserver; import android.content.pm.InstrumentationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -68,29 +73,30 @@ import android.net.wifi.IWifiManager; import android.net.wifi.WifiManager; import android.os.Binder; import android.os.Bundle; -import android.os.Looper; -import android.os.RemoteException; import android.os.FileUtils; import android.os.Handler; import android.os.IBinder; import android.os.IPowerManager; +import android.os.Looper; import android.os.ParcelFileDescriptor; import android.os.PowerManager; import android.os.Process; +import android.os.RemoteException; import android.os.ServiceManager; import android.os.Vibrator; import android.os.FileUtils.FileStatus; import android.telephony.TelephonyManager; import android.text.ClipboardManager; import android.util.AndroidRuntimeException; +import android.util.DisplayMetrics; import android.util.Log; import android.view.ContextThemeWrapper; +import android.view.Display; import android.view.LayoutInflater; import android.view.WindowManagerImpl; +import android.view.accessibility.AccessibilityManager; import android.view.inputmethod.InputMethodManager; -import com.android.internal.policy.PolicyManager; - import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -100,16 +106,14 @@ import java.io.InputStream; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.WeakHashMap; import java.util.Set; -import java.util.HashSet; +import java.util.WeakHashMap; import java.util.Map.Entry; -import org.xmlpull.v1.XmlPullParserException; - class ReceiverRestrictedContext extends ContextWrapper { ReceiverRestrictedContext(Context base) { super(base); @@ -147,6 +151,7 @@ class ReceiverRestrictedContext extends ContextWrapper { */ class ApplicationContext extends Context { private final static String TAG = "ApplicationContext"; + private final static boolean DEBUG = false; private final static boolean DEBUG_ICONS = false; private static final Object sSync = new Object(); @@ -172,6 +177,7 @@ class ApplicationContext extends Context { private Resources.Theme mTheme = null; private PackageManager mPackageManager; private NotificationManager mNotificationManager = null; + private AccessibilityManager mAccessibilityManager = null; private ActivityManager mActivityManager = null; private Context mReceiverRestrictedContext = null; private SearchManager mSearchManager = null; @@ -181,6 +187,7 @@ class ApplicationContext extends Context { private StatusBarManager mStatusBarManager = null; private TelephonyManager mTelephonyManager = null; private ClipboardManager mClipboardManager = null; + private boolean mRestricted; private final Object mSync = new Object(); @@ -279,6 +286,14 @@ class ApplicationContext extends Context { throw new RuntimeException("Not supported in system context"); } + @Override + public ApplicationInfo getApplicationInfo() { + if (mPackageInfo != null) { + return mPackageInfo.getApplicationInfo(); + } + throw new RuntimeException("Not supported in system context"); + } + @Override public String getPackageResourcePath() { if (mPackageInfo != null) { @@ -299,10 +314,14 @@ class ApplicationContext extends Context { return new File(prefsFile.getPath() + ".bak"); } + public File getSharedPrefsFile(String name) { + return makeFilename(getPreferencesDir(), name + ".xml"); + } + @Override public SharedPreferences getSharedPreferences(String name, int mode) { SharedPreferencesImpl sp; - File f = makeFilename(getPreferencesDir(), name + ".xml"); + File f = getSharedPrefsFile(name); synchronized (sSharedPrefs) { sp = sSharedPrefs.get(f); if (sp != null && !sp.hasFileChanged()) { @@ -550,19 +569,6 @@ class ApplicationContext extends Context { } } - /** - * @hide - */ - @Override - public float getApplicationScale() { - if (mPackageInfo != null) { - return mPackageInfo.getApplicationScale(); - } else { - // same as system density - return 1.0f; - } - } - @Override public void setWallpaper(Bitmap bitmap) throws IOException { try { @@ -904,6 +910,8 @@ class ApplicationContext extends Context { return getNotificationManager(); } else if (KEYGUARD_SERVICE.equals(name)) { return new KeyguardManager(); + } else if (ACCESSIBILITY_SERVICE.equals(name)) { + return AccessibilityManager.getInstance(this); } else if (LOCATION_SERVICE.equals(name)) { return getLocationManager(); } else if (SEARCH_SERVICE.equals(name)) { @@ -1033,11 +1041,6 @@ class ApplicationContext extends Context { } private SearchManager getSearchManager() { - // This is only useable in Activity Contexts - if (getActivityToken() == null) { - throw new AndroidRuntimeException( - "Acquiring SearchManager objects only valid in Activity Contexts."); - } synchronized (mSync) { if (mSearchManager == null) { mSearchManager = new SearchManager(getOuterContext(), mMainThread.getHandler()); @@ -1238,7 +1241,7 @@ class ApplicationContext extends Context { @Override public int checkUriPermission(Uri uri, String readPermission, String writePermission, int pid, int uid, int modeFlags) { - if (false) { + if (DEBUG) { Log.i("foo", "checkUriPermission: uri=" + uri + "readPermission=" + readPermission + " writePermission=" + writePermission + " pid=" + pid + " uid=" + uid + " mode" + modeFlags); @@ -1337,8 +1340,22 @@ class ApplicationContext extends Context { mMainThread.getPackageInfo(packageName, flags); if (pi != null) { ApplicationContext c = new ApplicationContext(); + c.mRestricted = (flags & CONTEXT_RESTRICTED) == CONTEXT_RESTRICTED; c.init(pi, null, mMainThread); if (c.mResources != null) { + Resources newRes = c.mResources; + if (mResources.getCompatibilityInfo().applicationScale != + newRes.getCompatibilityInfo().applicationScale) { + DisplayMetrics dm = mMainThread.getDisplayMetricsLocked(false); + c.mResources = new Resources(newRes.getAssets(), dm, + newRes.getConfiguration(), + mResources.getCompatibilityInfo().copy()); + if (DEBUG) { + Log.d(TAG, "loaded context has different scaling. Using container's" + + " compatiblity info:" + mResources.getDisplayMetrics()); + } + + } return c; } } @@ -1348,6 +1365,11 @@ class ApplicationContext extends Context { "Application package " + packageName + " not found"); } + @Override + public boolean isRestricted() { + return mRestricted; + } + private File getDataDirFile() { if (mPackageInfo != null) { return mPackageInfo.getDataDirFile(); @@ -1453,7 +1475,7 @@ class ApplicationContext extends Context { if ((mode&MODE_WORLD_WRITEABLE) != 0) { perms |= FileUtils.S_IWOTH; } - if (false) { + if (DEBUG) { Log.i(TAG, "File " + name + ": mode=0x" + Integer.toHexString(mode) + ", perms=0x" + Integer.toHexString(perms)); } @@ -1516,43 +1538,33 @@ class ApplicationContext extends Context { throw new NameNotFoundException(packageName); } - public Intent getLaunchIntentForPackage(String packageName) - throws NameNotFoundException { + @Override + public Intent getLaunchIntentForPackage(String packageName) { // First see if the package has an INFO activity; the existence of // such an activity is implied to be the desired front-door for the // overall package (such as if it has multiple launcher entries). - Intent intent = getLaunchIntentForPackageCategory(this, packageName, - Intent.CATEGORY_INFO); - if (intent != null) { - return intent; - } - + Intent intentToResolve = new Intent(Intent.ACTION_MAIN); + intentToResolve.addCategory(Intent.CATEGORY_INFO); + intentToResolve.setPackage(packageName); + ResolveInfo resolveInfo = resolveActivity(intentToResolve, 0); + // Otherwise, try to find a main launcher activity. - return getLaunchIntentForPackageCategory(this, packageName, - Intent.CATEGORY_LAUNCHER); - } - - // XXX This should be implemented as a call to the package manager, - // to reduce the work needed. - static Intent getLaunchIntentForPackageCategory(PackageManager pm, - String packageName, String category) { + if (resolveInfo == null) { + // reuse the intent instance + intentToResolve.removeCategory(Intent.CATEGORY_INFO); + intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER); + intentToResolve.setPackage(packageName); + resolveInfo = resolveActivity(intentToResolve, 0); + } + if (resolveInfo == null) { + return null; + } Intent intent = new Intent(Intent.ACTION_MAIN); + intent.setClassName(packageName, resolveInfo.activityInfo.name); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - Intent intentToResolve = new Intent(Intent.ACTION_MAIN, null); - intentToResolve.addCategory(category); - final List apps = - pm.queryIntentActivities(intentToResolve, 0); - // I wish there were a way to directly get the "main" activity of a - // package but ... - for (ResolveInfo app : apps) { - if (app.activityInfo.packageName.equals(packageName)) { - intent.setClassName(packageName, app.activityInfo.name); - return intent; - } - } - return null; + return intent; } - + @Override public int[] getPackageGids(String packageName) throws NameNotFoundException { @@ -2024,8 +2036,7 @@ class ApplicationContext extends Context { ActivityThread.PackageInfo pi = mContext.mMainThread.getPackageInfoNoCheck(app); Resources r = mContext.mMainThread.getTopLevelResources( app.uid == Process.myUid() ? app.sourceDir - : app.publicSourceDir, - pi.getApplicationScale()); + : app.publicSourceDir, pi); if (r != null) { return r; } @@ -2363,11 +2374,11 @@ class ApplicationContext extends Context { // Should never happen! } } - + @Override - public void freeStorage(long idealStorageSize, PendingIntent opFinishedIntent) { + public void freeStorage(long freeStorageSize, IntentSender pi) { try { - mPM.freeStorage(idealStorageSize, opFinishedIntent); + mPM.freeStorage(freeStorageSize, pi); } catch (RemoteException e) { // Should never happen! } @@ -2420,6 +2431,16 @@ class ApplicationContext extends Context { } } + @Override + public void replacePreferredActivity(IntentFilter filter, + int match, ComponentName[] set, ComponentName activity) { + try { + mPM.replacePreferredActivity(filter, match, set, activity); + } catch (RemoteException e) { + // Should never happen! + } + } + @Override public void clearPackagePreferredActivities(String packageName) { try { diff --git a/core/java/android/app/ApplicationErrorReport.java b/core/java/android/app/ApplicationErrorReport.java new file mode 100644 index 000000000000..6b172363296e --- /dev/null +++ b/core/java/android/app/ApplicationErrorReport.java @@ -0,0 +1,308 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app; + +import android.os.Parcel; +import android.os.Parcelable; +import android.util.Printer; + +/** + * Describes an application error. + * + * A report has a type, which is one of + *

    + *
  • {@link #TYPE_CRASH} application crash. Information about the crash + * is stored in {@link #crashInfo}. + *
  • {@link #TYPE_ANR} application not responding. Information about the + * ANR is stored in {@link #anrInfo}. + *
  • {@link #TYPE_NONE} uninitialized instance of {@link ApplicationErrorReport}. + *
+ * + * @hide + */ + +public class ApplicationErrorReport implements Parcelable { + /** + * Uninitialized error report. + */ + public static final int TYPE_NONE = 0; + + /** + * An error report about an application crash. + */ + public static final int TYPE_CRASH = 1; + + /** + * An error report about an application that's not responding. + */ + public static final int TYPE_ANR = 2; + + /** + * Type of this report. Can be one of {@link #TYPE_NONE}, + * {@link #TYPE_CRASH} or {@link #TYPE_ANR}. + */ + public int type; + + /** + * Package name of the application. + */ + public String packageName; + + /** + * Package name of the application which installed the application this + * report pertains to. + * This identifies which Market the application came from. + */ + public String installerPackageName; + + /** + * Process name of the application. + */ + public String processName; + + /** + * Time at which the error occurred. + */ + public long time; + + /** + * If this report is of type {@link #TYPE_CRASH}, contains an instance + * of CrashInfo describing the crash; otherwise null. + */ + public CrashInfo crashInfo; + + /** + * If this report is of type {@link #TYPE_ANR}, contains an instance + * of AnrInfo describing the ANR; otherwise null. + */ + public AnrInfo anrInfo; + + /** + * Create an uninitialized instance of {@link ApplicationErrorReport}. + */ + public ApplicationErrorReport() { + } + + /** + * Create an instance of {@link ApplicationErrorReport} initialized from + * a parcel. + */ + ApplicationErrorReport(Parcel in) { + readFromParcel(in); + } + + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(type); + dest.writeString(packageName); + dest.writeString(installerPackageName); + dest.writeString(processName); + dest.writeLong(time); + + switch (type) { + case TYPE_CRASH: + crashInfo.writeToParcel(dest, flags); + break; + case TYPE_ANR: + anrInfo.writeToParcel(dest, flags); + break; + } + } + + public void readFromParcel(Parcel in) { + type = in.readInt(); + packageName = in.readString(); + installerPackageName = in.readString(); + processName = in.readString(); + time = in.readLong(); + + switch (type) { + case TYPE_CRASH: + crashInfo = new CrashInfo(in); + anrInfo = null; + break; + case TYPE_ANR: + anrInfo = new AnrInfo(in); + crashInfo = null; + break; + } + } + + /** + * Describes an application crash. + */ + public static class CrashInfo { + /** + * Class name of the exception that caused the crash. + */ + public String exceptionClassName; + + /** + * Message stored in the exception. + */ + public String exceptionMessage; + + /** + * File which the exception was thrown from. + */ + public String throwFileName; + + /** + * Class which the exception was thrown from. + */ + public String throwClassName; + + /** + * Method which the exception was thrown from. + */ + public String throwMethodName; + + /** + * Stack trace. + */ + public String stackTrace; + + /** + * Create an uninitialized instance of CrashInfo. + */ + public CrashInfo() { + } + + /** + * Create an instance of CrashInfo initialized from a Parcel. + */ + public CrashInfo(Parcel in) { + exceptionClassName = in.readString(); + exceptionMessage = in.readString(); + throwFileName = in.readString(); + throwClassName = in.readString(); + throwMethodName = in.readString(); + stackTrace = in.readString(); + } + + /** + * Save a CrashInfo instance to a parcel. + */ + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(exceptionClassName); + dest.writeString(exceptionMessage); + dest.writeString(throwFileName); + dest.writeString(throwClassName); + dest.writeString(throwMethodName); + dest.writeString(stackTrace); + } + + /** + * Dump a CrashInfo instance to a Printer. + */ + public void dump(Printer pw, String prefix) { + pw.println(prefix + "exceptionClassName: " + exceptionClassName); + pw.println(prefix + "exceptionMessage: " + exceptionMessage); + pw.println(prefix + "throwFileName: " + throwFileName); + pw.println(prefix + "throwClassName: " + throwClassName); + pw.println(prefix + "throwMethodName: " + throwMethodName); + pw.println(prefix + "stackTrace: " + stackTrace); + } + } + + /** + * Describes an application not responding error. + */ + public static class AnrInfo { + /** + * Activity name. + */ + public String activity; + + /** + * Description of the operation that timed out. + */ + public String cause; + + /** + * Additional info, including CPU stats. + */ + public String info; + + /** + * Create an uninitialized instance of AnrInfo. + */ + public AnrInfo() { + } + + /** + * Create an instance of AnrInfo initialized from a Parcel. + */ + public AnrInfo(Parcel in) { + activity = in.readString(); + cause = in.readString(); + info = in.readString(); + } + + /** + * Save an AnrInfo instance to a parcel. + */ + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(activity); + dest.writeString(cause); + dest.writeString(info); + } + + /** + * Dump an AnrInfo instance to a Printer. + */ + public void dump(Printer pw, String prefix) { + pw.println(prefix + "activity: " + activity); + pw.println(prefix + "cause: " + cause); + pw.println(prefix + "info: " + info); + } + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public ApplicationErrorReport createFromParcel(Parcel source) { + return new ApplicationErrorReport(source); + } + + public ApplicationErrorReport[] newArray(int size) { + return new ApplicationErrorReport[size]; + } + }; + + public int describeContents() { + return 0; + } + + /** + * Dump the report to a Printer. + */ + public void dump(Printer pw, String prefix) { + pw.println(prefix + "type: " + type); + pw.println(prefix + "packageName: " + packageName); + pw.println(prefix + "installerPackageName: " + installerPackageName); + pw.println(prefix + "processName: " + processName); + pw.println(prefix + "time: " + time); + + switch (type) { + case TYPE_CRASH: + crashInfo.dump(pw, prefix); + break; + case TYPE_ANR: + anrInfo.dump(pw, prefix); + break; + } + } +} diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java index bcc930208206..b052c99e75fc 100644 --- a/core/java/android/app/ApplicationThreadNative.java +++ b/core/java/android/app/ApplicationThreadNative.java @@ -18,6 +18,7 @@ package android.app; import android.content.ComponentName; import android.content.Intent; +import android.content.IIntentReceiver; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.ProviderInfo; @@ -25,6 +26,7 @@ import android.content.pm.ServiceInfo; import android.content.res.Configuration; import android.os.Binder; import android.os.Bundle; +import android.os.Parcelable; import android.os.RemoteException; import android.os.IBinder; import android.os.Parcel; @@ -230,11 +232,13 @@ public abstract class ApplicationThreadNative extends Binder IBinder binder = data.readStrongBinder(); IInstrumentationWatcher testWatcher = IInstrumentationWatcher.Stub.asInterface(binder); int testMode = data.readInt(); + boolean restrictedBackupMode = (data.readInt() != 0); Configuration config = Configuration.CREATOR.createFromParcel(data); HashMap services = data.readHashMap(null); bindApplication(packageName, info, providers, testName, profileName, - testArgs, testWatcher, testMode, config, services); + testArgs, testWatcher, testMode, restrictedBackupMode, + config, services); return true; } @@ -328,7 +332,34 @@ public abstract class ApplicationThreadNative extends Binder data.enforceInterface(IApplicationThread.descriptor); boolean start = data.readInt() != 0; String path = data.readString(); - profilerControl(start, path); + ParcelFileDescriptor fd = data.readInt() != 0 + ? data.readFileDescriptor() : null; + profilerControl(start, path, fd); + return true; + } + + case SET_SCHEDULING_GROUP_TRANSACTION: + { + data.enforceInterface(IApplicationThread.descriptor); + int group = data.readInt(); + setSchedulingGroup(group); + return true; + } + + case SCHEDULE_CREATE_BACKUP_AGENT_TRANSACTION: + { + data.enforceInterface(IApplicationThread.descriptor); + ApplicationInfo appInfo = ApplicationInfo.CREATOR.createFromParcel(data); + int backupMode = data.readInt(); + scheduleCreateBackupAgent(appInfo, backupMode); + return true; + } + + case SCHEDULE_DESTROY_BACKUP_AGENT_TRANSACTION: + { + data.enforceInterface(IApplicationThread.descriptor); + ApplicationInfo appInfo = ApplicationInfo.CREATOR.createFromParcel(data); + scheduleDestroyBackupAgent(appInfo); return true; } } @@ -484,6 +515,24 @@ class ApplicationThreadProxy implements IApplicationThread { data.recycle(); } + public final void scheduleCreateBackupAgent(ApplicationInfo app, int backupMode) + throws RemoteException { + Parcel data = Parcel.obtain(); + data.writeInterfaceToken(IApplicationThread.descriptor); + app.writeToParcel(data, 0); + data.writeInt(backupMode); + mRemote.transact(SCHEDULE_CREATE_BACKUP_AGENT_TRANSACTION, data, null, 0); + data.recycle(); + } + + public final void scheduleDestroyBackupAgent(ApplicationInfo app) throws RemoteException { + Parcel data = Parcel.obtain(); + data.writeInterfaceToken(IApplicationThread.descriptor); + app.writeToParcel(data, 0); + mRemote.transact(SCHEDULE_DESTROY_BACKUP_AGENT_TRANSACTION, data, null, 0); + data.recycle(); + } + public final void scheduleCreateService(IBinder token, ServiceInfo info) throws RemoteException { Parcel data = Parcel.obtain(); @@ -543,7 +592,8 @@ class ApplicationThreadProxy implements IApplicationThread { public final void bindApplication(String packageName, ApplicationInfo info, List providers, ComponentName testName, String profileName, Bundle testArgs, IInstrumentationWatcher testWatcher, int debugMode, - Configuration config, Map services) throws RemoteException { + boolean restrictedBackupMode, Configuration config, + Map services) throws RemoteException { Parcel data = Parcel.obtain(); data.writeInterfaceToken(IApplicationThread.descriptor); data.writeString(packageName); @@ -559,6 +609,7 @@ class ApplicationThreadProxy implements IApplicationThread { data.writeBundle(testArgs); data.writeStrongInterface(testWatcher); data.writeInt(debugMode); + data.writeInt(restrictedBackupMode ? 1 : 0); config.writeToParcel(data, 0); data.writeMap(services); mRemote.transact(BIND_APPLICATION_TRANSACTION, data, null, @@ -663,14 +714,30 @@ class ApplicationThreadProxy implements IApplicationThread { data.recycle(); } - public void profilerControl(boolean start, String path) throws RemoteException { + public void profilerControl(boolean start, String path, + ParcelFileDescriptor fd) throws RemoteException { Parcel data = Parcel.obtain(); data.writeInterfaceToken(IApplicationThread.descriptor); data.writeInt(start ? 1 : 0); data.writeString(path); + if (fd != null) { + data.writeInt(1); + fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); + } else { + data.writeInt(0); + } mRemote.transact(PROFILER_CONTROL_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); data.recycle(); } + + public void setSchedulingGroup(int group) throws RemoteException { + Parcel data = Parcel.obtain(); + data.writeInterfaceToken(IApplicationThread.descriptor); + data.writeInt(group); + mRemote.transact(SET_SCHEDULING_GROUP_TRANSACTION, data, null, + IBinder.FLAG_ONEWAY); + data.recycle(); + } } diff --git a/core/java/android/backup/BackupService.java b/core/java/android/app/BackupAgent.java similarity index 61% rename from core/java/android/backup/BackupService.java rename to core/java/android/app/BackupAgent.java index 50a5921c0421..0ac8a1e4cfdc 100644 --- a/core/java/android/backup/BackupService.java +++ b/core/java/android/app/BackupAgent.java @@ -14,47 +14,38 @@ * limitations under the License. */ -package android.backup; +package android.app; -import android.annotation.SdkConstant; -import android.annotation.SdkConstant.SdkConstantType; -import android.app.Service; -import android.backup.IBackupService; -import android.content.Intent; +import android.app.IBackupAgent; +import android.backup.BackupDataInput; +import android.backup.BackupDataOutput; +import android.content.Context; +import android.content.ContextWrapper; import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.util.Log; +import java.io.IOException; + /** * This is the central interface between an application and Android's * settings backup mechanism. * - * In order to use the backup service, your application must implement a - * subclass of BackupService, and declare an intent filter - * in the application manifest specifying that your BackupService subclass - * handles the {@link BackupService#SERVICE_ACTION} intent action. For example: - * - *
- *      <!-- Use the class "MyBackupService" to perform backups for my app -->
- *      <service android:name=".MyBackupService">
- *          <intent-filter>
- *              <action android:name="android.backup.BackupService.SERVICE" />
- *          </intent-filter>
- *      </service>
- * * @hide pending API solidification */ +public abstract class BackupAgent extends ContextWrapper { + private static final String TAG = "BackupAgent"; -public abstract class BackupService extends Service { - /** - * Service Action: Participate in the backup infrastructure. Applications - * that wish to use the Android backup mechanism must provide an exported - * subclass of BackupService and give it an {@link android.content.IntentFilter - * IntentFilter} that accepts this action. - */ - @SdkConstant(SdkConstantType.SERVICE_ACTION) - public static final String SERVICE_ACTION = "android.backup.BackupService.SERVICE"; + public BackupAgent() { + super(null); + } + + public void onCreate() { + } + + public void onDestroy() { + } /** * The application is being asked to write any data changed since the @@ -76,7 +67,7 @@ public abstract class BackupService extends Service { * here after writing the requested data to dataFd. */ public abstract void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, - ParcelFileDescriptor newState); + ParcelFileDescriptor newState) throws IOException; /** * The application is being restored from backup, and should replace any @@ -87,11 +78,17 @@ public abstract class BackupService extends Service { * * @param data An open, read-only ParcelFileDescriptor pointing to a full snapshot * of the application's data. + * @param appVersionCode The android:versionCode value of the application that backed + * up this particular data set. This makes it easier for an application's + * agent to distinguish among several possible older data versions when + * asked to perform the restore operation. * @param newState An open, read/write ParcelFileDescriptor pointing to an empty * file. The application should record the final backup state * here after restoring its data from dataFd. */ - public abstract void onRestore(ParcelFileDescriptor /* TODO: BackupDataInput */ data, ParcelFileDescriptor newState); + public abstract void onRestore(BackupDataInput data, int appVersionCode, + ParcelFileDescriptor newState) + throws IOException; // ----- Core implementation ----- @@ -100,38 +97,52 @@ public abstract class BackupService extends Service { * Returns the private interface called by the backup system. Applications will * not typically override this. */ - public IBinder onBind(Intent intent) { - if (intent.getAction().equals(SERVICE_ACTION)) { - return mBinder; - } - return null; + public IBinder onBind() { + return mBinder; } private final IBinder mBinder = new BackupServiceBinder().asBinder(); + /** @hide */ + public void attach(Context context) { + attachBaseContext(context); + } + // ----- IBackupService binder interface ----- - private class BackupServiceBinder extends IBackupService.Stub { + private class BackupServiceBinder extends IBackupAgent.Stub { + private static final String TAG = "BackupServiceBinder"; + public void doBackup(ParcelFileDescriptor oldState, ParcelFileDescriptor data, ParcelFileDescriptor newState) throws RemoteException { // !!! TODO - real implementation; for now just invoke the callbacks directly - Log.v("BackupServiceBinder", "doBackup() invoked"); - BackupDataOutput output = new BackupDataOutput(BackupService.this, - data.getFileDescriptor()); + Log.v(TAG, "doBackup() invoked"); + BackupDataOutput output = new BackupDataOutput(data.getFileDescriptor()); try { - BackupService.this.onBackup(oldState, output, newState); + BackupAgent.this.onBackup(oldState, output, newState); + } catch (IOException ex) { + Log.d(TAG, "onBackup (" + BackupAgent.this.getClass().getName() + ") threw", ex); + throw new RuntimeException(ex); } catch (RuntimeException ex) { - Log.d("BackupService", "onBackup (" - + BackupService.this.getClass().getName() + ") threw", ex); + Log.d(TAG, "onBackup (" + BackupAgent.this.getClass().getName() + ") threw", ex); throw ex; } } - public void doRestore(ParcelFileDescriptor data, + public void doRestore(ParcelFileDescriptor data, int appVersionCode, ParcelFileDescriptor newState) throws RemoteException { // !!! TODO - real implementation; for now just invoke the callbacks directly - Log.v("BackupServiceBinder", "doRestore() invoked"); - BackupService.this.onRestore(data, newState); + Log.v(TAG, "doRestore() invoked"); + BackupDataInput input = new BackupDataInput(data.getFileDescriptor()); + try { + BackupAgent.this.onRestore(input, appVersionCode, newState); + } catch (IOException ex) { + Log.d(TAG, "onRestore (" + BackupAgent.this.getClass().getName() + ") threw", ex); + throw new RuntimeException(ex); + } catch (RuntimeException ex) { + Log.d(TAG, "onRestore (" + BackupAgent.this.getClass().getName() + ") threw", ex); + throw ex; + } } } } diff --git a/core/java/android/app/DatePickerDialog.java b/core/java/android/app/DatePickerDialog.java index 863cbcc4d113..78bbb4f42c19 100644 --- a/core/java/android/app/DatePickerDialog.java +++ b/core/java/android/app/DatePickerDialog.java @@ -46,7 +46,6 @@ public class DatePickerDialog extends AlertDialog implements OnClickListener, private final DatePicker mDatePicker; private final OnDateSetListener mCallBack; private final Calendar mCalendar; - private final java.text.DateFormat mDateFormat; private final java.text.DateFormat mTitleDateFormat; private final String[] mWeekDays; @@ -108,7 +107,6 @@ public class DatePickerDialog extends AlertDialog implements OnClickListener, DateFormatSymbols symbols = new DateFormatSymbols(); mWeekDays = symbols.getShortWeekdays(); - mDateFormat = DateFormat.getMediumDateFormat(context); mTitleDateFormat = java.text.DateFormat. getDateInstance(java.text.DateFormat.FULL); mCalendar = Calendar.getInstance(); diff --git a/core/java/android/app/Dialog.java b/core/java/android/app/Dialog.java index b09a57fb27a5..222fe75fb3a2 100644 --- a/core/java/android/app/Dialog.java +++ b/core/java/android/app/Dialog.java @@ -16,32 +16,34 @@ package android.app; +import com.android.internal.policy.PolicyManager; + import android.content.Context; import android.content.DialogInterface; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.os.Bundle; import android.util.Config; import android.util.Log; import android.view.ContextMenu; import android.view.ContextThemeWrapper; import android.view.Gravity; import android.view.KeyEvent; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; -import android.view.LayoutInflater; import android.view.Window; import android.view.WindowManager; import android.view.ContextMenu.ContextMenuInfo; import android.view.View.OnCreateContextMenuListener; - -import com.android.internal.policy.PolicyManager; +import android.view.ViewGroup.LayoutParams; +import android.view.accessibility.AccessibilityEvent; import java.lang.ref.WeakReference; @@ -81,6 +83,7 @@ public class Dialog implements DialogInterface, Window.Callback, * {@hide} */ protected boolean mCancelable = true; + private Message mCancelMessage; private Message mDismissMessage; @@ -209,7 +212,9 @@ public class Dialog implements DialogInterface, Window.Callback, if (mShowing) { if (Config.LOGV) Log.v(LOG_TAG, "[Dialog] start: already showing, ignore"); - if (mDecor != null) mDecor.setVisibility(View.VISIBLE); + if (mDecor != null) { + mDecor.setVisibility(View.VISIBLE); + } return; } @@ -236,7 +241,9 @@ public class Dialog implements DialogInterface, Window.Callback, * Hide the dialog, but do not dismiss it. */ public void hide() { - if (mDecor != null) mDecor.setVisibility(View.GONE); + if (mDecor != null) { + mDecor.setVisibility(View.GONE); + } } /** @@ -266,6 +273,7 @@ public class Dialog implements DialogInterface, Window.Callback, } mWindowManager.removeView(mDecor); + mDecor = null; mWindow.closeAllPanels(); onStop(); @@ -280,7 +288,7 @@ public class Dialog implements DialogInterface, Window.Callback, Message.obtain(mDismissMessage).sendToTarget(); } } - + // internal method to make sure mcreated is set properly without requiring // users to call through to super in onCreate void dispatchOnCreate(Bundle savedInstanceState) { @@ -608,6 +616,18 @@ public class Dialog implements DialogInterface, Window.Callback, return onTrackballEvent(ev); } + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + event.setClassName(getClass().getName()); + event.setPackageName(mContext.getPackageName()); + + LayoutParams params = getWindow().getAttributes(); + boolean isFullScreen = (params.width == LayoutParams.FILL_PARENT) && + (params.height == LayoutParams.FILL_PARENT); + event.setFullScreen(isFullScreen); + + return false; + } + /** * @see Activity#onCreatePanelView(int) */ diff --git a/core/java/android/app/FullBackupAgent.java b/core/java/android/app/FullBackupAgent.java new file mode 100644 index 000000000000..d89db9667473 --- /dev/null +++ b/core/java/android/app/FullBackupAgent.java @@ -0,0 +1,58 @@ +package android.app; + +import android.backup.BackupDataInput; +import android.backup.BackupDataOutput; +import android.backup.FileBackupHelper; +import android.os.ParcelFileDescriptor; +import android.util.Log; + +import java.io.File; +import java.util.ArrayList; +import java.util.LinkedList; + +/** + * Backs up an application's entire /data/data/<package>/... file system. This + * class is used by the desktop full backup mechanism and is not intended for direct + * use by applications. + * + * {@hide} + */ + +public class FullBackupAgent extends BackupAgent { + // !!! TODO: turn off debugging + private static final String TAG = "FullBackupAgent"; + private static final boolean DEBUG = true; + + @Override + public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, + ParcelFileDescriptor newState) { + LinkedList dirsToScan = new LinkedList(); + ArrayList allFiles = new ArrayList(); + + // build the list of files in the app's /data/data tree + dirsToScan.add(getFilesDir()); + if (DEBUG) Log.v(TAG, "Backing up dir tree @ " + getFilesDir().getAbsolutePath() + " :"); + while (dirsToScan.size() > 0) { + File dir = dirsToScan.removeFirst(); + File[] contents = dir.listFiles(); + if (contents != null) { + for (File f : contents) { + if (f.isDirectory()) { + dirsToScan.add(f); + } else if (f.isFile()) { + if (DEBUG) Log.v(TAG, " " + f.getAbsolutePath()); + allFiles.add(f.getAbsolutePath()); + } + } + } + } + + // That's the file set; now back it all up + FileBackupHelper helper = new FileBackupHelper(this, (String[])allFiles.toArray()); + helper.performBackup(oldState, data, newState); + } + + @Override + public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) { + } +} diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index 56b29c1c941f..3ec7938b5a10 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -21,6 +21,9 @@ import android.content.ContentProviderNative; import android.content.IContentProvider; import android.content.Intent; import android.content.IntentFilter; +import android.content.IIntentSender; +import android.content.IIntentReceiver; +import android.content.pm.ApplicationInfo; import android.content.pm.ConfigurationInfo; import android.content.pm.IPackageDataObserver; import android.content.pm.ProviderInfo; @@ -44,9 +47,30 @@ import java.util.List; * {@hide} */ public interface IActivityManager extends IInterface { + /** + * Returned by startActivity() if the start request was canceled because + * app switches are temporarily canceled to ensure the user's last request + * (such as pressing home) is performed. + */ + public static final int START_SWITCHES_CANCELED = 4; + /** + * Returned by startActivity() if an activity wasn't really started, but + * the given Intent was given to the existing top activity. + */ public static final int START_DELIVERED_TO_TOP = 3; + /** + * Returned by startActivity() if an activity wasn't really started, but + * a task was simply brought to the foreground. + */ public static final int START_TASK_TO_FRONT = 2; + /** + * Returned by startActivity() if the caller asked that the Intent not + * be executed if it is the recipient, and that is indeed the case. + */ public static final int START_RETURN_INTENT_TO_CALLER = 1; + /** + * Activity was started successfully as normal. + */ public static final int START_SUCCESS = 0; public static final int START_INTENT_NOT_RESOLVED = -1; public static final int START_CLASS_NOT_FOUND = -2; @@ -128,6 +152,11 @@ public interface IActivityManager extends IInterface { public void serviceDoneExecuting(IBinder token) throws RemoteException; public IBinder peekService(Intent service, String resolvedType) throws RemoteException; + public boolean bindBackupAgent(ApplicationInfo appInfo, int backupRestoreMode) + throws RemoteException; + public void backupAgentCreated(String packageName, IBinder agent) throws RemoteException; + public void unbindBackupAgent(ApplicationInfo appInfo) throws RemoteException; + public boolean startInstrumentation(ComponentName className, String profileFile, int flags, Bundle arguments, IInstrumentationWatcher watcher) throws RemoteException; @@ -221,10 +250,13 @@ public interface IActivityManager extends IInterface { // Turn on/off profiling in a particular process. public boolean profileControl(String process, boolean start, - String path) throws RemoteException; + String path, ParcelFileDescriptor fd) throws RemoteException; public boolean shutdown(int timeout) throws RemoteException; + public void stopAppSwitches() throws RemoteException; + public void resumeAppSwitches() throws RemoteException; + /* * Private non-Binder interfaces */ @@ -371,4 +403,9 @@ public interface IActivityManager extends IInterface { int PEEK_SERVICE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+84; int PROFILE_CONTROL_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+85; int SHUTDOWN_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+86; + int STOP_APP_SWITCHES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+87; + int RESUME_APP_SWITCHES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+88; + int START_BACKUP_AGENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+89; + int BACKUP_AGENT_CREATED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+90; + int UNBIND_BACKUP_AGENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+91; } diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java index 9f3534b0924a..c0bc2a03ac91 100644 --- a/core/java/android/app/IApplicationThread.java +++ b/core/java/android/app/IApplicationThread.java @@ -18,12 +18,14 @@ package android.app; import android.content.ComponentName; import android.content.Intent; +import android.content.IIntentReceiver; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.ProviderInfo; import android.content.pm.ServiceInfo; import android.content.res.Configuration; import android.os.Bundle; +import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.IBinder; import android.os.IInterface; @@ -59,6 +61,11 @@ public interface IApplicationThread extends IInterface { int configChanges) throws RemoteException; void scheduleReceiver(Intent intent, ActivityInfo info, int resultCode, String data, Bundle extras, boolean sync) throws RemoteException; + static final int BACKUP_MODE_INCREMENTAL = 0; + static final int BACKUP_MODE_FULL = 1; + static final int BACKUP_MODE_RESTORE = 2; + void scheduleCreateBackupAgent(ApplicationInfo app, int backupMode) throws RemoteException; + void scheduleDestroyBackupAgent(ApplicationInfo app) throws RemoteException; void scheduleCreateService(IBinder token, ServiceInfo info) throws RemoteException; void scheduleBindService(IBinder token, Intent intent, boolean rebind) throws RemoteException; @@ -71,8 +78,8 @@ public interface IApplicationThread extends IInterface { static final int DEBUG_WAIT = 2; void bindApplication(String packageName, ApplicationInfo info, List providers, ComponentName testName, String profileName, Bundle testArguments, - IInstrumentationWatcher testWatcher, int debugMode, Configuration config, Map services) throws RemoteException; + IInstrumentationWatcher testWatcher, int debugMode, boolean restrictedBackupMode, + Configuration config, Map services) throws RemoteException; void scheduleExit() throws RemoteException; void requestThumbnail(IBinder token) throws RemoteException; void scheduleConfigurationChanged(Configuration config) throws RemoteException; @@ -86,8 +93,10 @@ public interface IApplicationThread extends IInterface { void scheduleLowMemory() throws RemoteException; void scheduleActivityConfigurationChanged(IBinder token) throws RemoteException; void requestPss() throws RemoteException; - void profilerControl(boolean start, String path) throws RemoteException; - + void profilerControl(boolean start, String path, ParcelFileDescriptor fd) + throws RemoteException; + void setSchedulingGroup(int group) throws RemoteException; + String descriptor = "android.app.IApplicationThread"; int SCHEDULE_PAUSE_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION; @@ -117,4 +126,7 @@ public interface IApplicationThread extends IInterface { int SCHEDULE_RELAUNCH_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+25; int REQUEST_PSS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+26; int PROFILER_CONTROL_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+27; + int SET_SCHEDULING_GROUP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+28; + int SCHEDULE_CREATE_BACKUP_AGENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+29; + int SCHEDULE_DESTROY_BACKUP_AGENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+30; } diff --git a/core/java/android/backup/IBackupService.aidl b/core/java/android/app/IBackupAgent.aidl similarity index 82% rename from core/java/android/backup/IBackupService.aidl rename to core/java/android/app/IBackupAgent.aidl index 1bde8eac9bdb..9b0550fce64b 100644 --- a/core/java/android/backup/IBackupService.aidl +++ b/core/java/android/app/IBackupAgent.aidl @@ -14,18 +14,18 @@ * limitations under the License. */ -package android.backup; +package android.app; import android.os.ParcelFileDescriptor; /** * Interface presented by applications being asked to participate in the * backup & restore mechanism. End user code does not typically implement - * this interface; they subclass BackupService instead. + * this interface; they subclass BackupAgent instead. * * {@hide} */ -interface IBackupService { +interface IBackupAgent { /** * Request that the app perform an incremental backup. * @@ -51,9 +51,14 @@ interface IBackupService { * app's backup. This is to be a replacement of the app's * current data, not to be merged into it. * + * @param appVersionCode The android:versionCode attribute of the application + * that created this data set. This can help the agent distinguish among + * various historical backup content possibilities. + * * @param newState Read-write file, empty when onRestore() is called, * that is to be written with the state description that holds after * the restore has been completed. */ - void doRestore(in ParcelFileDescriptor data, in ParcelFileDescriptor newState); + void doRestore(in ParcelFileDescriptor data, int appVersionCode, + in ParcelFileDescriptor newState); } diff --git a/core/java/android/app/ISearchManager.aidl b/core/java/android/app/ISearchManager.aidl index 39eb4f1ccbe8..e8bd60a4d86f 100644 --- a/core/java/android/app/ISearchManager.aidl +++ b/core/java/android/app/ISearchManager.aidl @@ -16,11 +16,28 @@ package android.app; +import android.app.ISearchManagerCallback; import android.content.ComponentName; +import android.content.res.Configuration; +import android.os.Bundle; import android.server.search.SearchableInfo; /** @hide */ interface ISearchManager { SearchableInfo getSearchableInfo(in ComponentName launchActivity, boolean globalSearch); List getSearchablesInGlobalSearch(); + List getSearchablesForWebSearch(); + SearchableInfo getDefaultSearchableForWebSearch(); + void setDefaultWebSearch(in ComponentName component); + void startSearch(in String initialQuery, + boolean selectInitialQuery, + in ComponentName launchActivity, + in Bundle appSearchData, + boolean globalSearch, + ISearchManagerCallback searchManagerCallback); + void stopSearch(); + boolean isVisible(); + Bundle onSaveInstanceState(); + void onRestoreInstanceState(in Bundle savedInstanceState); + void onConfigurationChanged(in Configuration newConfig); } diff --git a/core/java/android/app/ISearchManagerCallback.aidl b/core/java/android/app/ISearchManagerCallback.aidl new file mode 100644 index 000000000000..bdfb2bad7ab4 --- /dev/null +++ b/core/java/android/app/ISearchManagerCallback.aidl @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2009, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app; + +/** @hide */ +oneway interface ISearchManagerCallback { + void onDismiss(); + void onCancel(); +} diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index f6a28b23a3a8..e31f4f834404 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -446,13 +446,13 @@ public class Instrumentation { if (ai == null) { throw new RuntimeException("Unable to resolve activity for: " + intent); } - if (!ai.applicationInfo.processName.equals( - getTargetContext().getPackageName())) { + String myProc = mThread.getProcessName(); + if (!ai.processName.equals(myProc)) { // todo: if this intent is ambiguous, look here to see if // there is a single match that is in our package. - throw new RuntimeException("Intent resolved to different package " - + ai.applicationInfo.packageName + ": " - + intent); + throw new RuntimeException("Intent in process " + + myProc + " resolved to different process " + + ai.processName + ": " + intent); } intent.setComponent(new ComponentName( diff --git a/core/java/android/app/LauncherActivity.java b/core/java/android/app/LauncherActivity.java index 8d249da960bd..accdda9ba599 100644 --- a/core/java/android/app/LauncherActivity.java +++ b/core/java/android/app/LauncherActivity.java @@ -60,26 +60,20 @@ public abstract class LauncherActivity extends ListActivity { * An item in the list */ public static class ListItem { + public ResolveInfo resolveInfo; public CharSequence label; - //public CharSequence description; public Drawable icon; public String packageName; public String className; public Bundle extras; ListItem(PackageManager pm, ResolveInfo resolveInfo, IconResizer resizer) { + this.resolveInfo = resolveInfo; label = resolveInfo.loadLabel(pm); if (label == null && resolveInfo.activityInfo != null) { label = resolveInfo.activityInfo.name; } - /* - if (resolveInfo.activityInfo != null && - resolveInfo.activityInfo.applicationInfo != null) { - description = resolveInfo.activityInfo.applicationInfo.loadDescription(pm); - } - */ - icon = resizer.createIconThumbnail(resolveInfo.loadIcon(pm)); packageName = resolveInfo.activityInfo.applicationInfo.packageName; className = resolveInfo.activityInfo.name; @@ -122,6 +116,14 @@ public abstract class LauncherActivity extends ListActivity { return intent; } + public ListItem itemForPosition(int position) { + if (mActivitiesList == null) { + return null; + } + + return mActivitiesList.get(position); + } + public int getCount() { return mActivitiesList != null ? mActivitiesList.size() : 0; } @@ -353,6 +355,16 @@ public abstract class LauncherActivity extends ListActivity { return adapter.intentForPosition(position); } + /** + * Return the {@link ListItem} for a specific position in our + * {@link android.widget.ListView}. + * @param position The item to return + */ + protected ListItem itemForPosition(int position) { + ActivityAdapter adapter = (ActivityAdapter) mAdapter; + return adapter.itemForPosition(position); + } + /** * Get the base intent to use when running * {@link PackageManager#queryIntentActivities(Intent, int)}. diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java index cb660c7fde6f..f9c38f998c35 100644 --- a/core/java/android/app/PendingIntent.java +++ b/core/java/android/app/PendingIntent.java @@ -18,6 +18,9 @@ package android.app; import android.content.Context; import android.content.Intent; +import android.content.IIntentReceiver; +import android.content.IIntentSender; +import android.content.IntentSender; import android.os.Bundle; import android.os.RemoteException; import android.os.Handler; @@ -105,7 +108,7 @@ public final class PendingIntent implements Parcelable { public CanceledException(Exception cause) { super(cause); } - }; + } /** * Callback interface for discovering when a send operation has @@ -270,6 +273,21 @@ public final class PendingIntent implements Parcelable { return null; } + private class IntentSenderWrapper extends IntentSender { + protected IntentSenderWrapper(IIntentSender target) { + super(target); + } + } + /** + * Retrieve a IntentSender object that wraps the existing sender of the PendingIntent + * + * @return Returns a IntentSender object that wraps the sender of PendingIntent + * + */ + public IntentSender getIntentSender() { + return new IntentSenderWrapper(mTarget); + } + /** * Cancel a currently active PendingIntent. Only the original application * owning an PendingIntent can cancel it. diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java index 343380cc766e..fdb619ae2da6 100644 --- a/core/java/android/app/SearchDialog.java +++ b/core/java/android/app/SearchDialog.java @@ -24,6 +24,8 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.ContentResolver; +import android.content.ContentValues; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; @@ -32,6 +34,7 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.database.Cursor; import android.graphics.drawable.Drawable; +import android.graphics.drawable.Animatable; import android.net.Uri; import android.os.Bundle; import android.os.SystemClock; @@ -41,8 +44,10 @@ import android.text.Editable; import android.text.InputType; import android.text.TextUtils; import android.text.TextWatcher; +import android.text.util.Regex; import android.util.AttributeSet; import android.util.Log; +import android.view.ContextThemeWrapper; import android.view.Gravity; import android.view.KeyEvent; import android.view.MotionEvent; @@ -51,6 +56,7 @@ import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; +import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.AutoCompleteTextView; @@ -67,8 +73,8 @@ import java.util.WeakHashMap; import java.util.concurrent.atomic.AtomicLong; /** - * In-application-process implementation of Search Bar. This is still controlled by the - * SearchManager, but it runs in the current activity's process to keep things lighter weight. + * System search dialog. This is controlled by the + * SearchManagerService and runs in the system process. * * @hide */ @@ -82,13 +88,11 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS private static final String INSTANCE_KEY_COMPONENT = "comp"; private static final String INSTANCE_KEY_APPDATA = "data"; private static final String INSTANCE_KEY_GLOBALSEARCH = "glob"; - private static final String INSTANCE_KEY_DISPLAY_QUERY = "dQry"; - private static final String INSTANCE_KEY_DISPLAY_SEL_START = "sel1"; - private static final String INSTANCE_KEY_DISPLAY_SEL_END = "sel2"; - private static final String INSTANCE_KEY_SELECTED_ELEMENT = "slEl"; - private static final int INSTANCE_SELECTED_BUTTON = -2; - private static final int INSTANCE_SELECTED_QUERY = -1; - + private static final String INSTANCE_KEY_STORED_COMPONENT = "sComp"; + private static final String INSTANCE_KEY_STORED_APPDATA = "sData"; + private static final String INSTANCE_KEY_PREVIOUS_COMPONENTS = "sPrev"; + private static final String INSTANCE_KEY_USER_QUERY = "uQry"; + private static final int SEARCH_PLATE_LEFT_PADDING_GLOBAL = 12; private static final int SEARCH_PLATE_LEFT_PADDING_NON_GLOBAL = 7; @@ -103,6 +107,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS private Button mGoButton; private ImageButton mVoiceButton; private View mSearchPlate; + private Drawable mWorkingSpinner; // interaction with searchable application private SearchableInfo mSearchable; @@ -129,9 +134,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS private SuggestionsAdapter mSuggestionsAdapter; // Whether to rewrite queries when selecting suggestions - // TODO: This is disabled because of problems with persistent selections - // causing non-user-initiated rewrites. - private static final boolean REWRITE_QUERIES = false; + private static final boolean REWRITE_QUERIES = true; // The query entered by the user. This is not changed when selecting a suggestion // that modifies the contents of the text field. But if the user then edits @@ -142,14 +145,17 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS // more than once. private final WeakHashMap mOutsideDrawablesCache = new WeakHashMap(); - + + // Last known IME options value for the search edit text. + private int mSearchAutoCompleteImeOptions; + /** * Constructor - fires it up and makes it look like the search UI. * * @param context Application Context we can use for system acess */ public SearchDialog(Context context) { - super(context, com.android.internal.R.style.Theme_SearchBar); + super(context, com.android.internal.R.style.Theme_GlobalSearchBar); } /** @@ -160,17 +166,17 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Window theWindow = getWindow(); - theWindow.setGravity(Gravity.TOP|Gravity.FILL_HORIZONTAL); - setContentView(com.android.internal.R.layout.search_bar); - theWindow.setLayout(ViewGroup.LayoutParams.FILL_PARENT, - // taking up the whole window (even when transparent) is less than ideal, - // but necessary to show the popup window until the window manager supports - // having windows anchored by their parent but not clipped by them. - ViewGroup.LayoutParams.FILL_PARENT); + Window theWindow = getWindow(); WindowManager.LayoutParams lp = theWindow.getAttributes(); + lp.type = WindowManager.LayoutParams.TYPE_SEARCH_BAR; + lp.width = ViewGroup.LayoutParams.FILL_PARENT; + // taking up the whole window (even when transparent) is less than ideal, + // but necessary to show the popup window until the window manager supports + // having windows anchored by their parent but not clipped by them. + lp.height = ViewGroup.LayoutParams.FILL_PARENT; + lp.gravity = Gravity.TOP | Gravity.FILL_HORIZONTAL; lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; theWindow.setAttributes(lp); @@ -182,6 +188,8 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS mGoButton = (Button) findViewById(com.android.internal.R.id.search_go_btn); mVoiceButton = (ImageButton) findViewById(com.android.internal.R.id.search_voice_btn); mSearchPlate = findViewById(com.android.internal.R.id.search_plate); + mWorkingSpinner = getContext().getResources(). + getDrawable(com.android.internal.R.drawable.search_spinner); // attach listeners mSearchAutoComplete.addTextChangedListener(mTextWatcher); @@ -213,10 +221,14 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS // Save voice intent for later queries/launching mVoiceWebSearchIntent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH); + mVoiceWebSearchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mVoiceWebSearchIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); mVoiceAppSearchIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); + mVoiceAppSearchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + + mSearchAutoCompleteImeOptions = mSearchAutoComplete.getImeOptions(); } /** @@ -226,20 +238,21 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS */ public boolean show(String initialQuery, boolean selectInitialQuery, ComponentName componentName, Bundle appSearchData, boolean globalSearch) { - if (isShowing()) { - // race condition - already showing but not handling events yet. - // in this case, just discard the "show" request - return true; - } - + // Reset any stored values from last time dialog was shown. mStoredComponentName = null; mStoredAppSearchData = null; - - return doShow(initialQuery, selectInitialQuery, componentName, appSearchData, globalSearch); + + boolean success = doShow(initialQuery, selectInitialQuery, componentName, appSearchData, + globalSearch); + if (success) { + // Display the drop down as soon as possible instead of waiting for the rest of the + // pending UI stuff to get done, so that things appear faster to the user. + mSearchAutoComplete.showDropDownAfterLayout(); + } + return success; } - /** * Called in response to a press of the hard search button in * {@link #onKeyDown(int, KeyEvent)}, this method toggles between in-app @@ -309,15 +322,17 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS + appSearchData + ", " + globalSearch + ")"); } + SearchManager searchManager = (SearchManager) + mContext.getSystemService(Context.SEARCH_SERVICE); // Try to get the searchable info for the provided component (or for global search, // if globalSearch == true). - mSearchable = SearchManager.getSearchableInfo(componentName, globalSearch); + mSearchable = searchManager.getSearchableInfo(componentName, globalSearch); // If we got back nothing, and it wasn't a request for global search, then try again // for global search, as we'll try to launch that in lieu of any component-specific search. if (!globalSearch && mSearchable == null) { globalSearch = true; - mSearchable = SearchManager.getSearchableInfo(componentName, globalSearch); + mSearchable = searchManager.getSearchableInfo(componentName, globalSearch); // If we still get back null (i.e., there's not even a searchable info available // for global search), then really give up. @@ -332,7 +347,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS mAppSearchData = appSearchData; // Using globalSearch here is just an optimization, just calling // isDefaultSearchable() should always give the same result. - mGlobalSearchMode = globalSearch || SearchManager.isDefaultSearchable(mSearchable); + mGlobalSearchMode = globalSearch || searchManager.isDefaultSearchable(mSearchable); mActivityContext = mSearchable.getActivityContext(getContext()); // show the dialog. this will call onStart(). @@ -345,6 +360,21 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.showSoftInputUnchecked(0, null); } + + // The Dialog uses a ContextThemeWrapper for the context; use this to change the + // theme out from underneath us, between the global search theme and the in-app + // search theme. They are identical except that the global search theme does not + // dim the background of the window (because global search is full screen so it's + // not needed and this should save a little bit of time on global search invocation). + Object context = getContext(); + if (context instanceof ContextThemeWrapper) { + ContextThemeWrapper wrapper = (ContextThemeWrapper) context; + if (globalSearch) { + wrapper.setTheme(com.android.internal.R.style.Theme_GlobalSearchBar); + } else { + wrapper.setTheme(com.android.internal.R.style.Theme_SearchBar); + } + } show(); } @@ -372,11 +402,6 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS public void onStop() { super.onStop(); - // TODO: Removing the listeners means that they never get called, since - // Dialog.dismissDialog() calls onStop() before sendDismissMessage(). - setOnCancelListener(null); - setOnDismissListener(null); - // stop receiving broadcasts (throws exception if none registered) try { getContext().unregisterReceiver(mBroadcastReceiver); @@ -394,6 +419,24 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS mUserQuery = null; mPreviousComponents = null; } + + /** + * Sets the search dialog to the 'working' state, which shows a working spinner in the + * right hand size of the text field. + * + * @param working true to show spinner, false to hide spinner + */ + public void setWorking(boolean working) { + if (working) { + mSearchAutoComplete.setCompoundDrawablesWithIntrinsicBounds( + null, null, mWorkingSpinner, null); + ((Animatable) mWorkingSpinner).start(); + } else { + mSearchAutoComplete.setCompoundDrawablesWithIntrinsicBounds( + null, null, null, null); + ((Animatable) mWorkingSpinner).stop(); + } + } /** * Closes and gets rid of the suggestions adapter. @@ -412,8 +455,6 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS /** * Save the minimal set of data necessary to recreate the search * - * TODO: go through this and make sure that it saves everything that is needed - * * @return A bundle with the state of the dialog. */ @Override @@ -424,20 +465,11 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS bundle.putParcelable(INSTANCE_KEY_COMPONENT, mLaunchComponent); bundle.putBundle(INSTANCE_KEY_APPDATA, mAppSearchData); bundle.putBoolean(INSTANCE_KEY_GLOBALSEARCH, mGlobalSearchMode); - - // UI state - bundle.putString(INSTANCE_KEY_DISPLAY_QUERY, mSearchAutoComplete.getText().toString()); - bundle.putInt(INSTANCE_KEY_DISPLAY_SEL_START, mSearchAutoComplete.getSelectionStart()); - bundle.putInt(INSTANCE_KEY_DISPLAY_SEL_END, mSearchAutoComplete.getSelectionEnd()); - - int selectedElement = INSTANCE_SELECTED_QUERY; - if (mGoButton.isFocused()) { - selectedElement = INSTANCE_SELECTED_BUTTON; - } else if (mSearchAutoComplete.isPopupShowing()) { - selectedElement = 0; // TODO mSearchTextField.getListSelection() // 0..n - } - bundle.putInt(INSTANCE_KEY_SELECTED_ELEMENT, selectedElement); - + bundle.putParcelable(INSTANCE_KEY_STORED_COMPONENT, mStoredComponentName); + bundle.putBundle(INSTANCE_KEY_STORED_APPDATA, mStoredAppSearchData); + bundle.putParcelableArrayList(INSTANCE_KEY_PREVIOUS_COMPONENTS, mPreviousComponents); + bundle.putString(INSTANCE_KEY_USER_QUERY, mUserQuery); + return bundle; } @@ -451,45 +483,27 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS */ @Override public void onRestoreInstanceState(Bundle savedInstanceState) { - // Get the launch info ComponentName launchComponent = savedInstanceState.getParcelable(INSTANCE_KEY_COMPONENT); Bundle appSearchData = savedInstanceState.getBundle(INSTANCE_KEY_APPDATA); boolean globalSearch = savedInstanceState.getBoolean(INSTANCE_KEY_GLOBALSEARCH); - - // get the UI state - String displayQuery = savedInstanceState.getString(INSTANCE_KEY_DISPLAY_QUERY); - int querySelStart = savedInstanceState.getInt(INSTANCE_KEY_DISPLAY_SEL_START, -1); - int querySelEnd = savedInstanceState.getInt(INSTANCE_KEY_DISPLAY_SEL_END, -1); - int selectedElement = savedInstanceState.getInt(INSTANCE_KEY_SELECTED_ELEMENT); - - // show the dialog. skip any show/hide animation, we want to go fast. - // send the text that actually generates the suggestions here; we'll replace the display - // text as necessary in a moment. - if (!show(displayQuery, false, launchComponent, appSearchData, globalSearch)) { + ComponentName storedComponentName = + savedInstanceState.getParcelable(INSTANCE_KEY_STORED_COMPONENT); + Bundle storedAppSearchData = + savedInstanceState.getBundle(INSTANCE_KEY_STORED_APPDATA); + ArrayList previousComponents = + savedInstanceState.getParcelableArrayList(INSTANCE_KEY_PREVIOUS_COMPONENTS); + String userQuery = savedInstanceState.getString(INSTANCE_KEY_USER_QUERY); + + // Set stored state + mStoredComponentName = storedComponentName; + mStoredAppSearchData = storedAppSearchData; + mPreviousComponents = previousComponents; + + // show the dialog. + if (!doShow(userQuery, false, launchComponent, appSearchData, globalSearch)) { // for some reason, we couldn't re-instantiate return; } - - mSearchAutoComplete.setText(displayQuery); - - // clean up the selection state - switch (selectedElement) { - case INSTANCE_SELECTED_BUTTON: - mGoButton.setEnabled(true); - mGoButton.setFocusable(true); - mGoButton.requestFocus(); - break; - case INSTANCE_SELECTED_QUERY: - if (querySelStart >= 0 && querySelEnd >= 0) { - mSearchAutoComplete.requestFocus(); - mSearchAutoComplete.setSelection(querySelStart, querySelEnd); - } - break; - default: - // TODO: defer selecting a list element until suggestion list appears -// mSearchAutoComplete.setListSelection(selectedElement) - break; - } } /** @@ -534,7 +548,8 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS } } mSearchAutoComplete.setInputType(inputType); - mSearchAutoComplete.setImeOptions(mSearchable.getImeOptions()); + mSearchAutoCompleteImeOptions = mSearchable.getImeOptions(); + mSearchAutoComplete.setImeOptions(mSearchAutoCompleteImeOptions); } } @@ -547,24 +562,20 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS mSearchAutoComplete.setDropDownAnimationStyle(0); // no animation mSearchAutoComplete.setThreshold(mSearchable.getSuggestThreshold()); + // we dismiss the entire dialog instead + mSearchAutoComplete.setDropDownDismissedOnCompletion(false); if (mGlobalSearchMode) { mSearchAutoComplete.setDropDownAlwaysVisible(true); // fill space until results come in - mSearchAutoComplete.setDropDownDismissedOnCompletion(false); - mSearchAutoComplete.setDropDownBackgroundResource( - com.android.internal.R.drawable.search_dropdown_background); } else { mSearchAutoComplete.setDropDownAlwaysVisible(false); - mSearchAutoComplete.setDropDownDismissedOnCompletion(true); - mSearchAutoComplete.setDropDownBackgroundResource( - com.android.internal.R.drawable.search_dropdown_background_apps); } // attach the suggestions adapter, if suggestions are available // The existence of a suggestions authority is the proxy for "suggestions available here" if (mSearchable.getSuggestAuthority() != null) { - mSuggestionsAdapter = new SuggestionsAdapter(getContext(), mSearchable, - mOutsideDrawablesCache); + mSuggestionsAdapter = new SuggestionsAdapter(getContext(), this, mSearchable, + mOutsideDrawablesCache, mGlobalSearchMode); mSearchAutoComplete.setAdapter(mSuggestionsAdapter); } } @@ -597,7 +608,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS mSearchPlate.getPaddingBottom()); } else { PackageManager pm = getContext().getPackageManager(); - Drawable icon = null; + Drawable icon; try { ActivityInfo info = pm.getActivityInfo(mLaunchComponent, 0); icon = pm.getApplicationIcon(info.applicationInfo); @@ -765,7 +776,24 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS } } - public void afterTextChanged(Editable s) { } + public void afterTextChanged(Editable s) { + if (!mSearchAutoComplete.isPerformingCompletion()) { + // The user changed the query, check if it is a URL and if so change the search + // button in the soft keyboard to the 'Go' button. + int options = (mSearchAutoComplete.getImeOptions() & (~EditorInfo.IME_MASK_ACTION)); + if (Regex.WEB_URL_PATTERN.matcher(mUserQuery).matches()) { + options = options | EditorInfo.IME_ACTION_GO; + } else { + options = options | EditorInfo.IME_ACTION_SEARCH; + } + if (options != mSearchAutoCompleteImeOptions) { + mSearchAutoCompleteImeOptions = options; + mSearchAutoComplete.setImeOptions(options); + // This call is required to update the soft keyboard UI with latest IME flags. + mSearchAutoComplete.setInputType(mSearchAutoComplete.getInputType()); + } + } + } }; /** @@ -902,6 +930,32 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS return voiceIntent; } + /** + * Corrects http/https typo errors in the given url string, and if the protocol specifier was + * not present defaults to http. + * + * @param inUrl URL to check and fix + * @return fixed URL string. + */ + private String fixUrl(String inUrl) { + if (inUrl.startsWith("http://") || inUrl.startsWith("https://")) + return inUrl; + + if (inUrl.startsWith("http:") || inUrl.startsWith("https:")) { + if (inUrl.startsWith("http:/") || inUrl.startsWith("https:/")) { + inUrl = inUrl.replaceFirst("/", "//"); + } else { + inUrl = inUrl.replaceFirst(":", "://"); + } + } + + if (inUrl.indexOf("://") == -1) { + inUrl = "http://" + inUrl; + } + + return inUrl; + } + /** * React to the user typing "enter" or other hardwired keys while typing in the search box. * This handles these special keys while the edit box has focus. @@ -932,7 +986,19 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) { v.cancelLongPress(); - launchQuerySearch(); + + // If this is a url entered by the user and we displayed the 'Go' button which + // the user clicked, launch the url instead of using it as a search query. + if ((mSearchAutoCompleteImeOptions & EditorInfo.IME_MASK_ACTION) + == EditorInfo.IME_ACTION_GO) { + Uri uri = Uri.parse(fixUrl(mSearchAutoComplete.getText().toString())); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + launchIntent(intent); + } else { + // Launch as a regular search. + launchQuerySearch(); + } return true; } if (event.getAction() == KeyEvent.ACTION_DOWN) { @@ -1069,7 +1135,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS */ protected void launchQuerySearch(int actionKey, String actionMsg) { String query = mSearchAutoComplete.getText().toString(); - Intent intent = createIntent(Intent.ACTION_SEARCH, null, query, null, + Intent intent = createIntent(Intent.ACTION_SEARCH, null, null, query, null, actionKey, actionMsg); launchIntent(intent); } @@ -1097,15 +1163,121 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS protected boolean launchSuggestion(int position, int actionKey, String actionMsg) { Cursor c = mSuggestionsAdapter.getCursor(); if ((c != null) && c.moveToPosition(position)) { + Intent intent = createIntentFromSuggestion(c, actionKey, actionMsg); + + // report back about the click + if (mGlobalSearchMode) { + // in global search mode, do it via cursor + mSuggestionsAdapter.callCursorOnClick(c, position); + } else if (intent != null + && mPreviousComponents != null + && !mPreviousComponents.isEmpty()) { + // in-app search (and we have pivoted in as told by mPreviousComponents, + // which is used for keeping track of what we pop back to when we are pivoting into + // in app search.) + reportInAppClickToGlobalSearch(c, intent); + } + + // launch the intent launchIntent(intent); + return true; } return false; } - + + /** + * Report a click from an in app search result back to global search for shortcutting porpoises. + * + * @param c The cursor that is pointing to the clicked position. + * @param intent The intent that will be launched for the click. + */ + private void reportInAppClickToGlobalSearch(Cursor c, Intent intent) { + // for in app search, still tell global search via content provider + Uri uri = getClickReportingUri(); + final ContentValues cv = new ContentValues(); + cv.put(SearchManager.SEARCH_CLICK_REPORT_COLUMN_QUERY, mUserQuery); + final ComponentName source = mSearchable.getSearchActivity(); + cv.put(SearchManager.SEARCH_CLICK_REPORT_COLUMN_COMPONENT, source.flattenToShortString()); + + // grab the intent columns from the intent we created since it has additional + // logic for falling back on the searchable default + cv.put(SearchManager.SUGGEST_COLUMN_INTENT_ACTION, intent.getAction()); + cv.put(SearchManager.SUGGEST_COLUMN_INTENT_DATA, intent.getDataString()); + cv.put(SearchManager.SUGGEST_COLUMN_INTENT_COMPONENT_NAME, + intent.getStringExtra(SearchManager.COMPONENT_NAME_KEY)); + + // ensure the icons will work for global search + cv.put(SearchManager.SUGGEST_COLUMN_ICON_1, + wrapIconForPackage( + source, + getColumnString(c, SearchManager.SUGGEST_COLUMN_ICON_1))); + cv.put(SearchManager.SUGGEST_COLUMN_ICON_2, + wrapIconForPackage( + source, + getColumnString(c, SearchManager.SUGGEST_COLUMN_ICON_2))); + + // the rest can be passed through directly + cv.put(SearchManager.SUGGEST_COLUMN_FORMAT, + getColumnString(c, SearchManager.SUGGEST_COLUMN_FORMAT)); + cv.put(SearchManager.SUGGEST_COLUMN_TEXT_1, + getColumnString(c, SearchManager.SUGGEST_COLUMN_TEXT_1)); + cv.put(SearchManager.SUGGEST_COLUMN_TEXT_2, + getColumnString(c, SearchManager.SUGGEST_COLUMN_TEXT_2)); + cv.put(SearchManager.SUGGEST_COLUMN_QUERY, + getColumnString(c, SearchManager.SUGGEST_COLUMN_QUERY)); + cv.put(SearchManager.SUGGEST_COLUMN_SHORTCUT_ID, + getColumnString(c, SearchManager.SUGGEST_COLUMN_SHORTCUT_ID)); + // note: deliberately omitting background color since it is only for global search + // "more results" entries + mContext.getContentResolver().insert(uri, cv); + } + /** - * Launches an intent. Also dismisses the search dialog if not in global search mode. + * @return A URI appropriate for reporting a click. + */ + private Uri getClickReportingUri() { + Uri.Builder uriBuilder = new Uri.Builder() + .scheme(ContentResolver.SCHEME_CONTENT) + .authority(SearchManager.SEARCH_CLICK_REPORT_AUTHORITY); + + uriBuilder.appendPath(SearchManager.SEARCH_CLICK_REPORT_URI_PATH); + + return uriBuilder + .query("") // TODO: Remove, workaround for a bug in Uri.writeToParcel() + .fragment("") // TODO: Remove, workaround for a bug in Uri.writeToParcel() + .build(); + } + + /** + * Wraps an icon for a particular package. If the icon is a resource id, it is converted into + * an android.resource:// URI. + * + * @param source The source of the icon + * @param icon The icon retrieved from a suggestion column + * @return An icon string appropriate for the package. + */ + private String wrapIconForPackage(ComponentName source, String icon) { + if (icon == null || icon.length() == 0 || "0".equals(icon)) { + // SearchManager specifies that null or zero can be returned to indicate + // no icon. We also allow empty string. + return null; + } else if (!Character.isDigit(icon.charAt(0))){ + return icon; + } else { + String packageName = source.getPackageName(); + return new Uri.Builder() + .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) + .authority(packageName) + .encodedPath(icon) + .toString(); + } + } + + /** + * Launches an intent and dismisses the search dialog (unless the intent + * is one of the special intents that modifies the state of the search dialog). */ private void launchIntent(Intent intent) { if (intent == null) { @@ -1114,9 +1286,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS if (handleSpecialIntent(intent)){ return; } - if (!mGlobalSearchMode) { - dismiss(); - } + dismiss(); getContext().startActivity(intent); } @@ -1130,15 +1300,12 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS if (SearchManager.INTENT_ACTION_CHANGE_SEARCH_SOURCE.equals(action)) { handleChangeSourceIntent(intent); return true; - } else if (SearchManager.INTENT_ACTION_CURSOR_RESPOND.equals(action)) { - handleCursorRespondIntent(intent); - return true; } return false; } /** - * Handles SearchManager#INTENT_ACTION_CHANGE_SOURCE. + * Handles {@link SearchManager#INTENT_ACTION_CHANGE_SEARCH_SOURCE}. */ private void handleChangeSourceIntent(Intent intent) { Uri dataUri = intent.getData(); @@ -1162,18 +1329,16 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS String query = intent.getStringExtra(SearchManager.QUERY); setUserQuery(query); + mSearchAutoComplete.showDropDown(); } - + /** - * Handles {@link SearchManager#INTENT_ACTION_CURSOR_RESPOND}. + * Sets the list item selection in the AutoCompleteTextView's ListView. */ - private void handleCursorRespondIntent(Intent intent) { - Cursor c = mSuggestionsAdapter.getCursor(); - if (c != null) { - c.respond(intent.getExtras()); - } + public void setListSelection(int index) { + mSearchAutoComplete.setListSelection(index); } - + /** * Saves the previous component that was searched, so that we can go * back to it. @@ -1243,6 +1408,12 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS try { // use specific action if supplied, or default action if supplied, or fixed default String action = getColumnString(c, SearchManager.SUGGEST_COLUMN_INTENT_ACTION); + + // some items are display only, or have effect via the cursor respond click reporting. + if (SearchManager.INTENT_ACTION_NONE.equals(action)) { + return null; + } + if (action == null) { action = mSearchable.getSuggestIntentAction(); } @@ -1264,11 +1435,14 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS } Uri dataUri = (data == null) ? null : Uri.parse(data); - String extraData = getColumnString(c, SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA); - + String componentName = getColumnString( + c, SearchManager.SUGGEST_COLUMN_INTENT_COMPONENT_NAME); + String query = getColumnString(c, SearchManager.SUGGEST_COLUMN_QUERY); + String extraData = getColumnString(c, SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA); - return createIntent(action, dataUri, query, extraData, actionKey, actionMsg); + return createIntent(action, dataUri, extraData, query, componentName, actionKey, + actionMsg); } catch (RuntimeException e ) { int rowNum; try { // be really paranoid now @@ -1287,27 +1461,33 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS * * @param action Intent action. * @param data Intent data, or null. - * @param query Intent query, or null. * @param extraData Data for {@link SearchManager#EXTRA_DATA_KEY} or null. + * @param query Intent query, or null. + * @param componentName Data for {@link SearchManager#COMPONENT_NAME_KEY} or null. * @param actionKey The key code of the action key that was pressed, * or {@link KeyEvent#KEYCODE_UNKNOWN} if none. * @param actionMsg The message for the action key that was pressed, * or null if none. * @return The intent. */ - private Intent createIntent(String action, Uri data, String query, String extraData, - int actionKey, String actionMsg) { + private Intent createIntent(String action, Uri data, String extraData, String query, + String componentName, int actionKey, String actionMsg) { // Now build the Intent Intent intent = new Intent(action); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (data != null) { intent.setData(data); } + intent.putExtra(SearchManager.USER_QUERY, mUserQuery); if (query != null) { intent.putExtra(SearchManager.QUERY, query); } if (extraData != null) { intent.putExtra(SearchManager.EXTRA_DATA_KEY, extraData); } + if (componentName != null) { + intent.putExtra(SearchManager.COMPONENT_NAME_KEY, componentName); + } if (mAppSearchData != null) { intent.putExtra(SearchManager.APP_DATA, mAppSearchData); } @@ -1383,20 +1563,22 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS private boolean isEmpty() { return TextUtils.getTrimmedLength(getText()) == 0; } - + /** - * Clears the entered text. + * We override this method to avoid replacing the query box text + * when a suggestion is clicked. */ - private void clear() { - setText(""); + @Override + protected void replaceText(CharSequence text) { } /** - * We override this method to avoid replacing the query box text - * when a suggestion is clicked. + * We override this method to avoid an extra onItemClick being called on the + * drop-down's OnItemClickListener by {@link AutoCompleteTextView#onKeyUp(int, KeyEvent)} + * when an item is clicked with the trackball. */ @Override - protected void replaceText(CharSequence text) { + public void performCompletion() { } /** diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java index 3bf37c3b2b01..e5ba6a4a03c7 100644 --- a/core/java/android/app/SearchManager.java +++ b/core/java/android/app/SearchManager.java @@ -28,6 +28,7 @@ import android.os.Handler; import android.os.RemoteException; import android.os.ServiceManager; import android.server.search.SearchableInfo; +import android.util.Log; import android.view.KeyEvent; import java.util.List; @@ -1108,6 +1109,10 @@ import java.util.List; public class SearchManager implements DialogInterface.OnDismissListener, DialogInterface.OnCancelListener { + + private static final boolean DBG = false; + private static final String TAG = "SearchManager"; + /** * This is a shortcut definition for the default menu key to use for invoking search. * @@ -1130,6 +1135,20 @@ public class SearchManager */ public final static String QUERY = "query"; + /** + * Intent extra data key: Use this key with + * {@link android.content.Intent#getStringExtra + * content.Intent.getStringExtra()} + * to obtain the query string typed in by the user. + * This may be different from the value of {@link #QUERY} + * if the intent is the result of selecting a suggestion. + * In that case, {@link #QUERY} will contain the value of + * {@link #SUGGEST_COLUMN_QUERY} for the suggestion, and + * {@link #USER_QUERY} will contain the string typed by the + * user. + */ + public final static String USER_QUERY = "user_query"; + /** * Intent extra data key: Use this key with Intent.ACTION_SEARCH and * {@link android.content.Intent#getBundleExtra @@ -1148,7 +1167,7 @@ public class SearchManager * @hide */ public final static String SOURCE = "source"; - + /** * Intent extra data key: Use this key with Intent.ACTION_SEARCH and * {@link android.content.Intent#getIntExtra content.Intent.getIntExtra()} @@ -1159,13 +1178,67 @@ public class SearchManager */ public final static String ACTION_KEY = "action_key"; + /** + * Intent component name key: This key will be used for the extra populated by the + * {@link #SUGGEST_COLUMN_INTENT_COMPONENT_NAME} column. + * + * {@hide} + */ + public final static String COMPONENT_NAME_KEY = "intent_component_name_key"; + /** * Intent extra data key: This key will be used for the extra populated by the * {@link #SUGGEST_COLUMN_INTENT_EXTRA_DATA} column. + * * {@hide} */ public final static String EXTRA_DATA_KEY = "intent_extra_data_key"; - + + /** + * Defines the constants used in the communication between {@link android.app.SearchDialog} and + * the global search provider via {@link Cursor#respond(android.os.Bundle)}. + * + * @hide + */ + public static class DialogCursorProtocol { + + /** + * The sent bundle will contain this integer key, with a value set to one of the events + * below. + */ + public final static String METHOD = "DialogCursorProtocol.method"; + + /** + * After data has been refreshed. + */ + public final static int POST_REFRESH = 0; + public final static String POST_REFRESH_RECEIVE_ISPENDING + = "DialogCursorProtocol.POST_REFRESH.isPending"; + public final static String POST_REFRESH_RECEIVE_DISPLAY_NOTIFY + = "DialogCursorProtocol.POST_REFRESH.displayNotify"; + + /** + * Just before closing the cursor. + */ + public final static int PRE_CLOSE = 1; + public final static String PRE_CLOSE_SEND_MAX_DISPLAY_POS + = "DialogCursorProtocol.PRE_CLOSE.sendDisplayPosition"; + + /** + * When a position has been clicked. + */ + public final static int CLICK = 2; + public final static String CLICK_SEND_POSITION + = "DialogCursorProtocol.CLICK.sendPosition"; + public final static String CLICK_RECEIVE_SELECTED_POS + = "DialogCursorProtocol.CLICK.receiveSelectedPosition"; + + /** + * When the threshold received in {@link #POST_REFRESH_RECEIVE_DISPLAY_NOTIFY} is displayed. + */ + public final static int THRESH_HIT = 3; + } + /** * Intent extra data key: Use this key with Intent.ACTION_SEARCH and * {@link android.content.Intent#getStringExtra content.Intent.getStringExtra()} @@ -1210,6 +1283,41 @@ public class SearchManager */ public final static String SHORTCUT_MIME_TYPE = "vnd.android.cursor.item/vnd.android.search.suggest"; + + + /** + * The authority of the provider to report clicks to when a click is detected after pivoting + * into a specific app's search from global search. + * + * In addition to the columns below, the suggestion columns are used to pass along the full + * suggestion so it can be shortcutted. + * + * @hide + */ + public final static String SEARCH_CLICK_REPORT_AUTHORITY = + "com.android.globalsearch.stats"; + + /** + * The path the write goes to. + * + * @hide + */ + public final static String SEARCH_CLICK_REPORT_URI_PATH = "click"; + + /** + * The column storing the query for the click. + * + * @hide + */ + public final static String SEARCH_CLICK_REPORT_COLUMN_QUERY = "query"; + + /** + * The column storing the component name of the application that was pivoted into. + * + * @hide + */ + public final static String SEARCH_CLICK_REPORT_COLUMN_COMPONENT = "component"; + /** * Column name for suggestions cursor. Unused - can be null or column can be omitted. */ @@ -1257,28 +1365,6 @@ public class SearchManager * for more information on these schemes. */ public final static String SUGGEST_COLUMN_ICON_2 = "suggest_icon_2"; - /** - * Column name for suggestions cursor. Optional. If your cursor includes this column, - * then all suggestions will be provided in a format that includes space for two small icons, - * one at the left and one at the right of each suggestion. The data in the column must - * be a blob that contains a bitmap. - * - * This column overrides any icon provided in the {@link #SUGGEST_COLUMN_ICON_1} column. - * - * @hide - */ - public final static String SUGGEST_COLUMN_ICON_1_BITMAP = "suggest_icon_1_bitmap"; - /** - * Column name for suggestions cursor. Optional. If your cursor includes this column, - * then all suggestions will be provided in a format that includes space for two small icons, - * one at the left and one at the right of each suggestion. The data in the column must - * be a blob that contains a bitmap. - * - * This column overrides any icon provided in the {@link #SUGGEST_COLUMN_ICON_2} column. - * - * @hide - */ - public final static String SUGGEST_COLUMN_ICON_2_BITMAP = "suggest_icon_2_bitmap"; /** * Column name for suggestions cursor. Optional. If this column exists and * this element exists at the given row, this is the action that will be used when @@ -1299,14 +1385,25 @@ public class SearchManager * it is more efficient to specify it using XML metadata and omit it from the cursor. */ public final static String SUGGEST_COLUMN_INTENT_DATA = "suggest_intent_data"; + /** + * Column name for suggestions cursor. Optional. If this column exists and + * this element exists at the given row, this is the data that will be used when + * forming the suggestion's intent. If not provided, the Intent's extra data field will be null. + * This column allows suggestions to provide additional arbitrary data which will be included as + * an extra under the key EXTRA_DATA_KEY. + * + * @hide Pending API council approval. + */ + public final static String SUGGEST_COLUMN_INTENT_EXTRA_DATA = "suggest_intent_extra_data"; /** * Column name for suggestions cursor. Optional. This column allows suggestions * to provide additional arbitrary data which will be included as an extra under the key - * {@link #EXTRA_DATA_KEY}. - * - * @hide pending API council approval + * {@link #COMPONENT_NAME_KEY}. For use by the global search system only - if other providers + * attempt to use this column, the value will be overwritten by global search. + * + * @hide */ - public final static String SUGGEST_COLUMN_INTENT_EXTRA_DATA = "suggest_intent_extra_data"; + public final static String SUGGEST_COLUMN_INTENT_COMPONENT_NAME = "suggest_intent_component"; /** * Column name for suggestions cursor. Optional. If this column exists and * this element exists at the given row, then "/" and this value will be appended to the data @@ -1334,6 +1431,25 @@ public class SearchManager */ public final static String SUGGEST_COLUMN_SHORTCUT_ID = "suggest_shortcut_id"; + /** + * Column name for suggestions cursor. Optional. This column is used to specify the + * cursor item's background color if it needs a non-default background color. A non-zero value + * indicates a valid background color to override the default. + * + * @hide For internal use, not part of the public API. + */ + public final static String SUGGEST_COLUMN_BACKGROUND_COLOR = "suggest_background_color"; + + /** + * Column name for suggestions cursor. Optional. This column is used to specify + * that a spinner should be shown in lieu of an icon2 while the shortcut of this suggestion + * is being refreshed. + * + * @hide Pending API council approval. + */ + public final static String SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING = + "suggest_spinner_while_refreshing"; + /** * Column value for suggestion column {@link #SUGGEST_COLUMN_SHORTCUT_ID} when a suggestion * should not be stored as a shortcut in global search. @@ -1362,21 +1478,7 @@ public class SearchManager */ public final static String INTENT_ACTION_CHANGE_SEARCH_SOURCE = "android.search.action.CHANGE_SEARCH_SOURCE"; - - /** - * If a suggestion has this value in {@link #SUGGEST_COLUMN_INTENT_ACTION}, - * the search dialog will call {@link Cursor#respond(Bundle)} when the - * suggestion is clicked. - * - * The {@link Bundle} argument will be constructed - * in the same way as the "extra" bundle included in an Intent constructed - * from the suggestion. - * - * @hide Pending API council approval. - */ - public final static String INTENT_ACTION_CURSOR_RESPOND - = "android.search.action.CURSOR_RESPOND"; - + /** * Intent action for finding the global search activity. * The global search provider should handle this intent. @@ -1395,22 +1497,54 @@ public class SearchManager public final static String INTENT_ACTION_SEARCH_SETTINGS = "android.search.action.SEARCH_SETTINGS"; + /** + * Intent action for starting a web search provider's settings activity. + * Web search providers should handle this intent if they have provider-specific + * settings to implement. + * + * @hide Pending API council approval. + */ + public final static String INTENT_ACTION_WEB_SEARCH_SETTINGS + = "android.search.action.WEB_SEARCH_SETTINGS"; + + /** + * Intent action broadcasted to inform that the searchables list or default have changed. + * Components should handle this intent if they cache any searchable data and wish to stay + * up to date on changes. + * + * @hide Pending API council approval. + */ + public final static String INTENT_ACTION_SEARCHABLES_CHANGED + = "android.search.action.SEARCHABLES_CHANGED"; + + /** + * If a suggestion has this value in {@link #SUGGEST_COLUMN_INTENT_ACTION}, + * the search dialog will take no action. + * + * @hide + */ + public final static String INTENT_ACTION_NONE = "android.search.action.ZILCH"; + /** * Reference to the shared system search service. */ - private static ISearchManager sService = getSearchManagerService(); + private static ISearchManager mService; private final Context mContext; - private final Handler mHandler; - - private SearchDialog mSearchDialog; - - private OnDismissListener mDismissListener = null; - private OnCancelListener mCancelListener = null; + + // package private since they are used by the inner class SearchManagerCallback + /* package */ boolean mIsShowing = false; + /* package */ final Handler mHandler; + /* package */ OnDismissListener mDismissListener = null; + /* package */ OnCancelListener mCancelListener = null; + + private final SearchManagerCallback mSearchManagerCallback = new SearchManagerCallback(); /*package*/ SearchManager(Context context, Handler handler) { mContext = context; mHandler = handler; + mService = ISearchManager.Stub.asInterface( + ServiceManager.getService(Context.SEARCH_SERVICE)); } /** @@ -1458,17 +1592,16 @@ public class SearchManager ComponentName launchActivity, Bundle appSearchData, boolean globalSearch) { - - if (mSearchDialog == null) { - mSearchDialog = new SearchDialog(mContext); + if (DBG) debug("startSearch(), mIsShowing=" + mIsShowing); + if (mIsShowing) return; + try { + mIsShowing = true; + // activate the search manager and start it up! + mService.startSearch(initialQuery, selectInitialQuery, launchActivity, appSearchData, + globalSearch, mSearchManagerCallback); + } catch (RemoteException ex) { + Log.e(TAG, "startSearch() failed: " + ex); } - - // activate the search manager and start it up! - mSearchDialog.show(initialQuery, selectInitialQuery, launchActivity, appSearchData, - globalSearch); - - mSearchDialog.setOnCancelListener(this); - mSearchDialog.setOnDismissListener(this); } /** @@ -1482,9 +1615,16 @@ public class SearchManager * * @see #startSearch */ - public void stopSearch() { - if (mSearchDialog != null) { - mSearchDialog.cancel(); + public void stopSearch() { + if (DBG) debug("stopSearch(), mIsShowing=" + mIsShowing); + if (!mIsShowing) return; + try { + mService.stopSearch(); + // onDismiss will also clear this, but we do it here too since onDismiss() is + // called asynchronously. + mIsShowing = false; + } catch (RemoteException ex) { + Log.e(TAG, "stopSearch() failed: " + ex); } } @@ -1497,33 +1637,33 @@ public class SearchManager * * @hide */ - public boolean isVisible() { - if (mSearchDialog != null) { - return mSearchDialog.isShowing(); - } - return false; + public boolean isVisible() { + if (DBG) debug("isVisible(), mIsShowing=" + mIsShowing); + return mIsShowing; } - + /** - * See {@link #setOnDismissListener} for configuring your activity to monitor search UI state. + * See {@link SearchManager#setOnDismissListener} for configuring your activity to monitor + * search UI state. */ public interface OnDismissListener { /** - * This method will be called when the search UI is dismissed. To make use if it, you must - * implement this method in your activity, and call {@link #setOnDismissListener} to - * register it. + * This method will be called when the search UI is dismissed. To make use of it, you must + * implement this method in your activity, and call + * {@link SearchManager#setOnDismissListener} to register it. */ public void onDismiss(); } /** - * See {@link #setOnCancelListener} for configuring your activity to monitor search UI state. + * See {@link SearchManager#setOnCancelListener} for configuring your activity to monitor + * search UI state. */ public interface OnCancelListener { /** * This method will be called when the search UI is canceled. To make use if it, you must - * implement this method in your activity, and call {@link #setOnCancelListener} to - * register it. + * implement this method in your activity, and call + * {@link SearchManager#setOnCancelListener} to register it. */ public void onCancel(); } @@ -1536,84 +1676,112 @@ public class SearchManager public void setOnDismissListener(final OnDismissListener listener) { mDismissListener = listener; } - - /** - * The callback from the search dialog when dismissed - * @hide - */ - public void onDismiss(DialogInterface dialog) { - if (dialog == mSearchDialog) { - if (mDismissListener != null) { - mDismissListener.onDismiss(); - } - } - } /** * Set or clear the callback that will be invoked whenever the search UI is canceled. * * @param listener The {@link OnCancelListener} to use, or null. */ - public void setOnCancelListener(final OnCancelListener listener) { + public void setOnCancelListener(OnCancelListener listener) { mCancelListener = listener; } - - - /** - * The callback from the search dialog when canceled - * @hide - */ - public void onCancel(DialogInterface dialog) { - if (dialog == mSearchDialog) { - if (mCancelListener != null) { - mCancelListener.onCancel(); + + private class SearchManagerCallback extends ISearchManagerCallback.Stub { + + private final Runnable mFireOnDismiss = new Runnable() { + public void run() { + if (DBG) debug("mFireOnDismiss"); + mIsShowing = false; + if (mDismissListener != null) { + mDismissListener.onDismiss(); + } + } + }; + + private final Runnable mFireOnCancel = new Runnable() { + public void run() { + if (DBG) debug("mFireOnCancel"); + // doesn't need to clear mIsShowing since onDismiss() always gets called too + if (mCancelListener != null) { + mCancelListener.onCancel(); + } } + }; + + public void onDismiss() { + if (DBG) debug("onDismiss()"); + mHandler.post(mFireOnDismiss); + } + + public void onCancel() { + if (DBG) debug("onCancel()"); + mHandler.post(mFireOnCancel); } + + } + + // TODO: remove the DialogInterface interfaces from SearchManager. + // This changes the public API, so I'll do it in a separate change. + public void onCancel(DialogInterface dialog) { + throw new UnsupportedOperationException(); + } + public void onDismiss(DialogInterface dialog) { + throw new UnsupportedOperationException(); } /** - * Save instance state so we can recreate after a rotation. - * + * Saves the state of the search UI. + * + * @return A Bundle containing the state of the search dialog, or {@code null} + * if the search UI is not visible. + * * @hide */ - void saveSearchDialog(Bundle outState, String key) { - if (mSearchDialog != null && mSearchDialog.isShowing()) { - Bundle searchDialogState = mSearchDialog.onSaveInstanceState(); - outState.putBundle(key, searchDialogState); + public Bundle saveSearchDialog() { + if (DBG) debug("saveSearchDialog(), mIsShowing=" + mIsShowing); + if (!mIsShowing) return null; + try { + return mService.onSaveInstanceState(); + } catch (RemoteException ex) { + Log.e(TAG, "onSaveInstanceState() failed: " + ex); + return null; } } /** - * Restore instance state after a rotation. - * + * Restores the state of the search dialog. + * + * @param searchDialogState Bundle to read the state from. + * * @hide */ - void restoreSearchDialog(Bundle inState, String key) { - Bundle searchDialogState = inState.getBundle(key); - if (searchDialogState != null) { - if (mSearchDialog == null) { - mSearchDialog = new SearchDialog(mContext); - } - mSearchDialog.onRestoreInstanceState(searchDialogState); + public void restoreSearchDialog(Bundle searchDialogState) { + if (DBG) debug("restoreSearchDialog(" + searchDialogState + ")"); + if (searchDialogState == null) return; + try { + mService.onRestoreInstanceState(searchDialogState); + } catch (RemoteException ex) { + Log.e(TAG, "onRestoreInstanceState() failed: " + ex); } } - + /** - * Hook for updating layout on a rotation - * + * Update the search dialog after a configuration change. + * + * @param newConfig The new configuration. + * * @hide */ - void onConfigurationChanged(Configuration newConfig) { - if (mSearchDialog != null && mSearchDialog.isShowing()) { - mSearchDialog.onConfigurationChanged(newConfig); + public void onConfigurationChanged(Configuration newConfig) { + if (DBG) debug("onConfigurationChanged(" + newConfig + "), mIsShowing=" + mIsShowing); + if (!mIsShowing) return; + try { + mService.onConfigurationChanged(newConfig); + } catch (RemoteException ex) { + Log.e(TAG, "onConfigurationChanged() failed:" + ex); } } - - private static ISearchManager getSearchManagerService() { - return ISearchManager.Stub.asInterface( - ServiceManager.getService(Context.SEARCH_SERVICE)); - } - + /** * Gets information about a searchable activity. This method is static so that it can * be used from non-Activity contexts. @@ -1625,11 +1793,12 @@ public class SearchManager * * @hide because SearchableInfo is not part of the API. */ - public static SearchableInfo getSearchableInfo(ComponentName componentName, + public SearchableInfo getSearchableInfo(ComponentName componentName, boolean globalSearch) { try { - return sService.getSearchableInfo(componentName, globalSearch); - } catch (RemoteException e) { + return mService.getSearchableInfo(componentName, globalSearch); + } catch (RemoteException ex) { + Log.e(TAG, "getSearchableInfo() failed: " + ex); return null; } } @@ -1639,23 +1808,22 @@ public class SearchManager * * @hide because SearchableInfo is not part of the API. */ - public static boolean isDefaultSearchable(SearchableInfo searchable) { - SearchableInfo defaultSearchable = SearchManager.getSearchableInfo(null, true); + public boolean isDefaultSearchable(SearchableInfo searchable) { + SearchableInfo defaultSearchable = getSearchableInfo(null, true); return defaultSearchable != null && defaultSearchable.getSearchActivity().equals(searchable.getSearchActivity()); } - + /** - * Gets a cursor with search suggestions. This method is static so that it can - * be used from non-Activity context. + * Gets a cursor with search suggestions. * * @param searchable Information about how to get the suggestions. * @param query The search text entered (so far). - * @return a cursor with suggestions, or null the suggestion query failed. - * + * @return a cursor with suggestions, or null the suggestion query failed. + * * @hide because SearchableInfo is not part of the API. */ - public static Cursor getSuggestions(Context context, SearchableInfo searchable, String query) { + public Cursor getSuggestions(SearchableInfo searchable, String query) { if (searchable == null) { return null; } @@ -1694,7 +1862,7 @@ public class SearchManager .build(); // finally, make the query - return context.getContentResolver().query(uri, null, selection, selArgs, null); + return mContext.getContentResolver().query(uri, null, selection, selArgs, null); } /** @@ -1706,11 +1874,65 @@ public class SearchManager * * @hide because SearchableInfo is not part of the API. */ - public static List getSearchablesInGlobalSearch() { + public List getSearchablesInGlobalSearch() { try { - return sService.getSearchablesInGlobalSearch(); + return mService.getSearchablesInGlobalSearch(); } catch (RemoteException e) { + Log.e(TAG, "getSearchablesInGlobalSearch() failed: " + e); return null; } } + + /** + * Returns a list of the searchable activities that handle web searches. + * + * @return a list of all searchable activities that handle + * {@link android.content.Intent#ACTION_WEB_SEARCH}. + * + * @hide because SearchableInfo is not part of the API. + */ + public List getSearchablesForWebSearch() { + try { + return mService.getSearchablesForWebSearch(); + } catch (RemoteException e) { + Log.e(TAG, "getSearchablesForWebSearch() failed: " + e); + return null; + } + } + + /** + * Returns the default searchable activity for web searches. + * + * @return searchable information for the activity handling web searches by default. + * + * @hide because SearchableInfo is not part of the API. + */ + public SearchableInfo getDefaultSearchableForWebSearch() { + try { + return mService.getDefaultSearchableForWebSearch(); + } catch (RemoteException e) { + Log.e(TAG, "getDefaultSearchableForWebSearch() failed: " + e); + return null; + } + } + + /** + * Sets the default searchable activity for web searches. + * + * @param component Name of the component to set as default activity for web searches. + * + * @hide + */ + public void setDefaultWebSearch(ComponentName component) { + try { + mService.setDefaultWebSearch(component); + } catch (RemoteException e) { + Log.e(TAG, "setDefaultWebSearch() failed: " + e); + } + } + + private static void debug(String msg) { + Thread thread = Thread.currentThread(); + Log.d(TAG, msg + " (" + thread.getName() + "-" + thread.getId() + ")"); + } } diff --git a/core/java/android/app/SuggestionsAdapter.java b/core/java/android/app/SuggestionsAdapter.java index 6a02fc930a1c..49c94d12f8d0 100644 --- a/core/java/android/app/SuggestionsAdapter.java +++ b/core/java/android/app/SuggestionsAdapter.java @@ -20,62 +20,103 @@ import android.content.ContentResolver; import android.content.Context; import android.content.res.Resources.NotFoundException; import android.database.Cursor; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; +import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.os.Bundle; import android.server.search.SearchableInfo; import android.text.Html; import android.text.TextUtils; +import android.util.DisplayMetrics; import android.util.Log; +import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; -import android.widget.CursorAdapter; +import android.widget.AbsListView; import android.widget.ImageView; import android.widget.ResourceCursorAdapter; import android.widget.TextView; +import static android.app.SearchManager.DialogCursorProtocol; + import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; import java.util.WeakHashMap; /** * Provides the contents for the suggestion drop-down list.in {@link SearchDialog}. - * + * * @hide */ class SuggestionsAdapter extends ResourceCursorAdapter { + private static final boolean DBG = false; private static final String LOG_TAG = "SuggestionsAdapter"; - + + private SearchManager mSearchManager; + private SearchDialog mSearchDialog; private SearchableInfo mSearchable; private Context mProviderContext; private WeakHashMap mOutsideDrawablesCache; + private boolean mGlobalSearchMode; - // Cached column indexes, updated when the cursor changes. + // Cached column indexes, updated when the cursor changes. private int mFormatCol; private int mText1Col; private int mText2Col; private int mIconName1Col; private int mIconName2Col; - private int mIconBitmap1Col; - private int mIconBitmap2Col; - - public SuggestionsAdapter(Context context, SearchableInfo searchable, - WeakHashMap outsideDrawablesCache) { + private int mBackgroundColorCol; + + // This value is stored in SuggestionsAdapter by the SearchDialog to indicate whether + // a particular list item should be selected upon the next call to notifyDataSetChanged. + // This is used to indicate the index of the "More results..." list item so that when + // the data set changes after a click of "More results...", we can correctly tell the + // ListView to scroll to the right line item. It gets reset to NONE every time it + // is consumed. + private int mListItemToSelect = NONE; + static final int NONE = -1; + + // holds the maximum position that has been displayed to the user + int mMaxDisplayed = NONE; + + // holds the position that, when displayed, should result in notifying the cursor + int mDisplayNotifyPos = NONE; + + private final Runnable mStartSpinnerRunnable; + private final Runnable mStopSpinnerRunnable; + + public SuggestionsAdapter(Context context, SearchDialog searchDialog, SearchableInfo searchable, + WeakHashMap outsideDrawablesCache, boolean globalSearchMode) { super(context, com.android.internal.R.layout.search_dropdown_item_icons_2line, null, // no initial cursor true); // auto-requery + mSearchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE); + mSearchDialog = searchDialog; mSearchable = searchable; - + // set up provider resources (gives us icons, etc.) Context activityContext = mSearchable.getActivityContext(mContext); mProviderContext = mSearchable.getProviderContext(mContext, activityContext); - + mOutsideDrawablesCache = outsideDrawablesCache; + mGlobalSearchMode = globalSearchMode; + + mStartSpinnerRunnable = new Runnable() { + public void run() { + mSearchDialog.setWorking(true); + } + }; + + mStopSpinnerRunnable = new Runnable() { + public void run() { + mSearchDialog.setWorking(false); + } + }; } - + /** * Overridden to always return false, since we cannot be sure that * suggestion sources return stable IDs. @@ -94,20 +135,41 @@ class SuggestionsAdapter extends ResourceCursorAdapter { public Cursor runQueryOnBackgroundThread(CharSequence constraint) { if (DBG) Log.d(LOG_TAG, "runQueryOnBackgroundThread(" + constraint + ")"); String query = (constraint == null) ? "" : constraint.toString(); + if (!mGlobalSearchMode) { + /** + * for in app search we show the progress spinner until the cursor is returned with + * the results. for global search we manage the progress bar using + * {@link DialogCursorProtocol#POST_REFRESH_RECEIVE_ISPENDING}. + */ + mSearchDialog.getWindow().getDecorView().post(mStartSpinnerRunnable); + } try { - return SearchManager.getSuggestions(mContext, mSearchable, query); + final Cursor cursor = mSearchManager.getSuggestions(mSearchable, query); + // trigger fill window so the spinner stays up until the results are copied over and + // closer to being ready + if (!mGlobalSearchMode && cursor != null) cursor.getCount(); + return cursor; } catch (RuntimeException e) { Log.w(LOG_TAG, "Search suggestions query threw an exception.", e); return null; + } finally { + if (!mGlobalSearchMode) { + mSearchDialog.getWindow().getDecorView().post(mStopSpinnerRunnable); + } } } - + /** * Cache columns. */ @Override public void changeCursor(Cursor c) { if (DBG) Log.d(LOG_TAG, "changeCursor(" + c + ")"); + + if (mCursor != null) { + callCursorPreClose(mCursor); + } + super.changeCursor(c); if (c != null) { mFormatCol = c.getColumnIndex(SearchManager.SUGGEST_COLUMN_FORMAT); @@ -115,21 +177,86 @@ class SuggestionsAdapter extends ResourceCursorAdapter { mText2Col = c.getColumnIndex(SearchManager.SUGGEST_COLUMN_TEXT_2); mIconName1Col = c.getColumnIndex(SearchManager.SUGGEST_COLUMN_ICON_1); mIconName2Col = c.getColumnIndex(SearchManager.SUGGEST_COLUMN_ICON_2); - mIconBitmap1Col = c.getColumnIndex(SearchManager.SUGGEST_COLUMN_ICON_1_BITMAP); - mIconBitmap2Col = c.getColumnIndex(SearchManager.SUGGEST_COLUMN_ICON_2_BITMAP); + mBackgroundColorCol = c.getColumnIndex(SearchManager.SUGGEST_COLUMN_BACKGROUND_COLOR); + } + } + + /** + * Handle sending and receiving information associated with + * {@link DialogCursorProtocol#PRE_CLOSE}. + * + * @param cursor The cursor to call. + */ + private void callCursorPreClose(Cursor cursor) { + if (!mGlobalSearchMode) return; + final Bundle request = new Bundle(); + request.putInt(DialogCursorProtocol.METHOD, DialogCursorProtocol.PRE_CLOSE); + request.putInt(DialogCursorProtocol.PRE_CLOSE_SEND_MAX_DISPLAY_POS, mMaxDisplayed); + final Bundle response = cursor.respond(request); + + mMaxDisplayed = -1; + } + + @Override + public void notifyDataSetChanged() { + if (DBG) Log.d(LOG_TAG, "notifyDataSetChanged"); + super.notifyDataSetChanged(); + + callCursorPostRefresh(mCursor); + + // look out for the pending item we are supposed to scroll to + if (mListItemToSelect != NONE) { + mSearchDialog.setListSelection(mListItemToSelect); + mListItemToSelect = NONE; } } - + + /** + * Handle sending and receiving information associated with + * {@link DialogCursorProtocol#POST_REFRESH}. + * + * @param cursor The cursor to call. + */ + private void callCursorPostRefresh(Cursor cursor) { + if (!mGlobalSearchMode) return; + final Bundle request = new Bundle(); + request.putInt(DialogCursorProtocol.METHOD, DialogCursorProtocol.POST_REFRESH); + final Bundle response = cursor.respond(request); + + mSearchDialog.setWorking( + response.getBoolean(DialogCursorProtocol.POST_REFRESH_RECEIVE_ISPENDING, false)); + + mDisplayNotifyPos = + response.getInt(DialogCursorProtocol.POST_REFRESH_RECEIVE_DISPLAY_NOTIFY, -1); + } + + /** + * Tell the cursor which position was clicked, handling sending and receiving information + * associated with {@link DialogCursorProtocol#CLICK}. + * + * @param cursor The cursor + * @param position The position that was clicked. + */ + void callCursorOnClick(Cursor cursor, int position) { + if (!mGlobalSearchMode) return; + final Bundle request = new Bundle(1); + request.putInt(DialogCursorProtocol.METHOD, DialogCursorProtocol.CLICK); + request.putInt(DialogCursorProtocol.CLICK_SEND_POSITION, position); + final Bundle response = cursor.respond(request); + mListItemToSelect = response.getInt( + DialogCursorProtocol.CLICK_RECEIVE_SELECTED_POS, SuggestionsAdapter.NONE); + } + /** * Tags the view with cached child view look-ups. */ @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { - View v = super.newView(context, cursor, parent); + View v = new SuggestionItemView(context, cursor); v.setTag(new ChildViewCache(v)); return v; } - + /** * Cache of the child views of drop-drown list items, to avoid looking up the children * each time the contents of a list item are changed. @@ -139,7 +266,7 @@ class SuggestionsAdapter extends ResourceCursorAdapter { public final TextView mText2; public final ImageView mIcon1; public final ImageView mIcon2; - + public ChildViewCache(View v) { mText1 = (TextView) v.findViewById(com.android.internal.R.id.text1); mText2 = (TextView) v.findViewById(com.android.internal.R.id.text2); @@ -147,21 +274,38 @@ class SuggestionsAdapter extends ResourceCursorAdapter { mIcon2 = (ImageView) v.findViewById(com.android.internal.R.id.icon2); } } - + @Override public void bindView(View view, Context context, Cursor cursor) { ChildViewCache views = (ChildViewCache) view.getTag(); - boolean isHtml = false; - if (mFormatCol >= 0) { - String format = cursor.getString(mFormatCol); - isHtml = "html".equals(format); + final int pos = cursor.getPosition(); + + // update the maximum position displayed since last refresh + if (pos > mMaxDisplayed) { + mMaxDisplayed = pos; } + + // if the cursor wishes to be notified about this position, send it + if (mGlobalSearchMode && mDisplayNotifyPos != NONE && pos == mDisplayNotifyPos) { + final Bundle request = new Bundle(); + request.putInt(DialogCursorProtocol.METHOD, DialogCursorProtocol.THRESH_HIT); + mCursor.respond(request); + mDisplayNotifyPos = NONE; // only notify the first time + } + + int backgroundColor = 0; + if (mBackgroundColorCol != -1) { + backgroundColor = cursor.getInt(mBackgroundColorCol); + } + ((SuggestionItemView)view).setColor(backgroundColor); + + final boolean isHtml = mFormatCol > 0 && "html".equals(cursor.getString(mFormatCol)); setViewText(cursor, views.mText1, mText1Col, isHtml); setViewText(cursor, views.mText2, mText2Col, isHtml); - setViewIcon(cursor, views.mIcon1, mIconBitmap1Col, mIconName1Col); - setViewIcon(cursor, views.mIcon2, mIconBitmap2Col, mIconName2Col); + setViewIcon(cursor, views.mIcon1, mIconName1Col); + setViewIcon(cursor, views.mIcon2, mIconName2Col); } - + private void setViewText(Cursor cursor, TextView v, int textCol, boolean isHtml) { if (v == null) { return; @@ -173,49 +317,46 @@ class SuggestionsAdapter extends ResourceCursorAdapter { } // Set the text even if it's null, since we need to clear any previous text. v.setText(text); - + if (TextUtils.isEmpty(text)) { v.setVisibility(View.GONE); } else { v.setVisibility(View.VISIBLE); } } - - private void setViewIcon(Cursor cursor, ImageView v, int iconBitmapCol, int iconNameCol) { + + private void setViewIcon(Cursor cursor, ImageView v, int iconNameCol) { if (v == null) { return; } - Drawable drawable = null; - // First try the bitmap column - if (iconBitmapCol >= 0) { - byte[] data = cursor.getBlob(iconBitmapCol); - if (data != null) { - Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); - if (bitmap != null) { - drawable = new BitmapDrawable(bitmap); - } - } - } - // If there was no bitmap, try the icon resource column. - if (drawable == null && iconNameCol >= 0) { - String value = cursor.getString(iconNameCol); - drawable = getDrawableFromResourceValue(value); + if (iconNameCol < 0) { + return; } + String value = cursor.getString(iconNameCol); + Drawable drawable = getDrawableFromResourceValue(value); // Set the icon even if the drawable is null, since we need to clear any // previous icon. v.setImageDrawable(drawable); - + if (drawable == null) { v.setVisibility(View.GONE); } else { v.setVisibility(View.VISIBLE); + + // This is a hack to get any animated drawables (like a 'working' spinner) + // to animate. You have to setVisible true on an AnimationDrawable to get + // it to start animating, but it must first have been false or else the + // call to setVisible will be ineffective. We need to clear up the story + // about animated drawables in the future, see http://b/1878430. + drawable.setVisible(false, false); + drawable.setVisible(true, false); } } - + /** * Gets the text to show in the query field when a suggestion is selected. - * - * @param cursor The Cursor to read the suggestion data from. The Cursor should already + * + * @param cursor The Cursor to read the suggestion data from. The Cursor should already * be moved to the suggestion that is to be read from. * @return The text to show, or null if the query should not be * changed when selecting this suggestion. @@ -225,36 +366,36 @@ class SuggestionsAdapter extends ResourceCursorAdapter { if (cursor == null) { return null; } - + String query = getColumnString(cursor, SearchManager.SUGGEST_COLUMN_QUERY); if (query != null) { return query; } - + if (mSearchable.shouldRewriteQueryFromData()) { String data = getColumnString(cursor, SearchManager.SUGGEST_COLUMN_INTENT_DATA); if (data != null) { return data; } } - + if (mSearchable.shouldRewriteQueryFromText()) { String text1 = getColumnString(cursor, SearchManager.SUGGEST_COLUMN_TEXT_1); if (text1 != null) { return text1; } } - + return null; } - + /** * This method is overridden purely to provide a bit of protection against * flaky content providers. - * + * * @see android.widget.ListAdapter#getView(int, View, ViewGroup) */ - @Override + @Override public View getView(int position, View convertView, ViewGroup parent) { try { return super.getView(position, convertView, parent); @@ -263,28 +404,28 @@ class SuggestionsAdapter extends ResourceCursorAdapter { // Put exception string in item title View v = newView(mContext, mCursor, parent); if (v != null) { - ChildViewCache views = (ChildViewCache) v.getTag(); + ChildViewCache views = (ChildViewCache) v.getTag(); TextView tv = views.mText1; tv.setText(e.toString()); } return v; } } - + /** * Gets a drawable given a value provided by a suggestion provider. - * + * * This value could be just the string value of a resource id * (e.g., "2130837524"), in which case we will try to retrieve a drawable from * the provider's resources. If the value is not an integer, it is - * treated as a Uri and opened with + * treated as a Uri and opened with * {@link ContentResolver#openOutputStream(android.net.Uri, String)}. * * All resources and URIs are read using the suggestion provider's context. * * If the string is not formatted as expected, or no drawable can be found for * the provided value, this method returns null. - * + * * @param drawableId a string like "2130837524", * "android.resource://com.android.alarmclock/2130837524", * or "content://contacts/photos/253". @@ -294,43 +435,58 @@ class SuggestionsAdapter extends ResourceCursorAdapter { if (drawableId == null || drawableId.length() == 0 || "0".equals(drawableId)) { return null; } - + // First, check the cache. Drawable drawable = mOutsideDrawablesCache.get(drawableId); - if (drawable != null) return drawable; + if (drawable != null) { + if (DBG) Log.d(LOG_TAG, "Found icon in cache: " + drawableId); + return drawable; + } try { // Not cached, try using it as a plain resource ID in the provider's context. int resourceId = Integer.parseInt(drawableId); drawable = mProviderContext.getResources().getDrawable(resourceId); + if (DBG) Log.d(LOG_TAG, "Found icon by resource ID: " + drawableId); } catch (NumberFormatException nfe) { // The id was not an integer resource id. // Let the ContentResolver handle content, android.resource and file URIs. try { Uri uri = Uri.parse(drawableId); - drawable = Drawable.createFromStream( - mProviderContext.getContentResolver().openInputStream(uri), - null); + InputStream stream = mProviderContext.getContentResolver().openInputStream(uri); + if (stream != null) { + try { + drawable = Drawable.createFromStream(stream, null); + } finally { + try { + stream.close(); + } catch (IOException ex) { + Log.e(LOG_TAG, "Error closing icon stream for " + uri, ex); + } + } + } + if (DBG) Log.d(LOG_TAG, "Opened icon input stream: " + drawableId); } catch (FileNotFoundException fnfe) { + if (DBG) Log.d(LOG_TAG, "Icon stream not found: " + drawableId); // drawable = null; } - + // If we got a drawable for this resource id, then stick it in the // map so we don't do this lookup again. if (drawable != null) { mOutsideDrawablesCache.put(drawableId, drawable); } } catch (NotFoundException nfe) { - // Resource could not be found + if (DBG) Log.d(LOG_TAG, "Icon resource not found: " + drawableId); // drawable = null; } - + return drawable; } - + /** * Gets the value of a string column by name. - * + * * @param cursor Cursor to read the value from. * @param columnName The name of the column to read. * @return The value of the given column, or null @@ -338,10 +494,75 @@ class SuggestionsAdapter extends ResourceCursorAdapter { */ public static String getColumnString(Cursor cursor, String columnName) { int col = cursor.getColumnIndex(columnName); - if (col == -1) { + if (col == NONE) { return null; } return cursor.getString(col); } + /** + * A parent viewgroup class which holds the actual suggestion item as a child. + * + * The sole purpose of this class is to draw the given background color when the item is in + * normal state and not draw the background color when it is pressed, so that when pressed the + * list view's selection highlight will be displayed properly (if we draw our background it + * draws on top of the list view selection highlight). + */ + private class SuggestionItemView extends ViewGroup { + private int mBackgroundColor; // the background color to draw in normal state. + private View mView; // the suggestion item's view. + + protected SuggestionItemView(Context context, Cursor cursor) { + // Initialize ourselves + super(context); + mBackgroundColor = 0; // transparent by default. + + // For our layout use the default list item height from the current theme. + TypedValue lineHeight = new TypedValue(); + context.getTheme().resolveAttribute( + com.android.internal.R.attr.searchResultListItemHeight, lineHeight, true); + DisplayMetrics metrics = new DisplayMetrics(); + metrics.setToDefaults(); + AbsListView.LayoutParams layout = new AbsListView.LayoutParams( + AbsListView.LayoutParams.FILL_PARENT, + (int)lineHeight.getDimension(metrics)); + + setLayoutParams(layout); + + // Initialize the child view + mView = SuggestionsAdapter.super.newView(context, cursor, this); + if (mView != null) { + addView(mView, layout.width, layout.height); + mView.setVisibility(View.VISIBLE); + } + } + + public void setColor(int backgroundColor) { + mBackgroundColor = backgroundColor; + } + + @Override + public void dispatchDraw(Canvas canvas) { + if (mBackgroundColor != 0 && !isPressed() && !isSelected()) { + canvas.drawColor(mBackgroundColor); + } + super.dispatchDraw(canvas); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + if (mView != null) { + mView.measure(widthMeasureSpec, heightMeasureSpec); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + if (mView != null) { + mView.layout(0, 0, mView.getMeasuredWidth(), mView.getMeasuredHeight()); + } + } + } + } diff --git a/core/java/android/appwidget/AppWidgetHost.java b/core/java/android/appwidget/AppWidgetHost.java index 10c2b02d4c35..03e8623a63de 100644 --- a/core/java/android/appwidget/AppWidgetHost.java +++ b/core/java/android/appwidget/AppWidgetHost.java @@ -26,7 +26,6 @@ import android.widget.RemoteViews; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import com.android.internal.appwidget.IAppWidgetHost; import com.android.internal.appwidget.IAppWidgetService; @@ -40,7 +39,7 @@ public class AppWidgetHost { static final int HANDLE_UPDATE = 1; static final int HANDLE_PROVIDER_CHANGED = 2; - static Object sServiceLock = new Object(); + final static Object sServiceLock = new Object(); static IAppWidgetService sService; Context mContext; @@ -85,7 +84,7 @@ public class AppWidgetHost { int mHostId; Callbacks mCallbacks = new Callbacks(); - HashMap mViews = new HashMap(); + final HashMap mViews = new HashMap(); public AppWidgetHost(Context context, int hostId) { mContext = context; @@ -104,8 +103,8 @@ public class AppWidgetHost { * becomes visible, i.e. from onStart() in your Activity. */ public void startListening() { - int[] updatedIds = null; - ArrayList updatedViews = new ArrayList(); + int[] updatedIds; + ArrayList updatedViews = new ArrayList(); try { if (mPackageName == null) { @@ -209,7 +208,7 @@ public class AppWidgetHost { synchronized (mViews) { mViews.put(appWidgetId, view); } - RemoteViews views = null; + RemoteViews views; try { views = sService.getAppWidgetViews(appWidgetId); } catch (RemoteException e) { @@ -231,6 +230,7 @@ public class AppWidgetHost { /** * Called when the AppWidget provider for a AppWidget has been upgraded to a new apk. */ + @SuppressWarnings({"UnusedDeclaration"}) protected void onProviderChanged(int appWidgetId, AppWidgetProviderInfo appWidget) { } diff --git a/core/java/android/appwidget/AppWidgetHostView.java b/core/java/android/appwidget/AppWidgetHostView.java index be0f96e8ab6a..62d92674d864 100644 --- a/core/java/android/appwidget/AppWidgetHostView.java +++ b/core/java/android/appwidget/AppWidgetHostView.java @@ -22,16 +22,12 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; -import android.os.Handler; -import android.os.Message; import android.os.SystemClock; -import android.util.Config; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.animation.Animation; import android.widget.FrameLayout; import android.widget.RemoteViews; import android.widget.TextView; @@ -86,6 +82,7 @@ public class AppWidgetHostView extends FrameLayout { * @param animationIn Resource ID of in animation to use * @param animationOut Resource ID of out animation to use */ + @SuppressWarnings({"UnusedDeclaration"}) public AppWidgetHostView(Context context, int animationIn, int animationOut) { super(context); mContext = context; @@ -272,7 +269,7 @@ public class AppWidgetHostView extends FrameLayout { try { if (mInfo != null) { Context theirContext = mContext.createPackageContext( - mInfo.provider.getPackageName(), 0 /* no flags */); + mInfo.provider.getPackageName(), Context.CONTEXT_RESTRICTED); LayoutInflater inflater = (LayoutInflater) theirContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater = inflater.cloneInContext(theirContext); diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java index eca04b311330..3660001b1968 100644 --- a/core/java/android/appwidget/AppWidgetManager.java +++ b/core/java/android/appwidget/AppWidgetManager.java @@ -21,7 +21,9 @@ import android.content.Context; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; +import android.util.DisplayMetrics; import android.util.Log; +import android.util.TypedValue; import android.widget.RemoteViews; import com.android.internal.appwidget.IAppWidgetService; @@ -187,6 +189,8 @@ public class AppWidgetManager { Context mContext; + private DisplayMetrics mDisplayMetrics; + /** * Get the AppWidgetManager instance to use for the supplied {@link android.content.Context * Context} object. @@ -213,6 +217,7 @@ public class AppWidgetManager { private AppWidgetManager(Context context) { mContext = context; + mDisplayMetrics = context.getResources().getDisplayMetrics(); } /** @@ -292,7 +297,15 @@ public class AppWidgetManager { */ public AppWidgetProviderInfo getAppWidgetInfo(int appWidgetId) { try { - return sService.getAppWidgetInfo(appWidgetId); + AppWidgetProviderInfo info = sService.getAppWidgetInfo(appWidgetId); + if (info != null) { + // Converting complex to dp. + info.minWidth = + TypedValue.complexToDimensionPixelSize(info.minWidth, mDisplayMetrics); + info.minHeight = + TypedValue.complexToDimensionPixelSize(info.minHeight, mDisplayMetrics); + } + return info; } catch (RemoteException e) { throw new RuntimeException("system server dead?", e); diff --git a/core/java/android/backup/AbsoluteFileBackupHelper.java b/core/java/android/backup/AbsoluteFileBackupHelper.java new file mode 100644 index 000000000000..ab246754b5af --- /dev/null +++ b/core/java/android/backup/AbsoluteFileBackupHelper.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.backup; + +import android.content.Context; +import android.os.ParcelFileDescriptor; +import android.util.Log; + +import java.io.File; +import java.io.FileDescriptor; + +/** + * Like FileBackupHelper, but takes absolute paths for the files instead of + * subpaths of getFilesDir() + * + * @hide + */ +public class AbsoluteFileBackupHelper extends FileBackupHelperBase implements BackupHelper { + private static final String TAG = "AbsoluteFileBackupHelper"; + + Context mContext; + String[] mFiles; + + public AbsoluteFileBackupHelper(Context context, String... files) { + super(context); + + mContext = context; + mFiles = files; + } + + /** + * Based on oldState, determine which of the files from the application's data directory + * need to be backed up, write them to the data stream, and fill in newState with the + * state as it exists now. + */ + public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput data, + ParcelFileDescriptor newState) { + // use the file paths as the keys, too + performBackup_checked(oldState, data, newState, mFiles, mFiles); + } + + public void restoreEntity(BackupDataInputStream data) { + // TODO: turn this off before ship + Log.d(TAG, "got entity '" + data.getKey() + "' size=" + data.size()); + String key = data.getKey(); + if (isKeyInList(key, mFiles)) { + File f = new File(key); + writeFile(f, data); + } + } +} + diff --git a/core/java/android/backup/BackupDataInput.java b/core/java/android/backup/BackupDataInput.java new file mode 100644 index 000000000000..69c206ce1c81 --- /dev/null +++ b/core/java/android/backup/BackupDataInput.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.backup; + +import android.content.Context; + +import java.io.FileDescriptor; +import java.io.IOException; + +/** @hide */ +public class BackupDataInput { + int mBackupReader; + + private EntityHeader mHeader = new EntityHeader(); + private boolean mHeaderReady; + + private static class EntityHeader { + String key; + int dataSize; + } + + public BackupDataInput(FileDescriptor fd) { + if (fd == null) throw new NullPointerException(); + mBackupReader = ctor(fd); + if (mBackupReader == 0) { + throw new RuntimeException("Native initialization failed with fd=" + fd); + } + } + + protected void finalize() throws Throwable { + try { + dtor(mBackupReader); + } finally { + super.finalize(); + } + } + + public boolean readNextHeader() throws IOException { + int result = readNextHeader_native(mBackupReader, mHeader); + if (result == 0) { + // read successfully + mHeaderReady = true; + return true; + } else if (result > 0) { + // done + mHeaderReady = false; + return false; + } else { + // error + mHeaderReady = false; + throw new IOException("result=0x" + Integer.toHexString(result)); + } + } + + public String getKey() { + if (mHeaderReady) { + return mHeader.key; + } else { + throw new IllegalStateException("mHeaderReady=false"); + } + } + + public int getDataSize() { + if (mHeaderReady) { + return mHeader.dataSize; + } else { + throw new IllegalStateException("mHeaderReady=false"); + } + } + + public int readEntityData(byte[] data, int offset, int size) throws IOException { + if (mHeaderReady) { + int result = readEntityData_native(mBackupReader, data, offset, size); + if (result >= 0) { + return result; + } else { + throw new IOException("result=0x" + Integer.toHexString(result)); + } + } else { + throw new IllegalStateException("mHeaderReady=false"); + } + } + + public void skipEntityData() throws IOException { + if (mHeaderReady) { + int result = skipEntityData_native(mBackupReader); + if (result >= 0) { + return; + } else { + throw new IOException("result=0x" + Integer.toHexString(result)); + } + } else { + throw new IllegalStateException("mHeaderReady=false"); + } + } + + private native static int ctor(FileDescriptor fd); + private native static void dtor(int mBackupReader); + + private native int readNextHeader_native(int mBackupReader, EntityHeader entity); + private native int readEntityData_native(int mBackupReader, byte[] data, int offset, int size); + private native int skipEntityData_native(int mBackupReader); +} diff --git a/core/java/android/backup/BackupDataInputStream.java b/core/java/android/backup/BackupDataInputStream.java new file mode 100644 index 000000000000..b705c4c36022 --- /dev/null +++ b/core/java/android/backup/BackupDataInputStream.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.backup; + +import android.util.Log; + +import java.io.InputStream; +import java.io.IOException; + +/** @hide */ +public class BackupDataInputStream extends InputStream { + + String key; + int dataSize; + + BackupDataInput mData; + byte[] mOneByte; + + BackupDataInputStream(BackupDataInput data) { + mData = data; + } + + public int read() throws IOException { + byte[] one = mOneByte; + if (mOneByte == null) { + one = mOneByte = new byte[1]; + } + mData.readEntityData(one, 0, 1); + return one[0]; + } + + public int read(byte[] b, int offset, int size) throws IOException { + return mData.readEntityData(b, offset, size); + } + + public int read(byte[] b) throws IOException { + return mData.readEntityData(b, 0, b.length); + } + + public String getKey() { + return this.key; + } + + public int size() { + return this.dataSize; + } +} + + diff --git a/core/java/android/backup/BackupDataOutput.java b/core/java/android/backup/BackupDataOutput.java index 555494e59524..d29c5ba02f14 100644 --- a/core/java/android/backup/BackupDataOutput.java +++ b/core/java/android/backup/BackupDataOutput.java @@ -19,27 +19,59 @@ package android.backup; import android.content.Context; import java.io.FileDescriptor; +import java.io.IOException; /** @hide */ public class BackupDataOutput { - /* package */ FileDescriptor fd; + int mBackupWriter; public static final int OP_UPDATE = 1; public static final int OP_DELETE = 2; - public BackupDataOutput(Context context, FileDescriptor fd) { - this.fd = fd; + public BackupDataOutput(FileDescriptor fd) { + if (fd == null) throw new NullPointerException(); + mBackupWriter = ctor(fd); + if (mBackupWriter == 0) { + throw new RuntimeException("Native initialization failed with fd=" + fd); + } } - public void close() { - // do we close the fd? + // A dataSize of -1 indicates that the record under this key should be deleted + public int writeEntityHeader(String key, int dataSize) throws IOException { + int result = writeEntityHeader_native(mBackupWriter, key, dataSize); + if (result >= 0) { + return result; + } else { + throw new IOException("result=0x" + Integer.toHexString(result)); + } } - public native void flush(); - public native void write(byte[] buffer); - public native void write(int oneByte); - public native void write(byte[] buffer, int offset, int count); - public native void writeOperation(int op); - public native void writeKey(String key); + public int writeEntityData(byte[] data, int size) throws IOException { + int result = writeEntityData_native(mBackupWriter, data, size); + if (result >= 0) { + return result; + } else { + throw new IOException("result=0x" + Integer.toHexString(result)); + } + } + + public void setKeyPrefix(String keyPrefix) { + setKeyPrefix_native(mBackupWriter, keyPrefix); + } + + protected void finalize() throws Throwable { + try { + dtor(mBackupWriter); + } finally { + super.finalize(); + } + } + + private native static int ctor(FileDescriptor fd); + private native static void dtor(int mBackupWriter); + + private native static int writeEntityHeader_native(int mBackupWriter, String key, int dataSize); + private native static int writeEntityData_native(int mBackupWriter, byte[] data, int size); + private native static void setKeyPrefix_native(int mBackupWriter, String keyPrefix); } diff --git a/core/java/android/backup/BackupHelper.java b/core/java/android/backup/BackupHelper.java new file mode 100644 index 000000000000..3983e28cce39 --- /dev/null +++ b/core/java/android/backup/BackupHelper.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.backup; + +import android.os.ParcelFileDescriptor; + +import java.io.InputStream; + +/** @hide */ +public interface BackupHelper { + /** + * Based on oldState, determine which of the files from the application's data directory + * need to be backed up, write them to the data stream, and fill in newState with the + * state as it exists now. + */ + public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput data, + ParcelFileDescriptor newState); + + /** + * Called by BackupHelperDispatcher to dispatch one entity of data. + *

+ * Do not close the data stream. Do not read more than + * dataSize bytes from data. + */ + public void restoreEntity(BackupDataInputStream data); + + /** + * + */ + public void writeRestoreSnapshot(ParcelFileDescriptor fd); +} + diff --git a/core/java/android/backup/BackupHelperAgent.java b/core/java/android/backup/BackupHelperAgent.java new file mode 100644 index 000000000000..5d0c4a2514db --- /dev/null +++ b/core/java/android/backup/BackupHelperAgent.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2007 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.backup; + +import android.app.BackupAgent; +import android.backup.BackupHelper; +import android.backup.BackupHelperDispatcher; +import android.backup.BackupDataInput; +import android.backup.BackupDataOutput; +import android.os.ParcelFileDescriptor; +import android.util.Log; + +import java.io.IOException; + +/** @hide */ +public class BackupHelperAgent extends BackupAgent { + static final String TAG = "BackupHelperAgent"; + + BackupHelperDispatcher mDispatcher = new BackupHelperDispatcher(); + + @Override + public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, + ParcelFileDescriptor newState) throws IOException { + mDispatcher.performBackup(oldState, data, newState); + } + + @Override + public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) + throws IOException { + mDispatcher.performRestore(data, appVersionCode, newState); + } + + public BackupHelperDispatcher getDispatcher() { + return mDispatcher; + } + + public void addHelper(String keyPrefix, BackupHelper helper) { + mDispatcher.addHelper(keyPrefix, helper); + } +} + + diff --git a/core/java/android/backup/BackupHelperDispatcher.java b/core/java/android/backup/BackupHelperDispatcher.java new file mode 100644 index 000000000000..6ccb83effd45 --- /dev/null +++ b/core/java/android/backup/BackupHelperDispatcher.java @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.backup; + +import android.os.ParcelFileDescriptor; +import android.util.Log; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.FileDescriptor; +import java.util.TreeMap; +import java.util.Map; + +/** @hide */ +public class BackupHelperDispatcher { + private static final String TAG = "BackupHelperDispatcher"; + + private static class Header { + int chunkSize; // not including the header + String keyPrefix; + } + + TreeMap mHelpers = new TreeMap(); + + public BackupHelperDispatcher() { + } + + public void addHelper(String keyPrefix, BackupHelper helper) { + mHelpers.put(keyPrefix, helper); + } + + public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput data, + ParcelFileDescriptor newState) throws IOException { + // First, do the helpers that we've already done, since they're already in the state + // file. + int err; + Header header = new Header(); + TreeMap helpers = (TreeMap)mHelpers.clone(); + FileDescriptor oldStateFD = null; + FileDescriptor newStateFD = newState.getFileDescriptor(); + + if (oldState != null) { + oldStateFD = oldState.getFileDescriptor(); + while ((err = readHeader_native(header, oldStateFD)) >= 0) { + if (err == 0) { + BackupHelper helper = helpers.get(header.keyPrefix); + Log.d(TAG, "handling existing helper '" + header.keyPrefix + "' " + helper); + if (helper != null) { + doOneBackup(oldState, data, newState, header, helper); + helpers.remove(header.keyPrefix); + } else { + skipChunk_native(oldStateFD, header.chunkSize); + } + } + } + } + + // Then go through and do the rest that we haven't done. + for (Map.Entry entry: helpers.entrySet()) { + header.keyPrefix = entry.getKey(); + Log.d(TAG, "handling new helper '" + header.keyPrefix + "'"); + BackupHelper helper = entry.getValue(); + doOneBackup(oldState, data, newState, header, helper); + } + } + + private void doOneBackup(ParcelFileDescriptor oldState, BackupDataOutput data, + ParcelFileDescriptor newState, Header header, BackupHelper helper) + throws IOException { + int err; + FileDescriptor newStateFD = newState.getFileDescriptor(); + + // allocate space for the header in the file + int pos = allocateHeader_native(header, newStateFD); + if (pos < 0) { + throw new IOException("allocateHeader_native failed (error " + pos + ")"); + } + + data.setKeyPrefix(header.keyPrefix); + + // do the backup + helper.performBackup(oldState, data, newState); + + // fill in the header (seeking back to pos). The file pointer will be returned to + // where it was at the end of performBackup. Header.chunkSize will not be filled in. + err = writeHeader_native(header, newStateFD, pos); + if (err != 0) { + throw new IOException("writeHeader_native failed (error " + err + ")"); + } + } + + public void performRestore(BackupDataInput input, int appVersionCode, + ParcelFileDescriptor newState) + throws IOException { + boolean alreadyComplained = false; + + BackupDataInputStream stream = new BackupDataInputStream(input); + while (input.readNextHeader()) { + + String rawKey = input.getKey(); + int pos = rawKey.indexOf(':'); + if (pos > 0) { + String prefix = rawKey.substring(0, pos); + BackupHelper helper = mHelpers.get(prefix); + if (helper != null) { + stream.dataSize = input.getDataSize(); + stream.key = rawKey.substring(pos+1); + helper.restoreEntity(stream); + } else { + if (!alreadyComplained) { + Log.w(TAG, "Couldn't find helper for: '" + rawKey + "'"); + alreadyComplained = true; + } + } + } else { + if (!alreadyComplained) { + Log.w(TAG, "Entity with no prefix: '" + rawKey + "'"); + alreadyComplained = true; + } + } + input.skipEntityData(); // In case they didn't consume the data. + } + + // Write out the state files -- mHelpers is a TreeMap, so the order is well defined. + for (BackupHelper helper: mHelpers.values()) { + helper.writeRestoreSnapshot(newState); + } + } + + private static native int readHeader_native(Header h, FileDescriptor fd); + private static native int skipChunk_native(FileDescriptor fd, int bytesToSkip); + + private static native int allocateHeader_native(Header h, FileDescriptor fd); + private static native int writeHeader_native(Header h, FileDescriptor fd, int pos); +} + diff --git a/core/java/android/backup/BackupManager.java b/core/java/android/backup/BackupManager.java index 6f0b2eef603f..34a1a0c8f2f4 100644 --- a/core/java/android/backup/BackupManager.java +++ b/core/java/android/backup/BackupManager.java @@ -19,6 +19,7 @@ package android.backup; import android.content.Context; import android.os.RemoteException; import android.os.ServiceManager; +import android.util.Log; /** * BackupManager is the interface to the system's backup service. @@ -32,14 +33,24 @@ import android.os.ServiceManager; * until the backup operation actually occurs. * *

The backup operation itself begins with the system launching the - * {@link BackupService} subclass declared in your manifest. See the documentation - * for {@link BackupService} for a detailed description of how the backup then proceeds. + * {@link android.app.BackupAgent} subclass declared in your manifest. See the + * documentation for {@link android.app.BackupAgent} for a detailed description + * of how the backup then proceeds. * * @hide pending API solidification */ public class BackupManager { + private static final String TAG = "BackupManager"; + private Context mContext; - private IBackupManager mService; + private static IBackupManager sService; + + private static void checkServiceBinder() { + if (sService == null) { + sService = IBackupManager.Stub.asInterface( + ServiceManager.getService(Context.BACKUP_SERVICE)); + } + } /** * Constructs a BackupManager object through which the application can @@ -51,19 +62,60 @@ public class BackupManager { */ public BackupManager(Context context) { mContext = context; - mService = IBackupManager.Stub.asInterface( - ServiceManager.getService(Context.BACKUP_SERVICE)); } /** * Notifies the Android backup system that your application wishes to back up * new changes to its data. A backup operation using your application's - * {@link BackupService} subclass will be scheduled when you call this method. + * {@link android.app.BackupAgent} subclass will be scheduled when you call this method. */ public void dataChanged() { - try { - mService.dataChanged(mContext.getPackageName()); - } catch (RemoteException e) { + checkServiceBinder(); + if (sService != null) { + try { + sService.dataChanged(mContext.getPackageName()); + } catch (RemoteException e) { + Log.d(TAG, "dataChanged() couldn't connect"); + } + } + } + + /** + * Convenience method for callers who need to indicate that some other package + * needs a backup pass. This can be relevant in the case of groups of packages + * that share a uid, for example. + * + * This method requires that the application hold the "android.permission.BACKUP" + * permission if the package named in the argument is not the caller's own. + */ + public static void dataChanged(String packageName) { + checkServiceBinder(); + if (sService != null) { + try { + sService.dataChanged(packageName); + } catch (RemoteException e) { + Log.d(TAG, "dataChanged(pkg) couldn't connect"); + } + } + } + + /** + * Begin the process of restoring system data from backup. This method requires + * that the application hold the "android.permission.BACKUP" permission, and is + * not public. + * + * {@hide} + */ + public IRestoreSession beginRestoreSession(String transport) { + IRestoreSession binder = null; + checkServiceBinder(); + if (sService != null) { + try { + binder = sService.beginRestoreSession(transport); + } catch (RemoteException e) { + Log.d(TAG, "beginRestoreSession() couldn't connect"); + } } + return binder; } } diff --git a/core/java/android/backup/FileBackupHelper.java b/core/java/android/backup/FileBackupHelper.java index 05159dc3bdf2..405849705ff7 100644 --- a/core/java/android/backup/FileBackupHelper.java +++ b/core/java/android/backup/FileBackupHelper.java @@ -20,54 +20,53 @@ import android.content.Context; import android.os.ParcelFileDescriptor; import android.util.Log; +import java.io.File; import java.io.FileDescriptor; /** @hide */ -public class FileBackupHelper { +public class FileBackupHelper extends FileBackupHelperBase implements BackupHelper { private static final String TAG = "FileBackupHelper"; + Context mContext; + File mFilesDir; + String[] mFiles; + + public FileBackupHelper(Context context, String... files) { + super(context); + + mContext = context; + mFilesDir = context.getFilesDir(); + mFiles = files; + } + /** * Based on oldState, determine which of the files from the application's data directory * need to be backed up, write them to the data stream, and fill in newState with the * state as it exists now. */ - public static void performBackup(Context context, - ParcelFileDescriptor oldState, BackupDataOutput data, - ParcelFileDescriptor newState, String[] files) { - String basePath = context.getFilesDir().getAbsolutePath(); - performBackup_checked(basePath, oldState, data, newState, files); - } - - /** - * Check the parameters so the native code doens't have to throw all the exceptions - * since it's easier to do that from java. - */ - static void performBackup_checked(String basePath, - ParcelFileDescriptor oldState, BackupDataOutput data, - ParcelFileDescriptor newState, String[] files) { - if (files.length == 0) { - return; - } - if (basePath == null) { - throw new NullPointerException(); - } - // oldStateFd can be null - FileDescriptor oldStateFd = oldState != null ? oldState.getFileDescriptor() : null; - if (data.fd == null) { - throw new NullPointerException(); - } - FileDescriptor newStateFd = newState.getFileDescriptor(); - if (newStateFd == null) { - throw new NullPointerException(); + public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput data, + ParcelFileDescriptor newState) { + // file names + String[] files = mFiles; + File base = mContext.getFilesDir(); + final int N = files.length; + String[] fullPaths = new String[N]; + for (int i=0; iCallers must hold the android.permission.BACKUP permission to use this method. + */ + void setBackupEnabled(boolean isEnabled); + + /** + * Indicate that any necessary one-time provisioning has occurred. + * + *

Callers must hold the android.permission.BACKUP permission to use this method. + */ + void setBackupProvisioned(boolean isProvisioned); + + /** + * Report whether the backup mechanism is currently enabled. + * + *

Callers must hold the android.permission.BACKUP permission to use this method. + */ + boolean isBackupEnabled(); + + /** + * Schedule an immediate backup attempt for all pending updates. This is + * primarily intended for transports to use when they detect a suitable + * opportunity for doing a backup pass. If there are no pending updates to + * be sent, no action will be taken. Even if some updates are pending, the + * transport will still be asked to confirm via the usual requestBackupTime() + * method. + * + *

Callers must hold the android.permission.BACKUP permission to use this method. + */ + void backupNow(); + + /** + * Identify the currently selected transport. Callers must hold the + * android.permission.BACKUP permission to use this method. + */ + String getCurrentTransport(); + + /** + * Request a list of all available backup transports' names. Callers must + * hold the android.permission.BACKUP permission to use this method. + */ + String[] listAllTransports(); + + /** + * Specify the current backup transport. Callers must hold the + * android.permission.BACKUP permission to use this method. + * + * @param transport The name of the transport to select. This should be one + * of {@link BackupManager.TRANSPORT_GOOGLE} or {@link BackupManager.TRANSPORT_ADB}. + * @return The name of the previously selected transport. If the given transport + * name is not one of the currently available transports, no change is made to + * the current transport setting and the method returns null. */ - oneway void dataChanged(String packageName); + String selectBackupTransport(String transport); /** - * Schedule a full backup of the given package. - * !!! TODO: protect with a signature-or-system permission? + * Begin a restore session with the given transport (which may differ from the + * currently-active backup transport). + * + * @param transport The name of the transport to use for the restore operation. + * @return An interface to the restore session, or null on error. */ - oneway void scheduleFullBackup(String packageName); + IRestoreSession beginRestoreSession(String transportID); } diff --git a/core/java/android/backup/IRestoreObserver.aidl b/core/java/android/backup/IRestoreObserver.aidl new file mode 100644 index 000000000000..59e59fc1f70a --- /dev/null +++ b/core/java/android/backup/IRestoreObserver.aidl @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.backup; + +/** + * Callback class for receiving progress reports during a restore operation. + * + * @hide + */ +interface IRestoreObserver { + /** + * The restore operation has begun. + * + * @param numPackages The total number of packages being processed in + * this restore operation. + */ + void restoreStarting(int numPackages); + + /** + * An indication of which package is being restored currently, out of the + * total number provided in the restoreStarting() callback. This method + * is not guaranteed to be called. + * + * @param nowBeingRestored The index, between 1 and the numPackages parameter + * to the restoreStarting() callback, of the package now being restored. + */ + void onUpdate(int nowBeingRestored); + + /** + * The restore operation has completed. + * + * @param error Zero on success; a nonzero error code if the restore operation + * as a whole failed. + */ + void restoreFinished(int error); +} diff --git a/core/java/android/backup/IRestoreSession.aidl b/core/java/android/backup/IRestoreSession.aidl new file mode 100644 index 000000000000..2a1fbc179933 --- /dev/null +++ b/core/java/android/backup/IRestoreSession.aidl @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.backup; + +import android.backup.RestoreSet; +import android.backup.IRestoreObserver; + +/** + * Binder interface used by clients who wish to manage a restore operation. Every + * method in this interface requires the android.permission.BACKUP permission. + * + * {@hide} + */ +interface IRestoreSession { + /** + * Ask the current transport what the available restore sets are. + * + * @return A bundle containing two elements: an int array under the key + * "tokens" whose entries are a transport-private identifier for each backup set; + * and a String array under the key "names" whose entries are the user-meaningful + * text corresponding to the backup sets at each index in the tokens array. + */ + RestoreSet[] getAvailableRestoreSets(); + + /** + * Restore the given set onto the device, replacing the current data of any app + * contained in the restore set with the data previously backed up. + * + * @param token The token from {@link getAvailableRestoreSets()} corresponding to + * the restore set that should be used. + * @param observer If non-null, this binder points to an object that will receive + * progress callbacks during the restore operation. + */ + int performRestore(long token, IRestoreObserver observer); + + /** + * End this restore session. After this method is called, the IRestoreSession binder + * is no longer valid. + */ + void endRestoreSession(); +} diff --git a/core/java/android/backup/RestoreSet.aidl b/core/java/android/backup/RestoreSet.aidl new file mode 100644 index 000000000000..42e77bfe5990 --- /dev/null +++ b/core/java/android/backup/RestoreSet.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.backup; + +parcelable RestoreSet; \ No newline at end of file diff --git a/core/java/android/backup/RestoreSet.java b/core/java/android/backup/RestoreSet.java new file mode 100644 index 000000000000..eeca148667f3 --- /dev/null +++ b/core/java/android/backup/RestoreSet.java @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.backup; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Descriptive information about a set of backed-up app data available for restore. + * Used by IRestoreSession clients. + * + * @hide + */ +public class RestoreSet implements Parcelable { + /** + * Name of this restore set. May be user generated, may simply be the name + * of the handset model, e.g. "T-Mobile G1". + */ + public String name; + + /** + * Identifier of the device whose data this is. This will be as unique as + * is practically possible; for example, it might be an IMEI. + */ + public String device; + + /** + * Token that identifies this backup set unambiguously to the backup/restore + * transport. This is guaranteed to be valid for the duration of a restore + * session, but is meaningless once the session has ended. + */ + public long token; + + + public RestoreSet() { + // Leave everything zero / null + } + + public RestoreSet(String _name, String _dev, long _token) { + name = _name; + device = _dev; + token = _token; + } + + + // Parcelable implementation + public int describeContents() { + return 0; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeString(name); + out.writeString(device); + out.writeLong(token); + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public RestoreSet createFromParcel(Parcel in) { + return new RestoreSet(in); + } + + public RestoreSet[] newArray(int size) { + return new RestoreSet[size]; + } + }; + + private RestoreSet(Parcel in) { + name = in.readString(); + device = in.readString(); + token = in.readLong(); + } +} diff --git a/core/java/android/backup/SharedPreferencesBackupHelper.java b/core/java/android/backup/SharedPreferencesBackupHelper.java index 8627f08cf57b..4a7b399a5bde 100644 --- a/core/java/android/backup/SharedPreferencesBackupHelper.java +++ b/core/java/android/backup/SharedPreferencesBackupHelper.java @@ -18,24 +18,51 @@ package android.backup; import android.content.Context; import android.os.ParcelFileDescriptor; +import android.util.Log; +import java.io.File; import java.io.FileDescriptor; /** @hide */ -public class SharedPreferencesBackupHelper { - public static void performBackup(Context context, - ParcelFileDescriptor oldSnapshot, ParcelFileDescriptor newSnapshot, - BackupDataOutput data, String[] prefGroups) { - String basePath = "/xxx"; //context.getPreferencesDir(); +public class SharedPreferencesBackupHelper extends FileBackupHelperBase implements BackupHelper { + private static final String TAG = "SharedPreferencesBackupHelper"; + private Context mContext; + private String[] mPrefGroups; + + public SharedPreferencesBackupHelper(Context context, String... prefGroups) { + super(context); + + mContext = context; + mPrefGroups = prefGroups; + } + + public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput data, + ParcelFileDescriptor newState) { + Context context = mContext; + // make filenames for the prefGroups + String[] prefGroups = mPrefGroups; final int N = prefGroups.length; String[] files = new String[N]; for (int i=0; i + * Call mOpenHelper.getWritableDatabase() and mDb.beginTransaction(). + * {@link #endTransaction} MUST be called after calling this method. + * Those methods should be used like this: + *

+ * + *
+     * boolean successful = false;
+     * beginTransaction();
+     * try {
+     *     // Do something related to mDb
+     *     successful = true;
+     *     return ret;
+     * } finally {
+     *     endTransaction(successful);
+     * }
+     * 
+ * + * @hide This method is dangerous from the view of database manipulation, though using + * this makes batch insertion/update/delete much faster. + */ + public final void beginTransaction() { mDb = mOpenHelper.getWritableDatabase(); mDb.beginTransaction(); + } + + /** + *

+ * Call mDb.endTransaction(). If successful is true, try to call + * mDb.setTransactionSuccessful() before calling mDb.endTransaction(). + * This method MUST be used with {@link #beginTransaction()}. + *

+ * + * @hide This method is dangerous from the view of database manipulation, though using + * this makes batch insertion/update/delete much faster. + */ + public final void endTransaction(boolean successful) { try { - if (isTemporary() && mSyncState.matches(url)) { - int numRows = mSyncState.asContentProvider().update( - url, values, selection, selectionArgs); + if (successful) { + // setTransactionSuccessful() must be called just once during opening the + // transaction. mDb.setTransactionSuccessful(); - return numRows; } + } finally { + mDb.endTransaction(); + } + } - int result = updateInternal(url, values, selection, selectionArgs); - mDb.setTransactionSuccessful(); + @Override + public final int update(final Uri uri, final ContentValues values, + final String selection, final String[] selectionArgs) { + boolean successful = false; + beginTransaction(); + try { + int ret = nonTransactionalUpdate(uri, values, selection, selectionArgs); + successful = true; + return ret; + } finally { + endTransaction(successful); + } + } - if (!isTemporary() && result > 0) { - getContext().getContentResolver().notifyChange(url, null /* observer */, - changeRequiresLocalSync(url)); - } + /** + * @hide + */ + public final int nonTransactionalUpdate(final Uri uri, final ContentValues values, + final String selection, final String[] selectionArgs) { + if (isTemporary() && mSyncState.matches(uri)) { + int numRows = mSyncState.asContentProvider().update( + uri, values, selection, selectionArgs); + return numRows; + } - return result; - } finally { - mDb.endTransaction(); + int result = updateInternal(uri, values, selection, selectionArgs); + if (!isTemporary() && result > 0) { + getContext().getContentResolver().notifyChange(uri, null /* observer */, + changeRequiresLocalSync(uri)); } + + return result; } @Override - public final int delete(final Uri url, final String selection, + public final int delete(final Uri uri, final String selection, final String[] selectionArgs) { - mDb = mOpenHelper.getWritableDatabase(); - mDb.beginTransaction(); + boolean successful = false; + beginTransaction(); try { - if (isTemporary() && mSyncState.matches(url)) { - int numRows = mSyncState.asContentProvider().delete(url, selection, selectionArgs); - mDb.setTransactionSuccessful(); - return numRows; - } - int result = deleteInternal(url, selection, selectionArgs); - mDb.setTransactionSuccessful(); - if (!isTemporary() && result > 0) { - getContext().getContentResolver().notifyChange(url, null /* observer */, - changeRequiresLocalSync(url)); - } - return result; + int ret = nonTransactionalDelete(uri, selection, selectionArgs); + successful = true; + return ret; } finally { - mDb.endTransaction(); + endTransaction(successful); } } + /** + * @hide + */ + public final int nonTransactionalDelete(final Uri uri, final String selection, + final String[] selectionArgs) { + if (isTemporary() && mSyncState.matches(uri)) { + int numRows = mSyncState.asContentProvider().delete(uri, selection, selectionArgs); + return numRows; + } + int result = deleteInternal(uri, selection, selectionArgs); + if (!isTemporary() && result > 0) { + getContext().getContentResolver().notifyChange(uri, null /* observer */, + changeRequiresLocalSync(uri)); + } + return result; + } + @Override - public final Uri insert(final Uri url, final ContentValues values) { - mDb = mOpenHelper.getWritableDatabase(); - mDb.beginTransaction(); + public final Uri insert(final Uri uri, final ContentValues values) { + boolean successful = false; + beginTransaction(); try { - if (isTemporary() && mSyncState.matches(url)) { - Uri result = mSyncState.asContentProvider().insert(url, values); - mDb.setTransactionSuccessful(); - return result; - } - Uri result = insertInternal(url, values); - mDb.setTransactionSuccessful(); - if (!isTemporary() && result != null) { - getContext().getContentResolver().notifyChange(url, null /* observer */, - changeRequiresLocalSync(url)); - } - return result; + Uri ret = nonTransactionalInsert(uri, values); + successful = true; + return ret; } finally { - mDb.endTransaction(); + endTransaction(successful); + } + } + + /** + * @hide + */ + public final Uri nonTransactionalInsert(final Uri uri, final ContentValues values) { + if (isTemporary() && mSyncState.matches(uri)) { + Uri result = mSyncState.asContentProvider().insert(uri, values); + return result; + } + Uri result = insertInternal(uri, values); + if (!isTemporary() && result != null) { + getContext().getContentResolver().notifyChange(uri, null /* observer */, + changeRequiresLocalSync(uri)); } + return result; } @Override diff --git a/core/java/android/content/AbstractTableMerger.java b/core/java/android/content/AbstractTableMerger.java index 700f1d88241c..9c760d94ad63 100644 --- a/core/java/android/content/AbstractTableMerger.java +++ b/core/java/android/content/AbstractTableMerger.java @@ -61,8 +61,10 @@ public abstract class AbstractTableMerger _SYNC_ID +"=? and " + _SYNC_ACCOUNT + "=?"; private static final String SELECT_BY_ID = BaseColumns._ID +"=?"; - private static final String SELECT_UNSYNCED = "" - + _SYNC_DIRTY + " > 0 and (" + _SYNC_ACCOUNT + "=? or " + _SYNC_ACCOUNT + " is null)"; + private static final String SELECT_UNSYNCED = + "(" + _SYNC_ACCOUNT + " IS NULL OR " + _SYNC_ACCOUNT + "=?) AND " + + "(" + _SYNC_ID + " IS NULL OR (" + _SYNC_DIRTY + " > 0 AND " + + _SYNC_VERSION + " IS NOT NULL))"; public AbstractTableMerger(SQLiteDatabase database, String table, Uri tableURL, String deletedTable, @@ -365,26 +367,32 @@ public abstract class AbstractTableMerger if (!TextUtils.isEmpty(localSyncID)) { // An existing server item has changed - boolean recordChanged = (localSyncVersion == null) || - !serverSyncVersion.equals(localSyncVersion); - if (recordChanged) { - if (localSyncDirty) { - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.v(TAG, "remote record " + serverSyncId - + " conflicts with local _sync_id " + localSyncID - + ", local _id " + localRowId); + // If serverSyncVersion is null, there is no edit URL; + // server won't let this change be written. + // Just hold onto it, I guess, in case the server permissions + // change later. + if (serverSyncVersion != null) { + boolean recordChanged = (localSyncVersion == null) || + !serverSyncVersion.equals(localSyncVersion); + if (recordChanged) { + if (localSyncDirty) { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "remote record " + serverSyncId + + " conflicts with local _sync_id " + localSyncID + + ", local _id " + localRowId); + } + conflict = true; + } else { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, + "remote record " + + serverSyncId + + " updates local _sync_id " + + localSyncID + ", local _id " + + localRowId); + } + update = true; } - conflict = true; - } else { - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.v(TAG, - "remote record " + - serverSyncId + - " updates local _sync_id " + - localSyncID + ", local _id " + - localRowId); - } - update = true; } } } else { diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index f2ad2485d0e1..9e37ae448731 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -16,6 +16,7 @@ package android.content; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.content.res.Resources; @@ -233,6 +234,9 @@ public abstract class Context { /** Return the name of this application's package. */ public abstract String getPackageName(); + /** Return the full application info for this context's package. */ + public abstract ApplicationInfo getApplicationInfo(); + /** * {@hide} * Return the full path to this context's resource files. This is the ZIP files @@ -254,11 +258,19 @@ public abstract class Context { *

Note: this is not generally useful for applications, since they should * not be directly accessing the file system. * - * * @return String Path to the code and assets. */ public abstract String getPackageCodePath(); + /** + * {@hide} + * Return the full path to the shared prefs file for the given prefs group name. + * + *

Note: this is not generally useful for applications, since they should + * not be directly accessing the file system. + */ + public abstract File getSharedPrefsFile(String name); + /** * Retrieve and hold the contents of the preferences file 'name', returning * a SharedPreferences through which you can retrieve and modify its @@ -526,16 +538,6 @@ public abstract class Context { */ public abstract int getWallpaperDesiredMinimumHeight(); - /** - * Returns the scale in which the application will be drawn on the - * screen. This is usually 1.0f if the application supports the device's - * resolution/density. This will be 1.5f, for example, if the application - * that supports only 160 density runs on 240 density screen. - * - * @hide - */ - public abstract float getApplicationScale(); - /** * Change the current system wallpaper to a bitmap. The given bitmap is * converted to a PNG and stored as the wallpaper. On success, the intent @@ -1133,6 +1135,15 @@ public abstract class Context { * @see android.app.NotificationManager */ public static final String NOTIFICATION_SERVICE = "notification"; + /** + * Use with {@link #getSystemService} to retrieve a + * {@link android.view.accessibility.AccessibilityManager} for giving the user + * feedback for UI events through the registered event listeners. + * + * @see #getSystemService + * @see android.view.accessibility.AccessibilityManager + */ + public static final String ACCESSIBILITY_SERVICE = "accessibility"; /** * Use with {@link #getSystemService} to retrieve a * {@link android.app.NotificationManager} for controlling keyguard. @@ -1643,6 +1654,13 @@ public abstract class Context { * with extreme care! */ public static final int CONTEXT_IGNORE_SECURITY = 0x00000002; + + /** + * Flag for use with {@link #createPackageContext}: a restricted context may + * disable specific features. For instance, a View associated with a restricted + * context would ignore particular XML attributes. + */ + public static final int CONTEXT_RESTRICTED = 0x00000004; /** * Return a new Context object for the given application name. This @@ -1671,4 +1689,15 @@ public abstract class Context { */ public abstract Context createPackageContext(String packageName, int flags) throws PackageManager.NameNotFoundException; + + /** + * Indicates whether this Context is restricted. + * + * @return True if this Context is restricted, false otherwise. + * + * @see #CONTEXT_RESTRICTED + */ + public boolean isRestricted() { + return false; + } } diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java index 25b2caeb7279..45a082a9520e 100644 --- a/core/java/android/content/ContextWrapper.java +++ b/core/java/android/content/ContextWrapper.java @@ -16,6 +16,7 @@ package android.content; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.content.res.Resources; @@ -119,6 +120,11 @@ public class ContextWrapper extends Context { return mBase.getPackageName(); } + @Override + public ApplicationInfo getApplicationInfo() { + return mBase.getApplicationInfo(); + } + @Override public String getPackageResourcePath() { return mBase.getPackageResourcePath(); @@ -129,6 +135,11 @@ public class ContextWrapper extends Context { return mBase.getPackageCodePath(); } + @Override + public File getSharedPrefsFile(String name) { + return mBase.getSharedPrefsFile(name); + } + @Override public SharedPreferences getSharedPreferences(String name, int mode) { return mBase.getSharedPreferences(name, mode); @@ -420,11 +431,8 @@ public class ContextWrapper extends Context { return mBase.createPackageContext(packageName, flags); } - /** - * @hide - */ @Override - public float getApplicationScale() { - return mBase.getApplicationScale(); + public boolean isRestricted() { + return mBase.isRestricted(); } } diff --git a/core/java/android/content/IIntentReceiver.aidl b/core/java/android/content/IIntentReceiver.aidl new file mode 100755 index 000000000000..443db2d06d0f --- /dev/null +++ b/core/java/android/content/IIntentReceiver.aidl @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content; + +import android.content.Intent; +import android.os.Bundle; + +/** + * System private API for dispatching intent broadcasts. This is given to the + * activity manager as part of registering for an intent broadcasts, and is + * called when it receives intents. + * + * {@hide} + */ +oneway interface IIntentReceiver { + void performReceive(in Intent intent, int resultCode, + String data, in Bundle extras, boolean ordered); +} + diff --git a/core/java/android/content/IIntentSender.aidl b/core/java/android/content/IIntentSender.aidl new file mode 100644 index 000000000000..b7da47219ce4 --- /dev/null +++ b/core/java/android/content/IIntentSender.aidl @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content; + +import android.content.IIntentReceiver; +import android.content.Intent; + +/** @hide */ +interface IIntentSender { + int send(int code, in Intent intent, String resolvedType, + IIntentReceiver finishedReceiver); +} diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 24262f51197d..263f9279e69a 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -240,35 +240,35 @@ import java.util.Set; * * <activity class=".NotesList" android:label="@string/title_notes_list"> * <intent-filter> - * <action android:value="android.intent.action.MAIN" /> - * <category android:value="android.intent.category.LAUNCHER" /> + * <action android:name="android.intent.action.MAIN" /> + * <category android:name="android.intent.category.LAUNCHER" /> * </intent-filter> * <intent-filter> - * <action android:value="android.intent.action.VIEW" /> - * <action android:value="android.intent.action.EDIT" /> - * <action android:value="android.intent.action.PICK" /> - * <category android:value="android.intent.category.DEFAULT" /> - * <type android:value="vnd.android.cursor.dir/vnd.google.note" /> + * <action android:name="android.intent.action.VIEW" /> + * <action android:name="android.intent.action.EDIT" /> + * <action android:name="android.intent.action.PICK" /> + * <category android:name="android.intent.category.DEFAULT" /> + * <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" /> * </intent-filter> * <intent-filter> - * <action android:value="android.intent.action.GET_CONTENT" /> - * <category android:value="android.intent.category.DEFAULT" /> - * <type android:value="vnd.android.cursor.item/vnd.google.note" /> + * <action android:name="android.intent.action.GET_CONTENT" /> + * <category android:name="android.intent.category.DEFAULT" /> + * <data android:mimeType="vnd.android.cursor.item/vnd.google.note" /> * </intent-filter> * </activity> * * <activity class=".NoteEditor" android:label="@string/title_note"> * <intent-filter android:label="@string/resolve_edit"> - * <action android:value="android.intent.action.VIEW" /> - * <action android:value="android.intent.action.EDIT" /> - * <category android:value="android.intent.category.DEFAULT" /> - * <type android:value="vnd.android.cursor.item/vnd.google.note" /> + * <action android:name="android.intent.action.VIEW" /> + * <action android:name="android.intent.action.EDIT" /> + * <category android:name="android.intent.category.DEFAULT" /> + * <data android:mimeType="vnd.android.cursor.item/vnd.google.note" /> * </intent-filter> * * <intent-filter> - * <action android:value="android.intent.action.INSERT" /> - * <category android:value="android.intent.category.DEFAULT" /> - * <type android:value="vnd.android.cursor.dir/vnd.google.note" /> + * <action android:name="android.intent.action.INSERT" /> + * <category android:name="android.intent.category.DEFAULT" /> + * <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" /> * </intent-filter> * * </activity> @@ -276,11 +276,11 @@ import java.util.Set; * <activity class=".TitleEditor" android:label="@string/title_edit_title" * android:theme="@android:style/Theme.Dialog"> * <intent-filter android:label="@string/resolve_title"> - * <action android:value="com.android.notepad.action.EDIT_TITLE" /> - * <category android:value="android.intent.category.DEFAULT" /> - * <category android:value="android.intent.category.ALTERNATIVE" /> - * <category android:value="android.intent.category.SELECTED_ALTERNATIVE" /> - * <type android:value="vnd.android.cursor.item/vnd.google.note" /> + * <action android:name="com.android.notepad.action.EDIT_TITLE" /> + * <category android:name="android.intent.category.DEFAULT" /> + * <category android:name="android.intent.category.ALTERNATIVE" /> + * <category android:name="android.intent.category.SELECTED_ALTERNATIVE" /> + * <data android:mimeType="vnd.android.cursor.item/vnd.google.note" /> * </intent-filter> * </activity> * @@ -294,8 +294,8 @@ import java.util.Set; *

    *
  1.   * <intent-filter>
    - *     <action android:value="{@link #ACTION_MAIN android.intent.action.MAIN}" />
    - *     <category android:value="{@link #CATEGORY_LAUNCHER android.intent.category.LAUNCHER}" />
    + *     <action android:name="{@link #ACTION_MAIN android.intent.action.MAIN}" />
    + *     <category android:name="{@link #CATEGORY_LAUNCHER android.intent.category.LAUNCHER}" />
      * </intent-filter>
    *

    This provides a top-level entry into the NotePad application: the standard * MAIN action is a main entry point (not requiring any other information in @@ -303,11 +303,11 @@ import java.util.Set; * listed in the application launcher.

    *
  2.   * <intent-filter>
    - *     <action android:value="{@link #ACTION_VIEW android.intent.action.VIEW}" />
    - *     <action android:value="{@link #ACTION_EDIT android.intent.action.EDIT}" />
    - *     <action android:value="{@link #ACTION_PICK android.intent.action.PICK}" />
    - *     <category android:value="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
    - *     <type android:value="vnd.android.cursor.dir/vnd.google.note" />
    + *     <action android:name="{@link #ACTION_VIEW android.intent.action.VIEW}" />
    + *     <action android:name="{@link #ACTION_EDIT android.intent.action.EDIT}" />
    + *     <action android:name="{@link #ACTION_PICK android.intent.action.PICK}" />
    + *     <category android:name="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
    + *     <data mimeType:name="vnd.android.cursor.dir/vnd.google.note" />
      * </intent-filter>
    *

    This declares the things that the activity can do on a directory of * notes. The type being supported is given with the <type> tag, where @@ -322,9 +322,9 @@ import java.util.Set; * activity when its component name is not explicitly specified.

    *
  3.   * <intent-filter>
    - *     <action android:value="{@link #ACTION_GET_CONTENT android.intent.action.GET_CONTENT}" />
    - *     <category android:value="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
    - *     <type android:value="vnd.android.cursor.item/vnd.google.note" />
    + *     <action android:name="{@link #ACTION_GET_CONTENT android.intent.action.GET_CONTENT}" />
    + *     <category android:name="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
    + *     <data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
      * </intent-filter>
    *

    This filter describes the ability return to the caller a note selected by * the user without needing to know where it came from. The data type @@ -371,10 +371,10 @@ import java.util.Set; *

      *
    1.   * <intent-filter android:label="@string/resolve_edit">
      - *     <action android:value="{@link #ACTION_VIEW android.intent.action.VIEW}" />
      - *     <action android:value="{@link #ACTION_EDIT android.intent.action.EDIT}" />
      - *     <category android:value="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
      - *     <type android:value="vnd.android.cursor.item/vnd.google.note" />
      + *     <action android:name="{@link #ACTION_VIEW android.intent.action.VIEW}" />
      + *     <action android:name="{@link #ACTION_EDIT android.intent.action.EDIT}" />
      + *     <category android:name="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
      + *     <data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
        * </intent-filter>
      *

      The first, primary, purpose of this activity is to let the user interact * with a single note, as decribed by the MIME type @@ -384,9 +384,9 @@ import java.util.Set; * specifying its component.

      *
    2.   * <intent-filter>
      - *     <action android:value="{@link #ACTION_INSERT android.intent.action.INSERT}" />
      - *     <category android:value="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
      - *     <type android:value="vnd.android.cursor.dir/vnd.google.note" />
      + *     <action android:name="{@link #ACTION_INSERT android.intent.action.INSERT}" />
      + *     <category android:name="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
      + *     <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
        * </intent-filter>
      *

      The secondary use of this activity is to insert a new note entry into * an existing directory of notes. This is used when the user creates a new @@ -422,11 +422,11 @@ import java.util.Set; * *

        * <intent-filter android:label="@string/resolve_title">
      - *     <action android:value="com.android.notepad.action.EDIT_TITLE" />
      - *     <category android:value="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
      - *     <category android:value="{@link #CATEGORY_ALTERNATIVE android.intent.category.ALTERNATIVE}" />
      - *     <category android:value="{@link #CATEGORY_SELECTED_ALTERNATIVE android.intent.category.SELECTED_ALTERNATIVE}" />
      - *     <type android:value="vnd.android.cursor.item/vnd.google.note" />
      + *     <action android:name="com.android.notepad.action.EDIT_TITLE" />
      + *     <category android:name="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
      + *     <category android:name="{@link #CATEGORY_ALTERNATIVE android.intent.category.ALTERNATIVE}" />
      + *     <category android:name="{@link #CATEGORY_SELECTED_ALTERNATIVE android.intent.category.SELECTED_ALTERNATIVE}" />
      + *     <data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
        * </intent-filter>
      * *

      In the single intent template here, we @@ -509,8 +509,8 @@ import java.util.Set; *

    3. {@link #ACTION_UID_REMOVED} *
    4. {@link #ACTION_BATTERY_CHANGED} *
    5. {@link #ACTION_POWER_CONNECTED} - *
    6. {@link #ACTION_POWER_DISCONNECTED} - *
    7. {@link #ACTION_SHUTDOWN} + *
    8. {@link #ACTION_POWER_DISCONNECTED} + *
    9. {@link #ACTION_SHUTDOWN} * * *

      Standard Categories

      @@ -914,6 +914,23 @@ public class Intent implements Parcelable { */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_SEND = "android.intent.action.SEND"; + /** + * Activity Action: Deliver multiple data to someone else. + *

      + * Like ACTION_SEND, except the data is multiple. + *

      + * Input: {@link #getType} is the MIME type of the data being sent. + * get*ArrayListExtra can have either a {@link #EXTRA_TEXT} or {@link + * #EXTRA_STREAM} field, containing the data to be sent. + *

      + * Optional standard extras, which may be interpreted by some recipients as + * appropriate, are: {@link #EXTRA_EMAIL}, {@link #EXTRA_CC}, + * {@link #EXTRA_BCC}, {@link #EXTRA_SUBJECT}. + *

      + * Output: nothing. + */ + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_SEND_MULTIPLE = "android.intent.action.SEND_MULTIPLE"; /** * Activity Action: Handle an incoming phone call. *

      Input: nothing. @@ -1059,6 +1076,36 @@ public class Intent implements Parcelable { */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_APP_ERROR = "android.intent.action.APP_ERROR"; + + /** + * Activity Action: Show power usage information to the user. + *

      Input: Nothing. + *

      Output: Nothing. + */ + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_POWER_USAGE_SUMMARY = "android.intent.action.POWER_USAGE_SUMMARY"; + + /** + * Activity Action: Setup wizard to launch after a platform update. This + * activity should have a string meta-data field associated with it, + * {@link #METADATA_SETUP_VERSION}, which defines the current version of + * the platform for setup. The activity will be launched only if + * {@link android.provider.Settings.Secure#LAST_SETUP_SHOWN} is not the + * same value. + *

      Input: Nothing. + *

      Output: Nothing. + * @hide + */ + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_UPGRADE_SETUP = "android.intent.action.UPGRADE_SETUP"; + + /** + * A string associated with a {@link #ACTION_UPGRADE_SETUP} activity + * describing the last run version of the platform that was setup. + * @hide + */ + public static final String METADATA_SETUP_VERSION = "android.SETUP_VERSION"; + // --------------------------------------------------------------------- // --------------------------------------------------------------------- // Standard intent broadcast actions (see action variable). @@ -1263,6 +1310,13 @@ public class Intent implements Parcelable { */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW"; + /** + * Broadcast Action: Indicates the battery is now okay after being low. + * This will be sent after {@link #ACTION_BATTERY_LOW} once the battery has + * gone back up to an okay state. + */ + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY"; /** * Broadcast Action: External power has been connected to the device. * This is intended for applications that wish to register specifically to this notification. @@ -1277,10 +1331,10 @@ public class Intent implements Parcelable { * This is intended for applications that wish to register specifically to this notification. * Unlike ACTION_BATTERY_CHANGED, applications will be woken for this and so do not have to * stay active to receive this notification. This action can be used to implement actions - * that wait until power is available to trigger. + * that wait until power is available to trigger. */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) - public static final String ACTION_POWER_DISCONNECTED = "android.intent.action.ACTION_POWER_DISCONNECTED"; + public static final String ACTION_POWER_DISCONNECTED = "android.intent.action.ACTION_POWER_DISCONNECTED"; /** * Broadcast Action: Device is shutting down. * This is broadcast when the device is being shut down (completely turned @@ -1289,7 +1343,7 @@ public class Intent implements Parcelable { * to handle this, since the forground activity will be paused as well. */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) - public static final String ACTION_SHUTDOWN = "android.intent.action.ACTION_SHUTDOWN"; + public static final String ACTION_SHUTDOWN = "android.intent.action.ACTION_SHUTDOWN"; /** * Broadcast Action: Indicates low memory condition on the device */ @@ -1552,6 +1606,16 @@ public class Intent implements Parcelable { public static final String ACTION_REBOOT = "android.intent.action.REBOOT"; + /** + * @hide + * TODO: This will be unhidden in a later CL. + * Broadcast Action: The TextToSpeech synthesizer has completed processing + * all of the text in the speech queue. + */ + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String ACTION_TTS_QUEUE_PROCESSING_COMPLETED = + "android.intent.action.TTS_QUEUE_PROCESSING_COMPLETED"; + // --------------------------------------------------------------------- // --------------------------------------------------------------------- // Standard intent categories (see addCategory()). @@ -1791,23 +1855,23 @@ public class Intent implements Parcelable { * delivered. */ public static final String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT"; - + /** * Used as a parcelable extra field in {@link #ACTION_APP_ERROR}, containing * the bug report. - * + * * @hide */ public static final String EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT"; /** - * Used as a string extra field when sending an intent to PackageInstaller to install a + * Used as a string extra field when sending an intent to PackageInstaller to install a * package. Specifies the installer package name; this package will receive the * {@link #ACTION_APP_ERROR} intent. - * + * * @hide */ - public static final String EXTRA_INSTALLER_PACKAGE_NAME + public static final String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME"; // --------------------------------------------------------------------- @@ -2039,11 +2103,26 @@ public class Intent implements Parcelable { */ public static final int FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT = 0x20000000; + // --------------------------------------------------------------------- + // --------------------------------------------------------------------- + // toUri() and parseUri() options. + + /** + * Flag for use with {@link #toUri} and {@link #parseUri}: the URI string + * always has the "intent:" scheme. This syntax can be used when you want + * to later disambiguate between URIs that are intended to describe an + * Intent vs. all others that should be treated as raw URIs. When used + * with {@link #parseUri}, any other scheme will result in a generic + * VIEW action for that raw URI. + */ + public static final int URI_INTENT_SCHEME = 1<<0; + // --------------------------------------------------------------------- private String mAction; private Uri mData; private String mType; + private String mPackage; private ComponentName mComponent; private int mFlags; private HashSet mCategories; @@ -2064,6 +2143,7 @@ public class Intent implements Parcelable { this.mAction = o.mAction; this.mData = o.mData; this.mType = o.mType; + this.mPackage = o.mPackage; this.mComponent = o.mComponent; this.mFlags = o.mFlags; if (o.mCategories != null) { @@ -2083,6 +2163,7 @@ public class Intent implements Parcelable { this.mAction = o.mAction; this.mData = o.mData; this.mType = o.mType; + this.mPackage = o.mPackage; this.mComponent = o.mComponent; if (o.mCategories != null) { this.mCategories = new HashSet(o.mCategories); @@ -2182,24 +2263,51 @@ public class Intent implements Parcelable { mComponent = new ComponentName(packageContext, cls); } + /** + * Call {@link #parseUri} with 0 flags. + * @deprecated Use {@link #parseUri} instead. + */ + @Deprecated + public static Intent getIntent(String uri) throws URISyntaxException { + return parseUri(uri, 0); + } + /** * Create an intent from a URI. This URI may encode the action, - * category, and other intent fields, if it was returned by toURI(). If - * the Intent was not generate by toURI(), its data will be the entire URI - * and its action will be ACTION_VIEW. + * category, and other intent fields, if it was returned by + * {@link #toUri}.. If the Intent was not generate by toUri(), its data + * will be the entire URI and its action will be ACTION_VIEW. * *

      The URI given here must not be relative -- that is, it must include * the scheme and full path. * * @param uri The URI to turn into an Intent. + * @param flags Additional processing flags. Either 0 or * * @return Intent The newly created Intent object. * - * @see #toURI + * @throws URISyntaxException Throws URISyntaxError if the basic URI syntax + * it bad (as parsed by the Uri class) or the Intent data within the + * URI is invalid. + * + * @see #toUri */ - public static Intent getIntent(String uri) throws URISyntaxException { + public static Intent parseUri(String uri, int flags) throws URISyntaxException { int i = 0; try { + // Validate intent scheme for if requested. + if ((flags&URI_INTENT_SCHEME) != 0) { + if (!uri.startsWith("intent:")) { + Intent intent = new Intent(ACTION_VIEW); + try { + intent.setData(Uri.parse(uri)); + } catch (IllegalArgumentException e) { + throw new URISyntaxException(uri, e.getMessage()); + } + return intent; + } + } + // simple case i = uri.lastIndexOf("#"); if (i == -1) return new Intent(ACTION_VIEW, Uri.parse(uri)); @@ -2211,16 +2319,15 @@ public class Intent implements Parcelable { Intent intent = new Intent(ACTION_VIEW); // fetch data part, if present - if (i > 0) { - intent.mData = Uri.parse(uri.substring(0, i)); - } + String data = i >= 0 ? uri.substring(0, i) : null; + String scheme = null; i += "#Intent;".length(); // loop over contents of Intent, all name=value; while (!uri.startsWith("end", i)) { int eq = uri.indexOf('=', i); int semi = uri.indexOf(';', eq); - String value = uri.substring(eq + 1, semi); + String value = Uri.decode(uri.substring(eq + 1, semi)); // action if (uri.startsWith("action=", i)) { @@ -2242,15 +2349,24 @@ public class Intent implements Parcelable { intent.mFlags = Integer.decode(value).intValue(); } + // package + else if (uri.startsWith("package=", i)) { + intent.mPackage = value; + } + // component else if (uri.startsWith("component=", i)) { intent.mComponent = ComponentName.unflattenFromString(value); } + // scheme + else if (uri.startsWith("scheme=", i)) { + scheme = value; + } + // extra else { String key = Uri.decode(uri.substring(i + 2, eq)); - value = Uri.decode(value); // create Bundle if it doesn't already exist if (intent.mExtras == null) intent.mExtras = new Bundle(); Bundle b = intent.mExtras; @@ -2271,6 +2387,23 @@ public class Intent implements Parcelable { i = semi + 1; } + if (data != null) { + if (data.startsWith("intent:")) { + data = data.substring(7); + if (scheme != null) { + data = scheme + ':' + data; + } + } + + if (data.length() > 0) { + try { + intent.mData = Uri.parse(data); + } catch (IllegalArgumentException e) { + throw new URISyntaxException(uri, e.getMessage()); + } + } + } + return intent; } catch (IndexOutOfBoundsException e) { @@ -3083,6 +3216,20 @@ public class Intent implements Parcelable { return mFlags; } + /** + * Retrieve the application package name this Intent is limited to. When + * resolving an Intent, if non-null this limits the resolution to only + * components in the given application package. + * + * @return The name of the application package for the Intent. + * + * @see #resolveActivity + * @see #setPackage + */ + public String getPackage() { + return mPackage; + } + /** * Retrieve the concrete component associated with the intent. When receiving * an intent, this is the component that was found to best handle it (that is, @@ -3118,6 +3265,9 @@ public class Intent implements Parcelable { *

      If {@link #addCategory} has added any categories, the activity must * handle ALL of the categories specified. * + *

      If {@link #getPackage} is non-NULL, only activity components in + * that application package will be considered. + * *

      If there are no activities that satisfy all of these conditions, a * null string is returned. * @@ -3239,7 +3389,7 @@ public class Intent implements Parcelable { * only specify a type and not data, for example to indicate the type of * data to return. This method automatically clears any data that was * previously set by {@link #setData}. - * + * *

      Note: MIME type matching in the Android framework is * case-sensitive, unlike formal RFC MIME types. As a result, * you should always write your MIME types with lower case letters, @@ -4088,6 +4238,27 @@ public class Intent implements Parcelable { return this; } + /** + * (Usually optional) Set an explicit application package name that limits + * the components this Intent will resolve to. If left to the default + * value of null, all components in all applications will considered. + * If non-null, the Intent can only match the components in the given + * application package. + * + * @param packageName The name of the application package to handle the + * intent, or null to allow any application package. + * + * @return Returns the same Intent object, for chaining multiple calls + * into a single statement. + * + * @see #getPackage + * @see #resolveActivity + */ + public Intent setPackage(String packageName) { + mPackage = packageName; + return this; + } + /** * (Usually optional) Explicitly set the component to handle the intent. * If left with the default value of null, the system will determine the @@ -4199,6 +4370,12 @@ public class Intent implements Parcelable { */ public static final int FILL_IN_COMPONENT = 1<<3; + /** + * Use with {@link #fillIn} to allow the current package value to be + * overwritten, even if it is already set. + */ + public static final int FILL_IN_PACKAGE = 1<<4; + /** * Copy the contents of other in to this object, but only * where fields are not defined by this object. For purposes of a field @@ -4210,14 +4387,15 @@ public class Intent implements Parcelable { *

    10. data URI and MIME type, as set by {@link #setData(Uri)}, * {@link #setType(String)}, or {@link #setDataAndType(Uri, String)}. *
    11. categories, as set by {@link #addCategory}. + *
    12. package, as set by {@link #setPackage}. *
    13. component, as set by {@link #setComponent(ComponentName)} or * related methods. *
    14. each top-level name in the associated extras. * * *

      In addition, you can use the {@link #FILL_IN_ACTION}, - * {@link #FILL_IN_DATA}, {@link #FILL_IN_CATEGORIES}, and - * {@link #FILL_IN_COMPONENT} to override the restriction where the + * {@link #FILL_IN_DATA}, {@link #FILL_IN_CATEGORIES}, {@link #FILL_IN_PACKAGE}, + * and {@link #FILL_IN_COMPONENT} to override the restriction where the * corresponding field will not be replaced if it is already set. * *

      For example, consider Intent A with {data="foo", categories="bar"} @@ -4233,32 +4411,39 @@ public class Intent implements Parcelable { * @param flags Options to control which fields can be filled in. * * @return Returns a bit mask of {@link #FILL_IN_ACTION}, - * {@link #FILL_IN_DATA}, {@link #FILL_IN_CATEGORIES}, and - * {@link #FILL_IN_COMPONENT} indicating which fields were changed. + * {@link #FILL_IN_DATA}, {@link #FILL_IN_CATEGORIES}, {@link #FILL_IN_PACKAGE}, + * and {@link #FILL_IN_COMPONENT} indicating which fields were changed. */ public int fillIn(Intent other, int flags) { int changes = 0; - if ((mAction == null && other.mAction == null) - || (flags&FILL_IN_ACTION) != 0) { + if (other.mAction != null + && (mAction == null || (flags&FILL_IN_ACTION) != 0)) { mAction = other.mAction; changes |= FILL_IN_ACTION; } - if ((mData == null && mType == null && - (other.mData != null || other.mType != null)) - || (flags&FILL_IN_DATA) != 0) { + if ((other.mData != null || other.mType != null) + && ((mData == null && mType == null) + || (flags&FILL_IN_DATA) != 0)) { mData = other.mData; mType = other.mType; changes |= FILL_IN_DATA; } - if ((mCategories == null && other.mCategories == null) - || (flags&FILL_IN_CATEGORIES) != 0) { + if (other.mCategories != null + && (mCategories == null || (flags&FILL_IN_CATEGORIES) != 0)) { if (other.mCategories != null) { mCategories = new HashSet(other.mCategories); } changes |= FILL_IN_CATEGORIES; } - if ((mComponent == null && other.mComponent == null) - || (flags&FILL_IN_COMPONENT) != 0) { + if (other.mPackage != null + && (mPackage == null || (flags&FILL_IN_PACKAGE) != 0)) { + mPackage = other.mPackage; + changes |= FILL_IN_PACKAGE; + } + // Component is special: it can -only- be set if explicitly allowed, + // since otherwise the sender could force the intent somewhere the + // originator didn't intend. + if (other.mComponent != null && (flags&FILL_IN_COMPONENT) != 0) { mComponent = other.mComponent; changes |= FILL_IN_COMPONENT; } @@ -4373,6 +4558,17 @@ public class Intent implements Parcelable { } } } + if (mPackage != other.mPackage) { + if (mPackage != null) { + if (!mPackage.equals(other.mPackage)) { + return false; + } + } else { + if (!other.mPackage.equals(mPackage)) { + return false; + } + } + } if (mComponent != other.mComponent) { if (mComponent != null) { if (!mComponent.equals(other.mComponent)) { @@ -4418,6 +4614,9 @@ public class Intent implements Parcelable { if (mType != null) { code += mType.hashCode(); } + if (mPackage != null) { + code += mPackage.hashCode(); + } if (mComponent != null) { code += mComponent.hashCode(); } @@ -4444,7 +4643,7 @@ public class Intent implements Parcelable { toShortString(b, comp, extras); return b.toString(); } - + /** @hide */ public void toShortString(StringBuilder b, boolean comp, boolean extras) { boolean first = true; @@ -4488,6 +4687,13 @@ public class Intent implements Parcelable { first = false; b.append("flg=0x").append(Integer.toHexString(mFlags)); } + if (mPackage != null) { + if (!first) { + b.append(' '); + } + first = false; + b.append("pkg=").append(mPackage); + } if (comp && mComponent != null) { if (!first) { b.append(' '); @@ -4504,28 +4710,87 @@ public class Intent implements Parcelable { } } + /** + * Call {@link #toUri} with 0 flags. + * @deprecated Use {@link #toUri} instead. + */ + @Deprecated public String toURI() { + return toUri(0); + } + + /** + * Convert this Intent into a String holding a URI representation of it. + * The returned URI string has been properly URI encoded, so it can be + * used with {@link Uri#parse Uri.parse(String)}. The URI contains the + * Intent's data as the base URI, with an additional fragment describing + * the action, categories, type, flags, package, component, and extras. + * + *

      You can convert the returned string back to an Intent with + * {@link #getIntent}. + * + * @param flags Additional operating flags. Either 0 or + * {@link #URI_INTENT_SCHEME}. + * + * @return Returns a URI encoding URI string describing the entire contents + * of the Intent. + */ + public String toUri(int flags) { StringBuilder uri = new StringBuilder(128); - if (mData != null) uri.append(mData.toString()); + String scheme = null; + if (mData != null) { + String data = mData.toString(); + if ((flags&URI_INTENT_SCHEME) != 0) { + final int N = data.length(); + for (int i=0; i= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') + || c == '.' || c == '-') { + continue; + } + if (c == ':' && i > 0) { + // Valid scheme. + scheme = data.substring(0, i); + uri.append("intent:"); + data = data.substring(i+1); + break; + } + + // No scheme. + break; + } + } + uri.append(data); + + } else if ((flags&URI_INTENT_SCHEME) != 0) { + uri.append("intent:"); + } uri.append("#Intent;"); + if (scheme != null) { + uri.append("scheme=").append(scheme).append(';'); + } if (mAction != null) { - uri.append("action=").append(mAction).append(';'); + uri.append("action=").append(Uri.encode(mAction)).append(';'); } if (mCategories != null) { for (String category : mCategories) { - uri.append("category=").append(category).append(';'); + uri.append("category=").append(Uri.encode(category)).append(';'); } } if (mType != null) { - uri.append("type=").append(mType).append(';'); + uri.append("type=").append(Uri.encode(mType, "/")).append(';'); } if (mFlags != 0) { uri.append("launchFlags=0x").append(Integer.toHexString(mFlags)).append(';'); } + if (mPackage != null) { + uri.append("package=").append(Uri.encode(mPackage)).append(';'); + } if (mComponent != null) { - uri.append("component=").append(mComponent.flattenToShortString()).append(';'); + uri.append("component=").append(Uri.encode( + mComponent.flattenToShortString(), "/")).append(';'); } if (mExtras != null) { for (String key : mExtras.keySet()) { @@ -4567,6 +4832,7 @@ public class Intent implements Parcelable { Uri.writeToParcel(out, mData); out.writeString(mType); out.writeInt(mFlags); + out.writeString(mPackage); ComponentName.writeToParcel(mComponent, out); if (mCategories != null) { @@ -4600,6 +4866,7 @@ public class Intent implements Parcelable { mData = Uri.CREATOR.createFromParcel(in); mType = in.readString(); mFlags = in.readInt(); + mPackage = in.readString(); mComponent = ComponentName.readFromParcel(in); int N = in.readInt(); diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java index e5c5dc8a5e0c..365f26983a33 100644 --- a/core/java/android/content/IntentFilter.java +++ b/core/java/android/content/IntentFilter.java @@ -366,6 +366,7 @@ public class IntentFilter implements Parcelable { throws MalformedMimeTypeException { mPriority = 0; mActions = new ArrayList(); + addAction(action); addDataType(dataType); } diff --git a/core/java/android/content/IntentSender.aidl b/core/java/android/content/IntentSender.aidl new file mode 100644 index 000000000000..741bc8c953cb --- /dev/null +++ b/core/java/android/content/IntentSender.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content; + +parcelable IntentSender; diff --git a/core/java/android/content/IntentSender.java b/core/java/android/content/IntentSender.java new file mode 100644 index 000000000000..4da49d974fd5 --- /dev/null +++ b/core/java/android/content/IntentSender.java @@ -0,0 +1,255 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content; + +import android.content.Context; +import android.content.Intent; +import android.content.IIntentSender; +import android.content.IIntentReceiver; +import android.os.Bundle; +import android.os.RemoteException; +import android.os.Handler; +import android.os.IBinder; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.AndroidException; + + +/** + * A description of an Intent and target action to perform with it. + * The returned object can be + * handed to other applications so that they can perform the action you + * described on your behalf at a later time. + * + *

      By giving a IntentSender to another application, + * you are granting it the right to perform the operation you have specified + * as if the other application was yourself (with the same permissions and + * identity). As such, you should be careful about how you build the IntentSender: + * often, for example, the base Intent you supply will have the component + * name explicitly set to one of your own components, to ensure it is ultimately + * sent there and nowhere else. + * + *

      A IntentSender itself is simply a reference to a token maintained by + * the system describing the original data used to retrieve it. This means + * that, even if its owning application's process is killed, the + * IntentSender itself will remain usable from other processes that + * have been given it. If the creating application later re-retrieves the + * same kind of IntentSender (same operation, same Intent action, data, + * categories, and components, and same flags), it will receive a IntentSender + * representing the same token if that is still valid. + * + */ +public class IntentSender implements Parcelable { + private final IIntentSender mTarget; + + /** + * Exception thrown when trying to send through a PendingIntent that + * has been canceled or is otherwise no longer able to execute the request. + */ + public static class SendIntentException extends AndroidException { + public SendIntentException() { + } + + public SendIntentException(String name) { + super(name); + } + + public SendIntentException(Exception cause) { + super(cause); + } + } + + /** + * Callback interface for discovering when a send operation has + * completed. Primarily for use with a IntentSender that is + * performing a broadcast, this provides the same information as + * calling {@link Context#sendOrderedBroadcast(Intent, String, + * android.content.BroadcastReceiver, Handler, int, String, Bundle) + * Context.sendBroadcast()} with a final BroadcastReceiver. + */ + public interface OnFinished { + /** + * Called when a send operation as completed. + * + * @param IntentSender The IntentSender this operation was sent through. + * @param intent The original Intent that was sent. + * @param resultCode The final result code determined by the send. + * @param resultData The final data collected by a broadcast. + * @param resultExtras The final extras collected by a broadcast. + */ + void onSendFinished(IntentSender IntentSender, Intent intent, + int resultCode, String resultData, Bundle resultExtras); + } + + private static class FinishedDispatcher extends IIntentReceiver.Stub + implements Runnable { + private final IntentSender mIntentSender; + private final OnFinished mWho; + private final Handler mHandler; + private Intent mIntent; + private int mResultCode; + private String mResultData; + private Bundle mResultExtras; + FinishedDispatcher(IntentSender pi, OnFinished who, Handler handler) { + mIntentSender = pi; + mWho = who; + mHandler = handler; + } + public void performReceive(Intent intent, int resultCode, + String data, Bundle extras, boolean serialized) { + mIntent = intent; + mResultCode = resultCode; + mResultData = data; + mResultExtras = extras; + if (mHandler == null) { + run(); + } else { + mHandler.post(this); + } + } + public void run() { + mWho.onSendFinished(mIntentSender, mIntent, mResultCode, + mResultData, mResultExtras); + } + } + + /** + * Perform the operation associated with this IntentSender, allowing the + * caller to specify information about the Intent to use and be notified + * when the send has completed. + * + * @param context The Context of the caller. This may be null if + * intent is also null. + * @param code Result code to supply back to the IntentSender's target. + * @param intent Additional Intent data. See {@link Intent#fillIn + * Intent.fillIn()} for information on how this is applied to the + * original Intent. Use null to not modify the original Intent. + * @param onFinished The object to call back on when the send has + * completed, or null for no callback. + * @param handler Handler identifying the thread on which the callback + * should happen. If null, the callback will happen from the thread + * pool of the process. + * + * + * @throws SendIntentException Throws CanceledIntentException if the IntentSender + * is no longer allowing more intents to be sent through it. + */ + public void sendIntent(Context context, int code, Intent intent, + OnFinished onFinished, Handler handler) throws SendIntentException { + try { + String resolvedType = intent != null ? + intent.resolveTypeIfNeeded(context.getContentResolver()) + : null; + int res = mTarget.send(code, intent, resolvedType, + onFinished != null + ? new FinishedDispatcher(this, onFinished, handler) + : null); + if (res < 0) { + throw new SendIntentException(); + } + } catch (RemoteException e) { + throw new SendIntentException(); + } + } + + /** + * Comparison operator on two IntentSender objects, such that true + * is returned then they both represent the same operation from the + * same package. + */ + @Override + public boolean equals(Object otherObj) { + if (otherObj instanceof IntentSender) { + return mTarget.asBinder().equals(((IntentSender)otherObj) + .mTarget.asBinder()); + } + return false; + } + + @Override + public int hashCode() { + return mTarget.asBinder().hashCode(); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(128); + sb.append("IntentSender{"); + sb.append(Integer.toHexString(System.identityHashCode(this))); + sb.append(": "); + sb.append(mTarget != null ? mTarget.asBinder() : null); + sb.append('}'); + return sb.toString(); + } + + public int describeContents() { + return 0; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeStrongBinder(mTarget.asBinder()); + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public IntentSender createFromParcel(Parcel in) { + IBinder target = in.readStrongBinder(); + return target != null ? new IntentSender(target) : null; + } + + public IntentSender[] newArray(int size) { + return new IntentSender[size]; + } + }; + + /** + * Convenience function for writing either a IntentSender or null pointer to + * a Parcel. You must use this with {@link #readIntentSenderOrNullFromParcel} + * for later reading it. + * + * @param sender The IntentSender to write, or null. + * @param out Where to write the IntentSender. + */ + public static void writeIntentSenderOrNullToParcel(IntentSender sender, + Parcel out) { + out.writeStrongBinder(sender != null ? sender.mTarget.asBinder() + : null); + } + + /** + * Convenience function for reading either a Messenger or null pointer from + * a Parcel. You must have previously written the Messenger with + * {@link #writeIntentSenderOrNullToParcel}. + * + * @param in The Parcel containing the written Messenger. + * + * @return Returns the Messenger read from the Parcel, or null if null had + * been written. + */ + public static IntentSender readIntentSenderOrNullFromParcel(Parcel in) { + IBinder b = in.readStrongBinder(); + return b != null ? new IntentSender(b) : null; + } + + protected IntentSender(IIntentSender target) { + mTarget = target; + } + + protected IntentSender(IBinder target) { + mTarget = IIntentSender.Stub.asInterface(target); + } +} diff --git a/core/java/android/content/SyncStorageEngine.java b/core/java/android/content/SyncStorageEngine.java index 9c25e73b0cf3..f781e0d0e12d 100644 --- a/core/java/android/content/SyncStorageEngine.java +++ b/core/java/android/content/SyncStorageEngine.java @@ -24,6 +24,7 @@ import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; +import android.backup.IBackupManager; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; @@ -35,6 +36,7 @@ import android.os.Message; import android.os.Parcel; import android.os.RemoteCallbackList; import android.os.RemoteException; +import android.os.ServiceManager; import android.util.Log; import android.util.SparseArray; import android.util.Xml; @@ -351,8 +353,18 @@ public class SyncStorageEngine extends Handler { } } } + // Inform the backup manager about a data change + IBackupManager ibm = IBackupManager.Stub.asInterface( + ServiceManager.getService(Context.BACKUP_SERVICE)); + if (ibm != null) { + try { + ibm.dataChanged("com.android.providers.settings"); + } catch (RemoteException e) { + // Try again later + } + } } - + public boolean getSyncProviderAutomatically(String account, String providerName) { synchronized (mAuthorities) { if (account != null) { diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java index 85d877a07017..27783efea9df 100644 --- a/core/java/android/content/pm/ActivityInfo.java +++ b/core/java/android/content/pm/ActivityInfo.java @@ -233,6 +233,12 @@ public class ActivityInfo extends ComponentInfo * {@link android.R.attr#configChanges} attribute. */ public static final int CONFIG_ORIENTATION = 0x0080; + /** + * Bit in {@link #configChanges} that indicates that the activity + * can itself handle changes to the screen layout. Set from the + * {@link android.R.attr#configChanges} attribute. + */ + public static final int CONFIG_SCREEN_LAYOUT = 0x0100; /** * Bit in {@link #configChanges} that indicates that the activity * can itself handle changes to the font scaling factor. Set from the @@ -248,8 +254,8 @@ public class ActivityInfo extends ComponentInfo * Contains any combination of {@link #CONFIG_FONT_SCALE}, * {@link #CONFIG_MCC}, {@link #CONFIG_MNC}, * {@link #CONFIG_LOCALE}, {@link #CONFIG_TOUCHSCREEN}, - * {@link #CONFIG_KEYBOARD}, {@link #CONFIG_NAVIGATION}, and - * {@link #CONFIG_ORIENTATION}. Set from the + * {@link #CONFIG_KEYBOARD}, {@link #CONFIG_NAVIGATION}, + * {@link #CONFIG_ORIENTATION}, and {@link #CONFIG_SCREEN_LAYOUT}. Set from the * {@link android.R.attr#configChanges} attribute. */ public int configChanges; diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index 88ac04c24e6d..bcf95b6f574e 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -58,10 +58,21 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * Class implementing the Application's manage space * functionality. From the "manageSpaceActivity" * attribute. This is an optional attribute and will be null if - * application's dont specify it in their manifest + * applications don't specify it in their manifest */ public String manageSpaceActivityName; + /** + * Class implementing the Application's backup functionality. From + * the "backupAgent" attribute. This is an optional attribute and + * will be null if the application does not specify it in its manifest. + * + *

      If android:allowBackup is set to false, this attribute is ignored. + * + * {@hide} + */ + public String backupAgentName; + /** * Value for {@link #flags}: if set, this application is installed in the * device's system image. @@ -93,7 +104,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { public static final int FLAG_PERSISTENT = 1<<3; /** - * Value for {@link #flags}: set to true iif this application holds the + * Value for {@link #flags}: set to true if this application holds the * {@link android.Manifest.permission#FACTORY_TEST} permission and the * device is running in factory test mode. */ @@ -123,13 +134,46 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * Value for {@link #flags}: this is set of the application has set * its android:targetSdkVersion to something >= the current SDK version. */ - public static final int FLAG_TARGETS_SDK = 1<<8; + public static final int FLAG_TEST_ONLY = 1<<8; /** - * Value for {@link #flags}: this is set of the application has set - * its android:targetSdkVersion to something >= the current SDK version. + * Value for {@link #flags}: true when the application's window can be + * reduced in size for smaller screens. Corresponds to + * {@link android.R.styleable#AndroidManifestSupportsScreens_smallScreens + * android:smallScreens}. */ - public static final int FLAG_TEST_ONLY = 1<<9; + public static final int FLAG_SUPPORTS_SMALL_SCREENS = 1<<9; + + /** + * Value for {@link #flags}: true when the application's window can be + * displayed on normal screens. Corresponds to + * {@link android.R.styleable#AndroidManifestSupportsScreens_normalScreens + * android:normalScreens}. + */ + public static final int FLAG_SUPPORTS_NORMAL_SCREENS = 1<<10; + + /** + * Value for {@link #flags}: true when the application's window can be + * increased in size for larger screens. Corresponds to + * {@link android.R.styleable#AndroidManifestSupportsScreens_largeScreens + * android:smallScreens}. + */ + public static final int FLAG_SUPPORTS_LARGE_SCREENS = 1<<11; + + /** + * Value for {@link #flags}: this is false if the application has set + * its android:allowBackup to false, true otherwise. + * + * {@hide} + */ + public static final int FLAG_ALLOW_BACKUP = 1<<12; + + /** + * Indicates that the application supports any densities; + * {@hide} + */ + public static final int ANY_DENSITY = -1; + private static final int[] ANY_DENSITIES_ARRAY = { ANY_DENSITY }; /** * Flags associated with the application. Any combination of @@ -137,7 +181,9 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * {@link #FLAG_PERSISTENT}, {@link #FLAG_FACTORY_TEST}, and * {@link #FLAG_ALLOW_TASK_REPARENTING} * {@link #FLAG_ALLOW_CLEAR_USER_DATA}, {@link #FLAG_UPDATED_SYSTEM_APP}, - * {@link #FLAG_TARGETS_SDK}. + * {@link #FLAG_TEST_ONLY}, {@link #FLAG_SUPPORTS_SMALL_SCREENS}, + * {@link #FLAG_SUPPORTS_NORMAL_SCREENS}, + * {@link #FLAG_SUPPORTS_LARGE_SCREENS}. */ public int flags = 0; @@ -173,7 +219,6 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { */ public int uid; - /** * The list of densities in DPI that application supprots. This * field is only set if the {@link PackageManager#GET_SUPPORTS_DENSITIES} flag was @@ -181,6 +226,16 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { */ public int[] supportsDensities; + /** + * The minimum SDK version this application targets. It may run on earilier + * versions, but it knows how to work with any new behavior added at this + * version. Will be {@link android.os.Build.VERSION_CODES#CUR_DEVELOPMENT} + * if this is a development build and the app is targeting that. You should + * compare that this number is >= the SDK version number at which your + * behavior was introduced. + */ + public int targetSdkVersion; + /** * When false, indicates that all components within this application are * considered disabled, regardless of their individually set enabled status. @@ -200,6 +255,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { pw.println(prefix + "publicSourceDir=" + publicSourceDir); pw.println(prefix + "sharedLibraryFiles=" + sharedLibraryFiles); pw.println(prefix + "dataDir=" + dataDir); + pw.println(prefix + "targetSdkVersion=" + targetSdkVersion); pw.println(prefix + "enabled=" + enabled); pw.println(prefix + "manageSpaceActivityName="+manageSpaceActivityName); pw.println(prefix + "description=0x"+Integer.toHexString(descriptionRes)); @@ -246,6 +302,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { sharedLibraryFiles = orig.sharedLibraryFiles; dataDir = orig.dataDir; uid = orig.uid; + targetSdkVersion = orig.targetSdkVersion; enabled = orig.enabled; manageSpaceActivityName = orig.manageSpaceActivityName; descriptionRes = orig.descriptionRes; @@ -276,8 +333,10 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { dest.writeStringArray(sharedLibraryFiles); dest.writeString(dataDir); dest.writeInt(uid); + dest.writeInt(targetSdkVersion); dest.writeInt(enabled ? 1 : 0); dest.writeString(manageSpaceActivityName); + dest.writeString(backupAgentName); dest.writeInt(descriptionRes); dest.writeIntArray(supportsDensities); } @@ -305,8 +364,10 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { sharedLibraryFiles = source.readStringArray(); dataDir = source.readString(); uid = source.readInt(); + targetSdkVersion = source.readInt(); enabled = source.readInt() != 0; manageSpaceActivityName = source.readString(); + backupAgentName = source.readString(); descriptionRes = source.readInt(); supportsDensities = source.createIntArray(); } @@ -331,4 +392,14 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { } return null; } + + /** + * Disable compatibility mode + * + * @hide + */ + public void disableCompatibilityMode() { + flags |= FLAG_SUPPORTS_LARGE_SCREENS; + supportsDensities = ANY_DENSITIES_ARRAY; + } } diff --git a/core/java/android/content/pm/ConfigurationInfo.java b/core/java/android/content/pm/ConfigurationInfo.java index dcc746331b0b..fb7a47fbd1bd 100755 --- a/core/java/android/content/pm/ConfigurationInfo.java +++ b/core/java/android/content/pm/ConfigurationInfo.java @@ -22,7 +22,7 @@ import android.os.Parcelable; /** * Information you can retrieve about hardware configuration preferences * declared by an application. This corresponds to information collected from the - * AndroidManifest.xml's <uses-configuration> tags. + * AndroidManifest.xml's <uses-configuration> and the <uses-feature>tags. */ public class ConfigurationInfo implements Parcelable { /** @@ -70,6 +70,16 @@ public class ConfigurationInfo implements Parcelable { */ public int reqInputFeatures = 0; + /** + * Default value for {@link #reqGlEsVersion}; + */ + public static final int GL_ES_VERSION_UNDEFINED = 0; + /** + * The GLES version used by an application. The upper order 16 bits represent the + * major version and the lower order 16 bits the minor version. + */ + public int reqGlEsVersion; + public ConfigurationInfo() { } @@ -78,6 +88,7 @@ public class ConfigurationInfo implements Parcelable { reqKeyboardType = orig.reqKeyboardType; reqNavigation = orig.reqNavigation; reqInputFeatures = orig.reqInputFeatures; + reqGlEsVersion = orig.reqGlEsVersion; } public String toString() { @@ -86,7 +97,8 @@ public class ConfigurationInfo implements Parcelable { + ", touchscreen = " + reqTouchScreen + "}" + ", inputMethod = " + reqKeyboardType + "}" + ", navigation = " + reqNavigation + "}" - + ", reqInputFeatures = " + reqInputFeatures + "}"; + + ", reqInputFeatures = " + reqInputFeatures + "}" + + ", reqGlEsVersion = " + reqGlEsVersion + "}"; } public int describeContents() { @@ -98,6 +110,7 @@ public class ConfigurationInfo implements Parcelable { dest.writeInt(reqKeyboardType); dest.writeInt(reqNavigation); dest.writeInt(reqInputFeatures); + dest.writeInt(reqGlEsVersion); } public static final Creator CREATOR = @@ -115,5 +128,18 @@ public class ConfigurationInfo implements Parcelable { reqKeyboardType = source.readInt(); reqNavigation = source.readInt(); reqInputFeatures = source.readInt(); + reqGlEsVersion = source.readInt(); + } + + /** + * This method extracts the major and minor version of reqGLEsVersion attribute + * and returns it as a string. Say reqGlEsVersion value of 0x00010002 is returned + * as 1.2 + * @return String representation of the reqGlEsVersion attribute + */ + public String getGlEsVersion() { + int major = ((reqGlEsVersion & 0xffff0000) >> 16); + int minor = reqGlEsVersion & 0x0000ffff; + return String.valueOf(major)+"."+String.valueOf(minor); } } diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index c199619c57a9..bf2a8959c7f4 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -34,7 +34,7 @@ import android.content.pm.PermissionInfo; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.net.Uri; -import android.app.PendingIntent; +import android.content.IntentSender; /** * See {@link PackageManager} for documentation on most of the APIs @@ -164,7 +164,12 @@ interface IPackageManager { void addPreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity); + + void replacePreferredActivity(in IntentFilter filter, int match, + in ComponentName[] set, in ComponentName activity); + void clearPackagePreferredActivities(String packageName); + int getPreferredActivities(out List outFilters, out List outActivities, String packageName); @@ -229,12 +234,12 @@ interface IPackageManager { * and the current free storage is YY, * if XX is less than YY, just return. if not free XX-YY number * of bytes if possible. - * @param opFinishedIntent PendingIntent call back used to + * @param pi IntentSender call back used to * notify when the operation is completed.May be null * to indicate that no call back is desired. */ void freeStorage(in long freeStorageSize, - in PendingIntent opFinishedIntent); + in IntentSender pi); /** * Delete all the cache files in an applications cache directory @@ -271,4 +276,11 @@ interface IPackageManager { boolean isSafeMode(); void systemReady(); boolean hasSystemUidErrors(); + + /** + * Ask the package manager to perform dex-opt (if needed) on the given + * package, if it already hasn't done mode. Only does this if running + * in the special development "no pre-dexopt" mode. + */ + boolean performDexOpt(String packageName); } diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 3a192f7eb749..941ca9e5bb74 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -16,12 +16,11 @@ package android.content.pm; - -import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.IntentSender; import android.content.res.Resources; import android.content.res.XmlResourceParser; import android.graphics.drawable.Drawable; @@ -397,6 +396,15 @@ public abstract class PackageManager { */ public static final int INSTALL_FAILED_TEST_ONLY = -15; + /** + * Installation return code: this is passed to the {@link IPackageInstallObserver} by + * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if + * the package being installed contains native code, but none that is + * compatible with the the device's CPU_ABI. + * @hide + */ + public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16; + /** * Installation parse return code: this is passed to the {@link IPackageInstallObserver} by * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} @@ -563,9 +571,8 @@ public abstract class PackageManager { * launch the main activity in the package, or null if the package does * not contain such an activity. */ - public abstract Intent getLaunchIntentForPackage(String packageName) - throws NameNotFoundException; - + public abstract Intent getLaunchIntentForPackage(String packageName); + /** * Return an array of all of the secondary group-ids that have been * assigned to a package. @@ -1491,7 +1498,7 @@ public abstract class PackageManager { * @hide */ public abstract void freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer); - + /** * Free storage by deleting LRU sorted list of cache files across * all applications. If the currently available free storage @@ -1509,13 +1516,13 @@ public abstract class PackageManager { * and the current free storage is YY, * if XX is less than YY, just return. if not free XX-YY number * of bytes if possible. - * @param opFinishedIntent PendingIntent call back used to + * @param pi IntentSender call back used to * notify when the operation is completed.May be null * to indicate that no call back is desired. * * @hide */ - public abstract void freeStorage(long freeStorageSize, PendingIntent opFinishedIntent); + public abstract void freeStorage(long freeStorageSize, IntentSender pi); /** * Retrieve the size information for a package. @@ -1604,6 +1611,26 @@ public abstract class PackageManager { public abstract void addPreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity); + /** + * Replaces an existing preferred activity mapping to the system, and if that were not present + * adds a new preferred activity. This will be used + * to automatically select the given activity component when + * {@link Context#startActivity(Intent) Context.startActivity()} finds + * multiple matching activities and also matches the given filter. + * + * @param filter The set of intents under which this activity will be + * made preferred. + * @param match The IntentFilter match category that this preference + * applies to. + * @param set The set of activities that the user was picking from when + * this preference was made. + * @param activity The component name of the activity that is to be + * preferred. + * @hide + */ + public abstract void replacePreferredActivity(IntentFilter filter, int match, + ComponentName[] set, ComponentName activity); + /** * Remove all preferred activity mappings, previously added with * {@link #addPreferredActivity}, from the diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 88907c180117..558b0c3e369a 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -55,6 +55,32 @@ import java.util.jar.JarFile; * {@hide} */ public class PackageParser { + /** @hide */ + public static class NewPermissionInfo { + public final String name; + public final int sdkVersion; + public final int fileVersion; + + public NewPermissionInfo(String name, int sdkVersion, int fileVersion) { + this.name = name; + this.sdkVersion = sdkVersion; + this.fileVersion = fileVersion; + } + } + + /** + * List of new permissions that have been added since 1.0. + * NOTE: These must be declared in SDK version order, with permissions + * added to older SDKs appearing before those added to newer SDKs. + * @hide + */ + public static final PackageParser.NewPermissionInfo NEW_PERMISSIONS[] = + new PackageParser.NewPermissionInfo[] { + new PackageParser.NewPermissionInfo(android.Manifest.permission.WRITE_EXTERNAL_STORAGE, + android.os.Build.VERSION_CODES.DONUT, 0), + new PackageParser.NewPermissionInfo(android.Manifest.permission.READ_PHONE_STATE, + android.os.Build.VERSION_CODES.DONUT, 0) + }; private String mArchiveSourcePath; private String[] mSeparateProcesses; @@ -616,7 +642,6 @@ public class PackageParser { final Package pkg = new Package(pkgName); boolean foundApp = false; - boolean targetsSdk = false; TypedArray sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.AndroidManifest); @@ -643,6 +668,11 @@ public class PackageParser { } sa.recycle(); + // Resource boolean are -1, so 1 means we don't know the value. + int supportsSmallScreens = 1; + int supportsNormalScreens = 1; + int supportsLargeScreens = 1; + int outerDepth = parser.getDepth(); while ((type=parser.next()) != parser.END_DOCUMENT && (type != parser.END_TAG || parser.getDepth() > outerDepth)) { @@ -723,6 +753,18 @@ public class PackageParser { XmlUtils.skipCurrentTag(parser); + } else if (tagName.equals("uses-feature")) { + ConfigurationInfo cPref = new ConfigurationInfo(); + sa = res.obtainAttributes(attrs, + com.android.internal.R.styleable.AndroidManifestUsesFeature); + cPref.reqGlEsVersion = sa.getInt( + com.android.internal.R.styleable.AndroidManifestUsesFeature_glEsVersion, + ConfigurationInfo.GL_ES_VERSION_UNDEFINED); + sa.recycle(); + pkg.configPreferences.add(cPref); + + XmlUtils.skipCurrentTag(parser); + } else if (tagName.equals("uses-sdk")) { if (mSdkVersion > 0) { sa = res.obtainAttributes(attrs, @@ -740,7 +782,7 @@ public class PackageParser { targetCode = minCode = val.string.toString(); } else { // If it's not a string, it's an integer. - minVers = val.data; + targetVers = minVers = val.data; } } @@ -761,6 +803,25 @@ public class PackageParser { sa.recycle(); + if (minCode != null) { + if (!minCode.equals(mSdkCodename)) { + if (mSdkCodename != null) { + outError[0] = "Requires development platform " + minCode + + " (current platform is " + mSdkCodename + ")"; + } else { + outError[0] = "Requires development platform " + minCode + + " but this is a release platform."; + } + mParseError = PackageManager.INSTALL_FAILED_OLDER_SDK; + return null; + } + } else if (minVers > mSdkVersion) { + outError[0] = "Requires newer sdk version #" + minVers + + " (current version is #" + mSdkVersion + ")"; + mParseError = PackageManager.INSTALL_FAILED_OLDER_SDK; + return null; + } + if (targetCode != null) { if (!targetCode.equals(mSdkCodename)) { if (mSdkCodename != null) { @@ -774,18 +835,10 @@ public class PackageParser { return null; } // If the code matches, it definitely targets this SDK. - targetsSdk = true; - } else if (targetVers >= mSdkVersion) { - // If they have explicitly targeted our current version - // or something after it, then note this. - targetsSdk = true; - } - - if (minVers > mSdkVersion) { - outError[0] = "Requires newer sdk version #" + minVers - + " (current version is #" + mSdkVersion + ")"; - mParseError = PackageManager.INSTALL_FAILED_OLDER_SDK; - return null; + pkg.applicationInfo.targetSdkVersion + = android.os.Build.VERSION_CODES.CUR_DEVELOPMENT; + } else { + pkg.applicationInfo.targetSdkVersion = targetVers; } if (maxVers < mSdkVersion) { @@ -811,6 +864,42 @@ public class PackageParser { + parser.getName(); mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; return null; + + + } else if (tagName.equals("supports-density")) { + sa = res.obtainAttributes(attrs, + com.android.internal.R.styleable.AndroidManifestSupportsDensity); + + int density = sa.getInteger( + com.android.internal.R.styleable.AndroidManifestSupportsDensity_density, -1); + + sa.recycle(); + + if (density != -1 && !pkg.supportsDensityList.contains(density)) { + pkg.supportsDensityList.add(density); + } + + XmlUtils.skipCurrentTag(parser); + + } else if (tagName.equals("supports-screens")) { + sa = res.obtainAttributes(attrs, + com.android.internal.R.styleable.AndroidManifestSupportsScreens); + + // This is a trick to get a boolean and still able to detect + // if a value was actually set. + supportsSmallScreens = sa.getInteger( + com.android.internal.R.styleable.AndroidManifestSupportsScreens_smallScreens, + supportsSmallScreens); + supportsNormalScreens = sa.getInteger( + com.android.internal.R.styleable.AndroidManifestSupportsScreens_normalScreens, + supportsNormalScreens); + supportsLargeScreens = sa.getInteger( + com.android.internal.R.styleable.AndroidManifestSupportsScreens_largeScreens, + supportsLargeScreens); + + sa.recycle(); + + XmlUtils.skipCurrentTag(parser); } else { Log.w(TAG, "Bad element under : " + parser.getName()); @@ -824,15 +913,39 @@ public class PackageParser { mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_EMPTY; } - if (targetsSdk) { - pkg.applicationInfo.flags |= ApplicationInfo.FLAG_TARGETS_SDK; + final int NP = PackageParser.NEW_PERMISSIONS.length; + for (int ip=0; ip= npi.sdkVersion) { + break; + } + if (!pkg.requestedPermissions.contains(npi.name)) { + Log.i(TAG, "Impliciting adding " + npi.name + " to old pkg " + + pkg.packageName); + pkg.requestedPermissions.add(npi.name); + } } if (pkg.usesLibraries.size() > 0) { pkg.usesLibraryFiles = new String[pkg.usesLibraries.size()]; pkg.usesLibraries.toArray(pkg.usesLibraryFiles); } - + + if (supportsSmallScreens < 0 || (supportsSmallScreens > 0 + && pkg.applicationInfo.targetSdkVersion + >= android.os.Build.VERSION_CODES.CUR_DEVELOPMENT)) { + pkg.applicationInfo.flags |= ApplicationInfo.FLAG_SUPPORTS_SMALL_SCREENS; + } + if (supportsNormalScreens != 0) { + pkg.applicationInfo.flags |= ApplicationInfo.FLAG_SUPPORTS_NORMAL_SCREENS; + } + if (supportsLargeScreens < 0 || (supportsLargeScreens > 0 + && pkg.applicationInfo.targetSdkVersion + >= android.os.Build.VERSION_CODES.CUR_DEVELOPMENT)) { + pkg.applicationInfo.flags |= ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS; + } + int size = pkg.supportsDensityList.size(); if (size > 0) { int densities[] = pkg.supportsDensities = new int[size]; @@ -1142,6 +1255,19 @@ public class PackageParser { outError); } + boolean allowBackup = sa.getBoolean( + com.android.internal.R.styleable.AndroidManifestApplication_allowBackup, true); + if (allowBackup) { + ai.flags |= ApplicationInfo.FLAG_ALLOW_BACKUP; + String backupAgent = sa.getNonResourceString( + com.android.internal.R.styleable.AndroidManifestApplication_backupAgent); + if (backupAgent != null) { + ai.backupAgentName = buildClassName(pkgName, backupAgent, outError); + Log.v(TAG, "android:backupAgent = " + ai.backupAgentName + + " from " + pkgName + "+" + backupAgent); + } + } + TypedValue v = sa.peekValue( com.android.internal.R.styleable.AndroidManifestApplication_label); if (v != null && (ai.labelRes=v.resourceId) == 0) { @@ -1298,21 +1424,6 @@ public class PackageParser { XmlUtils.skipCurrentTag(parser); - } else if (tagName.equals("supports-density")) { - sa = res.obtainAttributes(attrs, - com.android.internal.R.styleable.AndroidManifestSupportsDensity); - - int density = sa.getInteger( - com.android.internal.R.styleable.AndroidManifestSupportsDensity_density, -1); - - sa.recycle(); - - if (density != -1 && !owner.supportsDensityList.contains(density)) { - owner.supportsDensityList.add(density); - } - - XmlUtils.skipCurrentTag(parser); - } else { if (!RIGID_PARSER) { Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":"); @@ -2219,6 +2330,17 @@ public class PackageParser { // preferred up order. public int mPreferredOrder = 0; + // For use by package manager service to keep track of which apps + // have been installed with forward locking. + public boolean mForwardLocked; + + // For use by the package manager to keep track of the path to the + // file an app came from. + public String mScanPath; + + // For use by package manager to keep track of where it has done dexopt. + public boolean mDidDexOpt; + // Additional data supplied by callers. public Object mExtras; @@ -2368,7 +2490,7 @@ public class PackageParser { return true; } if ((flags & PackageManager.GET_SUPPORTS_DENSITIES) != 0 - && p.supportsDensities != null) { + && p.supportsDensities != null) { return true; } return false; diff --git a/core/java/android/content/res/AssetFileDescriptor.java b/core/java/android/content/res/AssetFileDescriptor.java index 231e3e24a27c..a37e4e8cc3bf 100644 --- a/core/java/android/content/res/AssetFileDescriptor.java +++ b/core/java/android/content/res/AssetFileDescriptor.java @@ -16,6 +16,7 @@ package android.content.res; +import android.os.MemoryFile; import android.os.Parcel; import android.os.ParcelFileDescriptor; import android.os.Parcelable; @@ -24,6 +25,8 @@ import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.nio.channels.FileChannel; /** * File descriptor of an entry in the AssetManager. This provides your own @@ -123,6 +126,13 @@ public class AssetFileDescriptor implements Parcelable { mFd.close(); } + /** + * Checks whether this file descriptor is for a memory file. + */ + private boolean isMemoryFile() throws IOException { + return MemoryFile.isMemoryFile(mFd.getFileDescriptor()); + } + /** * Create and return a new auto-close input stream for this asset. This * will either return a full asset {@link AutoCloseInputStream}, or @@ -132,6 +142,12 @@ public class AssetFileDescriptor implements Parcelable { * should only call this once for a particular asset. */ public FileInputStream createInputStream() throws IOException { + if (isMemoryFile()) { + if (mLength > Integer.MAX_VALUE) { + throw new IOException("File length too large for a memory file: " + mLength); + } + return new AutoCloseMemoryFileInputStream(mFd, (int)mLength); + } if (mLength < 0) { return new ParcelFileDescriptor.AutoCloseInputStream(mFd); } @@ -261,6 +277,66 @@ public class AssetFileDescriptor implements Parcelable { } } + /** + * An input stream that reads from a MemoryFile and closes it when the stream is closed. + * This extends FileInputStream just because {@link #createInputStream} returns + * a FileInputStream. All the FileInputStream methods are + * overridden to use the MemoryFile instead. + */ + private static class AutoCloseMemoryFileInputStream extends FileInputStream { + private ParcelFileDescriptor mParcelFd; + private MemoryFile mFile; + private InputStream mStream; + + public AutoCloseMemoryFileInputStream(ParcelFileDescriptor fd, int length) + throws IOException { + super(fd.getFileDescriptor()); + mParcelFd = fd; + mFile = new MemoryFile(fd.getFileDescriptor(), length, "r"); + mStream = mFile.getInputStream(); + } + + @Override + public int available() throws IOException { + return mStream.available(); + } + + @Override + public void close() throws IOException { + mParcelFd.close(); // must close ParcelFileDescriptor, not just the file descriptor, + // since it could be a subclass of ParcelFileDescriptor. + // E.g. ContentResolver.ParcelFileDescriptorInner.close() releases + // a content provider + mFile.close(); // to unmap the memory file from the address space. + mStream.close(); // doesn't actually do anything + } + + @Override + public FileChannel getChannel() { + return null; + } + + @Override + public int read() throws IOException { + return mStream.read(); + } + + @Override + public int read(byte[] buffer, int offset, int count) throws IOException { + return mStream.read(buffer, offset, count); + } + + @Override + public int read(byte[] buffer) throws IOException { + return mStream.read(buffer); + } + + @Override + public long skip(long count) throws IOException { + return mStream.skip(count); + } + } + /** * An OutputStream you can create on a ParcelFileDescriptor, which will * take care of calling {@link ParcelFileDescriptor#close @@ -345,4 +421,16 @@ public class AssetFileDescriptor implements Parcelable { return new AssetFileDescriptor[size]; } }; + + /** + * Creates an AssetFileDescriptor from a memory file. + * + * @hide + */ + public static AssetFileDescriptor fromMemoryFile(MemoryFile memoryFile) + throws IOException { + ParcelFileDescriptor fd = memoryFile.getParcelFileDescriptor(); + return new AssetFileDescriptor(fd, 0, memoryFile.length()); + } + } diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java index 1c9173694d2b..5c7b01fa0ccb 100644 --- a/core/java/android/content/res/AssetManager.java +++ b/core/java/android/content/res/AssetManager.java @@ -601,7 +601,7 @@ public final class AssetManager { public native final void setConfiguration(int mcc, int mnc, String locale, int orientation, int touchscreen, int density, int keyboard, int keyboardHidden, int navigation, int screenWidth, int screenHeight, - int majorVersion); + int screenLayout, int majorVersion); /** * Retrieve the resource identifier for the given resource name. diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java new file mode 100644 index 000000000000..dfe304d1593d --- /dev/null +++ b/core/java/android/content/res/CompatibilityInfo.java @@ -0,0 +1,491 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.content.res; + +import android.content.pm.ApplicationInfo; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.Region; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.WindowManager; +import android.view.WindowManager.LayoutParams; + +/** + * CompatibilityInfo class keeps the information about compatibility mode that the application is + * running under. + * + * {@hide} + */ +public class CompatibilityInfo { + private static final boolean DBG = false; + private static final String TAG = "CompatibilityInfo"; + + /** default compatibility info object for compatible applications */ + public static final CompatibilityInfo DEFAULT_COMPATIBILITY_INFO = new CompatibilityInfo(); + + /** + * The default width of the screen in portrait mode. + */ + public static final int DEFAULT_PORTRAIT_WIDTH = 320; + + /** + * The default height of the screen in portrait mode. + */ + public static final int DEFAULT_PORTRAIT_HEIGHT = 480; + + /** + * The x-shift mode that controls the position of the content or the window under + * compatibility mode. + * {@see getTranslator} + * {@see Translator#mShiftMode} + */ + private static final int X_SHIFT_NONE = 0; + private static final int X_SHIFT_CONTENT = 1; + private static final int X_SHIFT_AND_CLIP_CONTENT = 2; + private static final int X_SHIFT_WINDOW = 3; + + + /** + * A compatibility flags + */ + private int mCompatibilityFlags; + + /** + * A flag mask to tell if the application needs scaling (when mApplicationScale != 1.0f) + * {@see compatibilityFlag} + */ + private static final int SCALING_REQUIRED = 1; + + /** + * A flag mask to indicates that the application can expand over the original size. + * The flag is set to true if + * 1) Application declares its expandable in manifest file using or + * 2) The screen size is same as (320 x 480) * density. + * {@see compatibilityFlag} + */ + private static final int EXPANDABLE = 2; + + /** + * A flag mask to tell if the application is configured to be expandable. This differs + * from EXPANDABLE in that the application that is not expandable will be + * marked as expandable if it runs in (320x 480) * density screen size. + */ + private static final int CONFIGURED_EXPANDABLE = 4; + + private static final int SCALING_EXPANDABLE_MASK = SCALING_REQUIRED | EXPANDABLE; + + /** + * Application's scale. + */ + public final float applicationScale; + + /** + * Application's inverted scale. + */ + public final float applicationInvertedScale; + + /** + * The flags from ApplicationInfo. + */ + public final int appFlags; + + /** + * Window size in Compatibility Mode, in real pixels. This is updated by + * {@link DisplayMetrics#updateMetrics}. + */ + private int mWidth; + private int mHeight; + + /** + * The x offset to center the window content. In X_SHIFT_WINDOW mode, the offset is added + * to the window's layout. In X_SHIFT_CONTENT/X_SHIFT_AND_CLIP_CONTENT mode, the offset + * is used to translate the Canvas. + */ + private int mXOffset; + + public CompatibilityInfo(ApplicationInfo appInfo) { + appFlags = appInfo.flags; + + if ((appInfo.flags & ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS) != 0) { + mCompatibilityFlags = EXPANDABLE | CONFIGURED_EXPANDABLE; + } + + float packageDensityScale = -1.0f; + if (appInfo.supportsDensities != null) { + int minDiff = Integer.MAX_VALUE; + for (int density : appInfo.supportsDensities) { + if (density == ApplicationInfo.ANY_DENSITY) { + packageDensityScale = 1.0f; + break; + } + int tmpDiff = Math.abs(DisplayMetrics.DEVICE_DENSITY - density); + if (tmpDiff == 0) { + packageDensityScale = 1.0f; + break; + } + // prefer higher density (appScale>1.0), unless that's only option. + if (tmpDiff < minDiff && packageDensityScale < 1.0f) { + packageDensityScale = DisplayMetrics.DEVICE_DENSITY / (float) density; + minDiff = tmpDiff; + } + } + } + if (packageDensityScale > 0.0f) { + applicationScale = packageDensityScale; + } else { + applicationScale = + DisplayMetrics.DEVICE_DENSITY / (float) DisplayMetrics.DEFAULT_DENSITY; + } + applicationInvertedScale = 1.0f / applicationScale; + if (applicationScale != 1.0f) { + mCompatibilityFlags |= SCALING_REQUIRED; + } + } + + private CompatibilityInfo(int appFlags, int compFlags, float scale, float invertedScale) { + this.appFlags = appFlags; + mCompatibilityFlags = compFlags; + applicationScale = scale; + applicationInvertedScale = invertedScale; + } + + private CompatibilityInfo() { + this(ApplicationInfo.FLAG_SUPPORTS_SMALL_SCREENS + | ApplicationInfo.FLAG_SUPPORTS_NORMAL_SCREENS + | ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS, + EXPANDABLE | CONFIGURED_EXPANDABLE, + 1.0f, + 1.0f); + } + + /** + * Returns the copy of this instance. + */ + public CompatibilityInfo copy() { + CompatibilityInfo info = new CompatibilityInfo(appFlags, mCompatibilityFlags, + applicationScale, applicationInvertedScale); + info.setVisibleRect(mXOffset, mWidth, mHeight); + return info; + } + + /** + * Sets the application's visible rect in compatibility mode. + * @param xOffset the application's x offset that is added to center the content. + * @param widthPixels the application's width in real pixels on the screen. + * @param heightPixels the application's height in real pixels on the screen. + */ + public void setVisibleRect(int xOffset, int widthPixels, int heightPixels) { + this.mXOffset = xOffset; + mWidth = widthPixels; + mHeight = heightPixels; + } + + /** + * Sets expandable bit in the compatibility flag. + */ + public void setExpandable(boolean expandable) { + if (expandable) { + mCompatibilityFlags |= CompatibilityInfo.EXPANDABLE; + } else { + mCompatibilityFlags &= ~CompatibilityInfo.EXPANDABLE; + } + } + + /** + * @return true if the application is configured to be expandable. + */ + public boolean isConfiguredExpandable() { + return (mCompatibilityFlags & CompatibilityInfo.CONFIGURED_EXPANDABLE) != 0; + } + + /** + * @return true if the scaling is required + */ + public boolean isScalingRequired() { + return (mCompatibilityFlags & SCALING_REQUIRED) != 0; + } + + @Override + public String toString() { + return "CompatibilityInfo{scale=" + applicationScale + + ", compatibility flag=" + mCompatibilityFlags + "}"; + } + + /** + * Returns the translator which can translate the coordinates of the window. + * There are five different types of Translator. + * + * 1) {@link CompatibilityInfo#X_SHIFT_AND_CLIP_CONTENT} + * Shift and clip the content of the window at drawing time. Used for activities' + * main window (with no gravity). + * 2) {@link CompatibilityInfo#X_SHIFT_CONTENT} + * Shift the content of the window at drawing time. Used for windows that is created by + * an application and expected to be aligned with the application window. + * 3) {@link CompatibilityInfo#X_SHIFT_WINDOW} + * Create the window with adjusted x- coordinates. This is typically used + * in popup window, where it has to be placed relative to main window. + * 4) {@link CompatibilityInfo#X_SHIFT_NONE} + * No adjustment required, such as dialog. + * 5) Same as X_SHIFT_WINDOW, but no scaling. This is used by {@link SurfaceView}, which + * does not require scaling, but its window's location has to be adjusted. + * + * @param params the window's parameter + */ + public Translator getTranslator(WindowManager.LayoutParams params) { + if ( (mCompatibilityFlags & CompatibilityInfo.SCALING_EXPANDABLE_MASK) + == CompatibilityInfo.EXPANDABLE) { + if (DBG) Log.d(TAG, "no translation required"); + return null; + } + + if ((mCompatibilityFlags & CompatibilityInfo.EXPANDABLE) == 0) { + if ((params.flags & WindowManager.LayoutParams.FLAG_NO_COMPATIBILITY_SCALING) != 0) { + if (DBG) Log.d(TAG, "translation for surface view selected"); + return new Translator(X_SHIFT_WINDOW, false, 1.0f, 1.0f); + } else { + int shiftMode; + if (params.gravity == Gravity.NO_GRAVITY) { + // For Regular Application window + shiftMode = X_SHIFT_AND_CLIP_CONTENT; + if (DBG) Log.d(TAG, "shift and clip translator"); + } else if (params.width == WindowManager.LayoutParams.FILL_PARENT) { + // For Regular Application window + shiftMode = X_SHIFT_CONTENT; + if (DBG) Log.d(TAG, "shift content translator"); + } else if ((params.gravity & Gravity.LEFT) != 0 && params.x > 0) { + shiftMode = X_SHIFT_WINDOW; + if (DBG) Log.d(TAG, "shift window translator"); + } else { + shiftMode = X_SHIFT_NONE; + if (DBG) Log.d(TAG, "no content/window translator"); + } + return new Translator(shiftMode); + } + } else if (isScalingRequired()) { + return new Translator(); + } else { + return null; + } + } + + /** + * A helper object to translate the screen and window coordinates back and forth. + * @hide + */ + public class Translator { + final private int mShiftMode; + final public boolean scalingRequired; + final public float applicationScale; + final public float applicationInvertedScale; + + private Rect mContentInsetsBuffer = null; + private Rect mVisibleInsets = null; + + Translator(int shiftMode, boolean scalingRequired, float applicationScale, + float applicationInvertedScale) { + mShiftMode = shiftMode; + this.scalingRequired = scalingRequired; + this.applicationScale = applicationScale; + this.applicationInvertedScale = applicationInvertedScale; + } + + Translator(int shiftMode) { + this(shiftMode, + isScalingRequired(), + CompatibilityInfo.this.applicationScale, + CompatibilityInfo.this.applicationInvertedScale); + } + + Translator() { + this(X_SHIFT_NONE); + } + + /** + * Translate the screen rect to the application frame. + */ + public void translateRectInScreenToAppWinFrame(Rect rect) { + if (rect.isEmpty()) return; // skip if the window size is empty. + switch (mShiftMode) { + case X_SHIFT_AND_CLIP_CONTENT: + rect.intersect(0, 0, mWidth, mHeight); + break; + case X_SHIFT_CONTENT: + rect.intersect(0, 0, mWidth + mXOffset, mHeight); + break; + case X_SHIFT_WINDOW: + case X_SHIFT_NONE: + break; + } + if (scalingRequired) { + rect.scale(applicationInvertedScale); + } + } + + /** + * Translate the region in window to screen. + */ + public void translateRegionInWindowToScreen(Region transparentRegion) { + switch (mShiftMode) { + case X_SHIFT_AND_CLIP_CONTENT: + case X_SHIFT_CONTENT: + transparentRegion.scale(applicationScale); + transparentRegion.translate(mXOffset, 0); + break; + case X_SHIFT_WINDOW: + case X_SHIFT_NONE: + transparentRegion.scale(applicationScale); + } + } + + /** + * Apply translation to the canvas that is necessary to draw the content. + */ + public void translateCanvas(Canvas canvas) { + if (mShiftMode == X_SHIFT_CONTENT || + mShiftMode == X_SHIFT_AND_CLIP_CONTENT) { + // TODO: clear outside when rotation is changed. + + // Translate x-offset only when the content is shifted. + canvas.translate(mXOffset, 0); + } + if (scalingRequired) { + canvas.scale(applicationScale, applicationScale); + } + } + + /** + * Translate the motion event captured on screen to the application's window. + */ + public void translateEventInScreenToAppWindow(MotionEvent event) { + if (mShiftMode == X_SHIFT_CONTENT || + mShiftMode == X_SHIFT_AND_CLIP_CONTENT) { + event.translate(-mXOffset, 0); + } + if (scalingRequired) { + event.scale(applicationInvertedScale); + } + } + + /** + * Translate the window's layout parameter, from application's view to + * Screen's view. + */ + public void translateWindowLayout(WindowManager.LayoutParams params) { + switch (mShiftMode) { + case X_SHIFT_NONE: + case X_SHIFT_AND_CLIP_CONTENT: + case X_SHIFT_CONTENT: + params.scale(applicationScale); + break; + case X_SHIFT_WINDOW: + params.scale(applicationScale); + params.x += mXOffset; + break; + } + } + + /** + * Translate a Rect in application's window to screen. + */ + public void translateRectInAppWindowToScreen(Rect rect) { + // TODO Auto-generated method stub + if (scalingRequired) { + rect.scale(applicationScale); + } + switch(mShiftMode) { + case X_SHIFT_NONE: + case X_SHIFT_WINDOW: + break; + case X_SHIFT_CONTENT: + case X_SHIFT_AND_CLIP_CONTENT: + rect.offset(mXOffset, 0); + break; + } + } + + /** + * Translate a Rect in screen coordinates into the app window's coordinates. + */ + public void translateRectInScreenToAppWindow(Rect rect) { + switch (mShiftMode) { + case X_SHIFT_NONE: + case X_SHIFT_WINDOW: + break; + case X_SHIFT_CONTENT: { + rect.intersects(mXOffset, 0, rect.right, rect.bottom); + int dx = Math.min(mXOffset, rect.left); + rect.offset(-dx, 0); + break; + } + case X_SHIFT_AND_CLIP_CONTENT: { + rect.intersects(mXOffset, 0, mWidth + mXOffset, mHeight); + int dx = Math.min(mXOffset, rect.left); + rect.offset(-dx, 0); + break; + } + } + if (scalingRequired) { + rect.scale(applicationInvertedScale); + } + } + + /** + * Translate the location of the sub window. + * @param params + */ + public void translateLayoutParamsInAppWindowToScreen(LayoutParams params) { + if (scalingRequired) { + params.scale(applicationScale); + } + switch (mShiftMode) { + // the window location on these mode does not require adjustmenet. + case X_SHIFT_NONE: + case X_SHIFT_WINDOW: + break; + case X_SHIFT_CONTENT: + case X_SHIFT_AND_CLIP_CONTENT: + params.x += mXOffset; + break; + } + } + + /** + * Translate the content insets in application window to Screen. This uses + * the internal buffer for content insets to avoid extra object allocation. + */ + public Rect getTranslatedContentInsets(Rect contentInsets) { + if (mContentInsetsBuffer == null) mContentInsetsBuffer = new Rect(); + mContentInsetsBuffer.set(contentInsets); + translateRectInAppWindowToScreen(mContentInsetsBuffer); + return mContentInsetsBuffer; + } + + /** + * Translate the visible insets in application window to Screen. This uses + * the internal buffer for content insets to avoid extra object allocation. + */ + public Rect getTranslatedVisbileInsets(Rect visibleInsets) { + if (mVisibleInsets == null) mVisibleInsets = new Rect(); + mVisibleInsets.set(visibleInsets); + translateRectInAppWindowToScreen(mVisibleInsets); + return mVisibleInsets; + } + } +} diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index bb3486c20554..577aa600a19e 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -116,6 +116,18 @@ public final class Configuration implements Parcelable, Comparable SparseArray emptySparseArray() { - return (SparseArray) EMPTY_ARRAY; + private static LongSparseArray emptySparseArray() { + return (LongSparseArray) EMPTY_ARRAY; } /** @@ -126,26 +129,59 @@ public class Resources { */ public Resources(AssetManager assets, DisplayMetrics metrics, Configuration config) { - this(assets, metrics, config, true); + this(assets, metrics, config, (ApplicationInfo) null); } /** - * Create a resource with an additional flag for preloaded - * drawable cache. Used by {@link ActivityThread}. - * + * Creates a new Resources object with ApplicationInfo. + * + * @param assets Previously created AssetManager. + * @param metrics Current display metrics to consider when + * selecting/computing resource values. + * @param config Desired device configuration to consider when + * selecting/computing resource values (optional). + * @param appInfo this resource's application info. * @hide */ public Resources(AssetManager assets, DisplayMetrics metrics, - Configuration config, boolean usePreloadedCache) { + Configuration config, ApplicationInfo appInfo) { mAssets = assets; mConfiguration.setToDefaults(); mMetrics.setToDefaults(); + if (appInfo != null) { + mCompatibilityInfo = new CompatibilityInfo(appInfo); + if (DEBUG_CONFIG) { + Log.d(TAG, "compatibility for " + appInfo.packageName + " : " + mCompatibilityInfo); + } + } else { + mCompatibilityInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO; + } updateConfiguration(config, metrics); assets.ensureStringBlocks(); - if (usePreloadedCache) { - mPreloadedDrawables = sPreloadedDrawables; + if (mCompatibilityInfo.isScalingRequired()) { + mPreloadedDrawables = emptySparseArray(); } else { + mPreloadedDrawables = sPreloadedDrawables; + } + } + + /** + * Creates a new resources that uses the given compatibility info. Used to create + * a context for widgets using the container's compatibility info. + * {@see ApplicationContext#createPackageCotnext}. + * @hide + */ + public Resources(AssetManager assets, DisplayMetrics metrics, + Configuration config, CompatibilityInfo info) { + mAssets = assets; + mMetrics.setToDefaults(); + mCompatibilityInfo = info; + updateConfiguration(config, metrics); + assets.ensureStringBlocks(); + if (mCompatibilityInfo.isScalingRequired()) { mPreloadedDrawables = emptySparseArray(); + } else { + mPreloadedDrawables = sPreloadedDrawables; } } @@ -1238,7 +1274,7 @@ public class Resources { return array; } - + /** * Store the newly updated configuration. */ @@ -1251,6 +1287,8 @@ public class Resources { } if (metrics != null) { mMetrics.setTo(metrics); + mMetrics.updateMetrics(mCompatibilityInfo, + mConfiguration.orientation, mConfiguration.screenLayout); } mMetrics.scaledDensity = mMetrics.density * mConfiguration.fontScale; @@ -1282,7 +1320,7 @@ public class Resources { mConfiguration.touchscreen, (int)(mMetrics.density*160), mConfiguration.keyboard, keyboardHidden, mConfiguration.navigation, width, height, - sSdkVersion); + mConfiguration.screenLayout, sSdkVersion); int N = mDrawableCache.size(); if (DEBUG_CONFIG) { Log.d(TAG, "Cleaning up drawables config changes: 0x" @@ -1297,14 +1335,14 @@ public class Resources { configChanges, cs.getChangingConfigurations())) { if (DEBUG_CONFIG) { Log.d(TAG, "FLUSHING #0x" - + Integer.toHexString(mDrawableCache.keyAt(i)) + + Long.toHexString(mDrawableCache.keyAt(i)) + " / " + cs + " with changes: 0x" + Integer.toHexString(cs.getChangingConfigurations())); } mDrawableCache.setValueAt(i, null); } else if (DEBUG_CONFIG) { Log.d(TAG, "(Keeping #0x" - + Integer.toHexString(mDrawableCache.keyAt(i)) + + Long.toHexString(mDrawableCache.keyAt(i)) + " / " + cs + " with changes: 0x" + Integer.toHexString(cs.getChangingConfigurations()) + ")"); @@ -1356,6 +1394,17 @@ public class Resources { public Configuration getConfiguration() { return mConfiguration; } + + /** + * Return the compatibility mode information for the application. + * The returned object should be treated as read-only. + * + * @return compatibility info. null if the app does not require compatibility mode. + * @hide + */ + public CompatibilityInfo getCompatibilityInfo() { + return mCompatibilityInfo; + } /** * Return a resource identifier for the given resource name. A fully @@ -1624,7 +1673,7 @@ public class Resources { } } - final int key = (value.assetCookie << 24) | value.data; + final long key = (((long) value.assetCookie) << 32) | value.data; Drawable dr = getCachedDrawable(key); if (dr != null) { @@ -1704,7 +1753,7 @@ public class Resources { return dr; } - private Drawable getCachedDrawable(int key) { + private Drawable getCachedDrawable(long key) { synchronized (mTmpValue) { WeakReference wr = mDrawableCache.get(key); if (wr != null) { // we have the key @@ -1920,5 +1969,6 @@ public class Resources { updateConfiguration(null, null); mAssets.ensureStringBlocks(); mPreloadedDrawables = sPreloadedDrawables; + mCompatibilityInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO; } } diff --git a/core/java/android/database/BulkCursorToCursorAdaptor.java b/core/java/android/database/BulkCursorToCursorAdaptor.java index c26810a6248f..cf30dd9a9112 100644 --- a/core/java/android/database/BulkCursorToCursorAdaptor.java +++ b/core/java/android/database/BulkCursorToCursorAdaptor.java @@ -247,9 +247,11 @@ public final class BulkCursorToCursorAdaptor extends AbstractWindowedCursor { try { return mBulkCursor.respond(extras); } catch (RemoteException e) { - // This should never happen because the system kills processes that are using remote - // cursors when the provider process is killed. - throw new RuntimeException(e); + // the system kills processes that are using remote cursors when the provider process + // is killed, but this can still happen if this is being called from the system process, + // so, better to log and return an empty bundle. + Log.w(TAG, "respond() threw RemoteException, returning an empty bundle.", e); + return Bundle.EMPTY; } } } diff --git a/core/java/android/database/sqlite/SQLiteContentHelper.java b/core/java/android/database/sqlite/SQLiteContentHelper.java new file mode 100644 index 000000000000..2800d86279b1 --- /dev/null +++ b/core/java/android/database/sqlite/SQLiteContentHelper.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.database.sqlite; + +import android.content.res.AssetFileDescriptor; +import android.database.Cursor; +import android.os.MemoryFile; + +import java.io.FileNotFoundException; +import java.io.IOException; + +/** + * Some helper functions for using SQLite database to implement content providers. + * + * @hide + */ +public class SQLiteContentHelper { + + /** + * Runs an SQLite query and returns an AssetFileDescriptor for the + * blob in column 0 of the first row. If the first column does + * not contain a blob, an unspecified exception is thrown. + * + * @param db Handle to a readable database. + * @param sql SQL query, possibly with query arguments. + * @param selectionArgs Query argument values, or {@code null} for no argument. + * @return If no exception is thrown, a non-null AssetFileDescriptor is returned. + * @throws FileNotFoundException If the query returns no results or the + * value of column 0 is NULL, or if there is an error creating the + * asset file descriptor. + */ + public static AssetFileDescriptor getBlobColumnAsAssetFile(SQLiteDatabase db, String sql, + String[] selectionArgs) throws FileNotFoundException { + try { + MemoryFile file = simpleQueryForBlobMemoryFile(db, sql, selectionArgs); + if (file == null) { + throw new FileNotFoundException("No results."); + } + return AssetFileDescriptor.fromMemoryFile(file); + } catch (IOException ex) { + throw new FileNotFoundException(ex.toString()); + } + } + + /** + * Runs an SQLite query and returns a MemoryFile for the + * blob in column 0 of the first row. If the first column does + * not contain a blob, an unspecified exception is thrown. + * + * @return A memory file, or {@code null} if the query returns no results + * or the value column 0 is NULL. + * @throws IOException If there is an error creating the memory file. + */ + // TODO: make this native and use the SQLite blob API to reduce copying + private static MemoryFile simpleQueryForBlobMemoryFile(SQLiteDatabase db, String sql, + String[] selectionArgs) throws IOException { + Cursor cursor = db.rawQuery(sql, selectionArgs); + if (cursor == null) { + return null; + } + try { + if (!cursor.moveToFirst()) { + return null; + } + byte[] bytes = cursor.getBlob(0); + if (bytes == null) { + return null; + } + MemoryFile file = new MemoryFile(null, bytes.length); + file.writeBytes(bytes, 0, 0, bytes.length); + file.deactivate(); + return file; + } finally { + cursor.close(); + } + } + +} diff --git a/core/java/android/database/sqlite/SQLiteQueryBuilder.java b/core/java/android/database/sqlite/SQLiteQueryBuilder.java index ab7c827cc7c8..8a639196ee7a 100644 --- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java +++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java @@ -18,16 +18,15 @@ package android.database.sqlite; import android.database.Cursor; import android.database.DatabaseUtils; -import android.database.sqlite.SQLiteDatabase; import android.provider.BaseColumns; import android.text.TextUtils; -import android.util.Config; import android.util.Log; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.Map.Entry; +import java.util.regex.Pattern; /** * This is a convience class that helps build SQL queries to be sent to @@ -36,10 +35,12 @@ import java.util.Map.Entry; public class SQLiteQueryBuilder { private static final String TAG = "SQLiteQueryBuilder"; + private static final Pattern sLimitPattern = + Pattern.compile("\\s*\\d+\\s*(,\\s*\\d+\\s*)?"); private Map mProjectionMap = null; private String mTables = ""; - private StringBuilder mWhereClause = new StringBuilder(64); + private final StringBuilder mWhereClause = new StringBuilder(64); private boolean mDistinct; private SQLiteDatabase.CursorFactory mFactory; @@ -169,6 +170,9 @@ public class SQLiteQueryBuilder throw new IllegalArgumentException( "HAVING clauses are only permitted when using a groupBy clause"); } + if (!TextUtils.isEmpty(limit) && !sLimitPattern.matcher(limit).matches()) { + throw new IllegalArgumentException("invalid LIMIT clauses:" + limit); + } StringBuilder query = new StringBuilder(120); @@ -187,7 +191,7 @@ public class SQLiteQueryBuilder appendClause(query, " GROUP BY ", groupBy); appendClause(query, " HAVING ", having); appendClause(query, " ORDER BY ", orderBy); - appendClauseEscapeClause(query, " LIMIT ", limit); + appendClause(query, " LIMIT ", limit); return query.toString(); } diff --git a/core/java/android/gesture/Gesture.java b/core/java/android/gesture/Gesture.java new file mode 100755 index 000000000000..2262477a93c4 --- /dev/null +++ b/core/java/android/gesture/Gesture.java @@ -0,0 +1,341 @@ +/* + * Copyright (C) 2008-2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gesture; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.RectF; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.Log; + +import java.io.IOException; +import java.io.DataOutputStream; +import java.io.DataInputStream; +import java.io.ByteArrayOutputStream; +import java.io.ByteArrayInputStream; +import java.util.ArrayList; + +/** + * A gesture can have a single or multiple strokes + */ + +public class Gesture implements Parcelable { + private static final long GESTURE_ID_BASE = System.currentTimeMillis(); + + private static final int BITMAP_RENDERING_WIDTH = 2; + + private static final boolean BITMAP_RENDERING_ANTIALIAS = true; + private static final boolean BITMAP_RENDERING_DITHER = true; + + private static int sGestureCount = 0; + + private final RectF mBoundingBox = new RectF(); + + // the same as its instance ID + private long mGestureID; + + private final ArrayList mStrokes = new ArrayList(); + + public Gesture() { + mGestureID = GESTURE_ID_BASE + sGestureCount++; + } + + void recycle() { + mStrokes.clear(); + mBoundingBox.setEmpty(); + } + + /** + * @return all the strokes of the gesture + */ + public ArrayList getStrokes() { + return mStrokes; + } + + /** + * @return the number of strokes included by this gesture + */ + public int getStrokesCount() { + return mStrokes.size(); + } + + /** + * Add a stroke to the gesture + * + * @param stroke + */ + public void addStroke(GestureStroke stroke) { + mStrokes.add(stroke); + mBoundingBox.union(stroke.boundingBox); + } + + /** + * Get the total length of the gesture. When there are multiple strokes in + * the gesture, this returns the sum of the lengths of all the strokes + * + * @return the length of the gesture + */ + public float getLength() { + int len = 0; + final ArrayList strokes = mStrokes; + final int count = strokes.size(); + + for (int i = 0; i < count; i++) { + len += strokes.get(i).length; + } + + return len; + } + + /** + * @return the bounding box of the gesture + */ + public RectF getBoundingBox() { + return mBoundingBox; + } + + public Path toPath() { + return toPath(null); + } + + public Path toPath(Path path) { + if (path == null) path = new Path(); + + final ArrayList strokes = mStrokes; + final int count = strokes.size(); + + for (int i = 0; i < count; i++) { + path.addPath(strokes.get(i).getPath()); + } + + return path; + } + + public Path toPath(int width, int height, int edge, int numSample) { + return toPath(null, width, height, edge, numSample); + } + + public Path toPath(Path path, int width, int height, int edge, int numSample) { + if (path == null) path = new Path(); + + final ArrayList strokes = mStrokes; + final int count = strokes.size(); + + for (int i = 0; i < count; i++) { + path.addPath(strokes.get(i).toPath(width - 2 * edge, height - 2 * edge, numSample)); + } + + return path; + } + + /** + * Set the id of the gesture + * + * @param id + */ + void setID(long id) { + mGestureID = id; + } + + /** + * @return the id of the gesture + */ + public long getID() { + return mGestureID; + } + + /** + * draw the gesture + * + * @param canvas + */ + void draw(Canvas canvas, Paint paint) { + final ArrayList strokes = mStrokes; + final int count = strokes.size(); + + for (int i = 0; i < count; i++) { + strokes.get(i).draw(canvas, paint); + } + } + + /** + * Create a bitmap of the gesture with a transparent background + * + * @param width width of the target bitmap + * @param height height of the target bitmap + * @param edge the edge + * @param numSample + * @param color + * @return the bitmap + */ + public Bitmap toBitmap(int width, int height, int edge, int numSample, int color) { + final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + final Canvas canvas = new Canvas(bitmap); + + canvas.translate(edge, edge); + + final Paint paint = new Paint(); + paint.setAntiAlias(BITMAP_RENDERING_ANTIALIAS); + paint.setDither(BITMAP_RENDERING_DITHER); + paint.setColor(color); + paint.setStyle(Paint.Style.STROKE); + paint.setStrokeJoin(Paint.Join.ROUND); + paint.setStrokeCap(Paint.Cap.ROUND); + paint.setStrokeWidth(BITMAP_RENDERING_WIDTH); + + final ArrayList strokes = mStrokes; + final int count = strokes.size(); + + for (int i = 0; i < count; i++) { + Path path = strokes.get(i).toPath(width - 2 * edge, height - 2 * edge, numSample); + canvas.drawPath(path, paint); + } + + return bitmap; + } + + /** + * Create a bitmap of the gesture with a transparent background + * + * @param width + * @param height + * @param inset + * @param color + * @return the bitmap + */ + public Bitmap toBitmap(int width, int height, int inset, int color) { + final Bitmap bitmap = Bitmap.createBitmap(width, height, + Bitmap.Config.ARGB_8888); + final Canvas canvas = new Canvas(bitmap); + + final Paint paint = new Paint(); + paint.setAntiAlias(BITMAP_RENDERING_ANTIALIAS); + paint.setDither(BITMAP_RENDERING_DITHER); + paint.setColor(color); + paint.setStyle(Paint.Style.STROKE); + paint.setStrokeJoin(Paint.Join.ROUND); + paint.setStrokeCap(Paint.Cap.ROUND); + paint.setStrokeWidth(BITMAP_RENDERING_WIDTH); + + final Path path = toPath(); + final RectF bounds = new RectF(); + path.computeBounds(bounds, true); + + final float sx = (width - 2 * inset) / bounds.width(); + final float sy = (height - 2 * inset) / bounds.height(); + final float scale = sx > sy ? sy : sx; + paint.setStrokeWidth(2.0f / scale); + + path.offset(-bounds.left + (width - bounds.width() * scale) / 2.0f, + -bounds.top + (height - bounds.height() * scale) / 2.0f); + + canvas.translate(inset, inset); + canvas.scale(scale, scale); + + canvas.drawPath(path, paint); + + return bitmap; + } + + void serialize(DataOutputStream out) throws IOException { + final ArrayList strokes = mStrokes; + final int count = strokes.size(); + + // Write gesture ID + out.writeLong(mGestureID); + // Write number of strokes + out.writeInt(count); + + for (int i = 0; i < count; i++) { + strokes.get(i).serialize(out); + } + } + + static Gesture deserialize(DataInputStream in) throws IOException { + final Gesture gesture = new Gesture(); + + // Gesture ID + gesture.mGestureID = in.readLong(); + // Number of strokes + final int count = in.readInt(); + + for (int i = 0; i < count; i++) { + gesture.addStroke(GestureStroke.deserialize(in)); + } + + return gesture; + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public Gesture createFromParcel(Parcel in) { + Gesture gesture = null; + final long gestureID = in.readLong(); + + final DataInputStream inStream = new DataInputStream( + new ByteArrayInputStream(in.createByteArray())); + + try { + gesture = deserialize(inStream); + } catch (IOException e) { + Log.e(GestureConstants.LOG_TAG, "Error reading Gesture from parcel:", e); + } finally { + GestureUtilities.closeStream(inStream); + } + + if (gesture != null) { + gesture.mGestureID = gestureID; + } + + return gesture; + } + + public Gesture[] newArray(int size) { + return new Gesture[size]; + } + }; + + public void writeToParcel(Parcel out, int flags) { + out.writeLong(mGestureID); + + boolean result = false; + final ByteArrayOutputStream byteStream = + new ByteArrayOutputStream(GestureConstants.IO_BUFFER_SIZE); + final DataOutputStream outStream = new DataOutputStream(byteStream); + + try { + serialize(outStream); + result = true; + } catch (IOException e) { + Log.e(GestureConstants.LOG_TAG, "Error writing Gesture to parcel:", e); + } finally { + GestureUtilities.closeStream(outStream); + GestureUtilities.closeStream(byteStream); + } + + if (result) { + out.writeByteArray(byteStream.toByteArray()); + } + } + + public int describeContents() { + return 0; + } +} + diff --git a/core/java/android/gesture/GestureConstants.java b/core/java/android/gesture/GestureConstants.java new file mode 100644 index 000000000000..230db0c00c50 --- /dev/null +++ b/core/java/android/gesture/GestureConstants.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gesture; + +interface GestureConstants { + static final int STROKE_STRING_BUFFER_SIZE = 1024; + static final int STROKE_POINT_BUFFER_SIZE = 100; // number of points + + static final int IO_BUFFER_SIZE = 32 * 1024; // 32K + + static final String LOG_TAG = "Gestures"; +} diff --git a/core/java/android/gesture/GestureLibraries.java b/core/java/android/gesture/GestureLibraries.java new file mode 100644 index 000000000000..6d6c156def9a --- /dev/null +++ b/core/java/android/gesture/GestureLibraries.java @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gesture; + +import android.util.Log; +import static android.gesture.GestureConstants.*; +import android.content.Context; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.FileInputStream; +import java.io.InputStream; +import java.lang.ref.WeakReference; + +public final class GestureLibraries { + private GestureLibraries() { + } + + public static GestureLibrary fromFile(String path) { + return fromFile(new File(path)); + } + + public static GestureLibrary fromFile(File path) { + return new FileGestureLibrary(path); + } + + public static GestureLibrary fromPrivateFile(Context context, String name) { + return fromFile(context.getFileStreamPath(name)); + } + + public static GestureLibrary fromRawResource(Context context, int resourceId) { + return new ResourceGestureLibrary(context, resourceId); + } + + private static class FileGestureLibrary extends GestureLibrary { + private final File mPath; + + public FileGestureLibrary(File path) { + mPath = path; + } + + @Override + public boolean isReadOnly() { + return !mPath.canWrite(); + } + + public boolean save() { + if (!mStore.hasChanged()) return true; + + final File file = mPath; + + final File parentFile = file.getParentFile(); + if (!parentFile.exists()) { + if (!parentFile.mkdirs()) { + return false; + } + } + + boolean result = false; + try { + //noinspection ResultOfMethodCallIgnored + file.createNewFile(); + mStore.save(new FileOutputStream(file), true); + result = true; + } catch (FileNotFoundException e) { + Log.d(LOG_TAG, "Could not save the gesture library in " + mPath, e); + } catch (IOException e) { + Log.d(LOG_TAG, "Could not save the gesture library in " + mPath, e); + } + + return result; + } + + public boolean load() { + boolean result = false; + final File file = mPath; + if (file.exists() && file.canRead()) { + try { + mStore.load(new FileInputStream(file), true); + result = true; + } catch (FileNotFoundException e) { + Log.d(LOG_TAG, "Could not load the gesture library from " + mPath, e); + } catch (IOException e) { + Log.d(LOG_TAG, "Could not load the gesture library from " + mPath, e); + } + } + + return result; + } + } + + private static class ResourceGestureLibrary extends GestureLibrary { + private final WeakReference mContext; + private final int mResourceId; + + public ResourceGestureLibrary(Context context, int resourceId) { + mContext = new WeakReference(context); + mResourceId = resourceId; + } + + @Override + public boolean isReadOnly() { + return true; + } + + public boolean save() { + return false; + } + + public boolean load() { + boolean result = false; + final Context context = mContext.get(); + if (context != null) { + final InputStream in = context.getResources().openRawResource(mResourceId); + try { + mStore.load(in, true); + result = true; + } catch (IOException e) { + Log.d(LOG_TAG, "Could not load the gesture library from raw resource " + + context.getResources().getResourceName(mResourceId), e); + } + } + + return result; + } + } +} diff --git a/core/java/android/gesture/GestureLibrary.java b/core/java/android/gesture/GestureLibrary.java new file mode 100644 index 000000000000..a29c2c83cfbf --- /dev/null +++ b/core/java/android/gesture/GestureLibrary.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package android.gesture; + +import java.util.Set; +import java.util.ArrayList; + +public abstract class GestureLibrary { + protected final GestureStore mStore; + + protected GestureLibrary() { + mStore = new GestureStore(); + } + + public abstract boolean save(); + + public abstract boolean load(); + + public boolean isReadOnly() { + return false; + } + + public Learner getLearner() { + return mStore.getLearner(); + } + + public void setOrientationStyle(int style) { + mStore.setOrientationStyle(style); + } + + public int getOrientationStyle() { + return mStore.getOrientationStyle(); + } + + public void setSequenceType(int type) { + mStore.setSequenceType(type); + } + + public int getSequenceType() { + return mStore.getSequenceType(); + } + + public Set getGestureEntries() { + return mStore.getGestureEntries(); + } + + public ArrayList recognize(Gesture gesture) { + return mStore.recognize(gesture); + } + + public void addGesture(String entryName, Gesture gesture) { + mStore.addGesture(entryName, gesture); + } + + public void removeGesture(String entryName, Gesture gesture) { + mStore.removeGesture(entryName, gesture); + } + + public void removeEntry(String entryName) { + mStore.removeEntry(entryName); + } + + public ArrayList getGestures(String entryName) { + return mStore.getGestures(entryName); + } +} diff --git a/core/java/android/gesture/GestureOverlayView.java b/core/java/android/gesture/GestureOverlayView.java new file mode 100755 index 000000000000..5bfdcc4a5578 --- /dev/null +++ b/core/java/android/gesture/GestureOverlayView.java @@ -0,0 +1,793 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gesture; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Rect; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.animation.AnimationUtils; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.widget.FrameLayout; +import android.os.SystemClock; +import com.android.internal.R; + +import java.util.ArrayList; + +/** + * A transparent overlay for gesture input that can be placed on top of other + * widgets or contain other widgets. + * + * @attr ref android.R.styleable#GestureOverlayView_eventsInterceptionEnabled + * @attr ref android.R.styleable#GestureOverlayView_fadeDuration + * @attr ref android.R.styleable#GestureOverlayView_fadeOffset + * @attr ref android.R.styleable#GestureOverlayView_fadeEnabled + * @attr ref android.R.styleable#GestureOverlayView_gestureStrokeWidth + * @attr ref android.R.styleable#GestureOverlayView_gestureStrokeAngleThreshold + * @attr ref android.R.styleable#GestureOverlayView_gestureStrokeLengthThreshold + * @attr ref android.R.styleable#GestureOverlayView_gestureStrokeSquarenessThreshold + * @attr ref android.R.styleable#GestureOverlayView_gestureStrokeType + * @attr ref android.R.styleable#GestureOverlayView_gestureColor + * @attr ref android.R.styleable#GestureOverlayView_orientation + * @attr ref android.R.styleable#GestureOverlayView_uncertainGestureColor + */ +public class GestureOverlayView extends FrameLayout { + public static final int GESTURE_STROKE_TYPE_SINGLE = 0; + public static final int GESTURE_STROKE_TYPE_MULTIPLE = 1; + + public static final int ORIENTATION_HORIZONTAL = 0; + public static final int ORIENTATION_VERTICAL = 1; + + private static final int FADE_ANIMATION_RATE = 16; + private static final boolean GESTURE_RENDERING_ANTIALIAS = true; + private static final boolean DITHER_FLAG = true; + + private final Paint mGesturePaint = new Paint(); + + private long mFadeDuration = 150; + private long mFadeOffset = 420; + private long mFadingStart; + private boolean mFadingHasStarted; + private boolean mFadeEnabled = true; + + private int mCurrentColor; + private int mCertainGestureColor = 0xFFFFFF00; + private int mUncertainGestureColor = 0x48FFFF00; + private float mGestureStrokeWidth = 12.0f; + private int mInvalidateExtraBorder = 10; + + private int mGestureStrokeType = GESTURE_STROKE_TYPE_SINGLE; + private float mGestureStrokeLengthThreshold = 50.0f; + private float mGestureStrokeSquarenessTreshold = 0.275f; + private float mGestureStrokeAngleThreshold = 40.0f; + + private int mOrientation = ORIENTATION_VERTICAL; + + private final Rect mInvalidRect = new Rect(); + private final Path mPath = new Path(); + private boolean mGestureVisible = true; + + private float mX; + private float mY; + + private float mCurveEndX; + private float mCurveEndY; + + private float mTotalLength; + private boolean mIsGesturing = false; + private boolean mPreviousWasGesturing = false; + private boolean mInterceptEvents = true; + private boolean mIsListeningForGestures; + private boolean mResetGesture; + + // current gesture + private Gesture mCurrentGesture; + private final ArrayList mStrokeBuffer = new ArrayList(100); + + // TODO: Make this a list of WeakReferences + private final ArrayList mOnGestureListeners = + new ArrayList(); + // TODO: Make this a list of WeakReferences + private final ArrayList mOnGesturePerformedListeners = + new ArrayList(); + // TODO: Make this a list of WeakReferences + private final ArrayList mOnGesturingListeners = + new ArrayList(); + + private boolean mHandleGestureActions; + + // fading out effect + private boolean mIsFadingOut = false; + private float mFadingAlpha = 1.0f; + private final AccelerateDecelerateInterpolator mInterpolator = + new AccelerateDecelerateInterpolator(); + + private final FadeOutRunnable mFadingOut = new FadeOutRunnable(); + + public GestureOverlayView(Context context) { + super(context); + init(); + } + + public GestureOverlayView(Context context, AttributeSet attrs) { + this(context, attrs, com.android.internal.R.attr.gestureOverlayViewStyle); + } + + public GestureOverlayView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + TypedArray a = context.obtainStyledAttributes(attrs, + R.styleable.GestureOverlayView, defStyle, 0); + + mGestureStrokeWidth = a.getFloat(R.styleable.GestureOverlayView_gestureStrokeWidth, + mGestureStrokeWidth); + mInvalidateExtraBorder = Math.max(1, ((int) mGestureStrokeWidth) - 1); + mCertainGestureColor = a.getColor(R.styleable.GestureOverlayView_gestureColor, + mCertainGestureColor); + mUncertainGestureColor = a.getColor(R.styleable.GestureOverlayView_uncertainGestureColor, + mUncertainGestureColor); + mFadeDuration = a.getInt(R.styleable.GestureOverlayView_fadeDuration, (int) mFadeDuration); + mFadeOffset = a.getInt(R.styleable.GestureOverlayView_fadeOffset, (int) mFadeOffset); + mGestureStrokeType = a.getInt(R.styleable.GestureOverlayView_gestureStrokeType, + mGestureStrokeType); + mGestureStrokeLengthThreshold = a.getFloat( + R.styleable.GestureOverlayView_gestureStrokeLengthThreshold, + mGestureStrokeLengthThreshold); + mGestureStrokeAngleThreshold = a.getFloat( + R.styleable.GestureOverlayView_gestureStrokeAngleThreshold, + mGestureStrokeAngleThreshold); + mGestureStrokeSquarenessTreshold = a.getFloat( + R.styleable.GestureOverlayView_gestureStrokeSquarenessThreshold, + mGestureStrokeSquarenessTreshold); + mInterceptEvents = a.getBoolean(R.styleable.GestureOverlayView_eventsInterceptionEnabled, + mInterceptEvents); + mFadeEnabled = a.getBoolean(R.styleable.GestureOverlayView_fadeEnabled, + mFadeEnabled); + mOrientation = a.getInt(R.styleable.GestureOverlayView_orientation, mOrientation); + + a.recycle(); + + init(); + } + + private void init() { + setWillNotDraw(false); + + final Paint gesturePaint = mGesturePaint; + gesturePaint.setAntiAlias(GESTURE_RENDERING_ANTIALIAS); + gesturePaint.setColor(mCertainGestureColor); + gesturePaint.setStyle(Paint.Style.STROKE); + gesturePaint.setStrokeJoin(Paint.Join.ROUND); + gesturePaint.setStrokeCap(Paint.Cap.ROUND); + gesturePaint.setStrokeWidth(mGestureStrokeWidth); + gesturePaint.setDither(DITHER_FLAG); + + mCurrentColor = mCertainGestureColor; + setPaintAlpha(255); + } + + public ArrayList getCurrentStroke() { + return mStrokeBuffer; + } + + public int getOrientation() { + return mOrientation; + } + + public void setOrientation(int orientation) { + mOrientation = orientation; + } + + public void setGestureColor(int color) { + mCertainGestureColor = color; + } + + public void setUncertainGestureColor(int color) { + mUncertainGestureColor = color; + } + + public int getUncertainGestureColor() { + return mUncertainGestureColor; + } + + public int getGestureColor() { + return mCertainGestureColor; + } + + public float getGestureStrokeWidth() { + return mGestureStrokeWidth; + } + + public void setGestureStrokeWidth(float gestureStrokeWidth) { + mGestureStrokeWidth = gestureStrokeWidth; + mInvalidateExtraBorder = Math.max(1, ((int) gestureStrokeWidth) - 1); + mGesturePaint.setStrokeWidth(gestureStrokeWidth); + } + + public int getGestureStrokeType() { + return mGestureStrokeType; + } + + public void setGestureStrokeType(int gestureStrokeType) { + mGestureStrokeType = gestureStrokeType; + } + + public float getGestureStrokeLengthThreshold() { + return mGestureStrokeLengthThreshold; + } + + public void setGestureStrokeLengthThreshold(float gestureStrokeLengthThreshold) { + mGestureStrokeLengthThreshold = gestureStrokeLengthThreshold; + } + + public float getGestureStrokeSquarenessTreshold() { + return mGestureStrokeSquarenessTreshold; + } + + public void setGestureStrokeSquarenessTreshold(float gestureStrokeSquarenessTreshold) { + mGestureStrokeSquarenessTreshold = gestureStrokeSquarenessTreshold; + } + + public float getGestureStrokeAngleThreshold() { + return mGestureStrokeAngleThreshold; + } + + public void setGestureStrokeAngleThreshold(float gestureStrokeAngleThreshold) { + mGestureStrokeAngleThreshold = gestureStrokeAngleThreshold; + } + + public boolean isEventsInterceptionEnabled() { + return mInterceptEvents; + } + + public void setEventsInterceptionEnabled(boolean enabled) { + mInterceptEvents = enabled; + } + + public boolean isFadeEnabled() { + return mFadeEnabled; + } + + public void setFadeEnabled(boolean fadeEnabled) { + mFadeEnabled = fadeEnabled; + } + + public Gesture getGesture() { + return mCurrentGesture; + } + + public void setGesture(Gesture gesture) { + if (mCurrentGesture != null) { + clear(false); + } + + setCurrentColor(mCertainGestureColor); + mCurrentGesture = gesture; + + final Path path = mCurrentGesture.toPath(); + final RectF bounds = new RectF(); + path.computeBounds(bounds, true); + + // TODO: The path should also be scaled to fit inside this view + mPath.rewind(); + mPath.addPath(path, -bounds.left + (getWidth() - bounds.width()) / 2.0f, + -bounds.top + (getHeight() - bounds.height()) / 2.0f); + + mResetGesture = true; + + invalidate(); + } + + public Path getGesturePath() { + return mPath; + } + + public Path getGesturePath(Path path) { + path.set(mPath); + return path; + } + + public boolean isGestureVisible() { + return mGestureVisible; + } + + public void setGestureVisible(boolean visible) { + mGestureVisible = visible; + } + + public long getFadeOffset() { + return mFadeOffset; + } + + public void setFadeOffset(long fadeOffset) { + mFadeOffset = fadeOffset; + } + + public void addOnGestureListener(OnGestureListener listener) { + mOnGestureListeners.add(listener); + } + + public void removeOnGestureListener(OnGestureListener listener) { + mOnGestureListeners.remove(listener); + } + + public void removeAllOnGestureListeners() { + mOnGestureListeners.clear(); + } + + public void addOnGesturePerformedListener(OnGesturePerformedListener listener) { + mOnGesturePerformedListeners.add(listener); + if (mOnGesturePerformedListeners.size() > 0) { + mHandleGestureActions = true; + } + } + + public void removeOnGesturePerformedListener(OnGesturePerformedListener listener) { + mOnGesturePerformedListeners.remove(listener); + if (mOnGesturePerformedListeners.size() <= 0) { + mHandleGestureActions = false; + } + } + + public void removeAllOnGesturePerformedListeners() { + mOnGesturePerformedListeners.clear(); + mHandleGestureActions = false; + } + + public void addOnGesturingListener(OnGesturingListener listener) { + mOnGesturingListeners.add(listener); + } + + public void removeOnGesturingListener(OnGesturingListener listener) { + mOnGesturingListeners.remove(listener); + } + + public void removeAllOnGesturingListeners() { + mOnGesturingListeners.clear(); + } + + public boolean isGesturing() { + return mIsGesturing; + } + + private void setCurrentColor(int color) { + mCurrentColor = color; + if (mFadingHasStarted) { + setPaintAlpha((int) (255 * mFadingAlpha)); + } else { + setPaintAlpha(255); + } + invalidate(); + } + + /** + * @hide + */ + public Paint getGesturePaint() { + return mGesturePaint; + } + + @Override + public void draw(Canvas canvas) { + super.draw(canvas); + + if (mCurrentGesture != null && mGestureVisible) { + canvas.drawPath(mPath, mGesturePaint); + } + } + + private void setPaintAlpha(int alpha) { + alpha += alpha >> 7; + final int baseAlpha = mCurrentColor >>> 24; + final int useAlpha = baseAlpha * alpha >> 8; + mGesturePaint.setColor((mCurrentColor << 8 >>> 8) | (useAlpha << 24)); + } + + public void clear(boolean animated) { + clear(animated, false, true); + } + + private void clear(boolean animated, boolean fireActionPerformed, boolean immediate) { + setPaintAlpha(255); + removeCallbacks(mFadingOut); + mResetGesture = false; + mFadingOut.fireActionPerformed = fireActionPerformed; + mFadingOut.resetMultipleStrokes = false; + + if (animated && mCurrentGesture != null) { + mFadingAlpha = 1.0f; + mIsFadingOut = true; + mFadingHasStarted = false; + mFadingStart = AnimationUtils.currentAnimationTimeMillis() + mFadeOffset; + + postDelayed(mFadingOut, mFadeOffset); + } else { + mFadingAlpha = 1.0f; + mIsFadingOut = false; + mFadingHasStarted = false; + + if (immediate) { + mCurrentGesture = null; + mPath.rewind(); + invalidate(); + } else if (fireActionPerformed) { + postDelayed(mFadingOut, mFadeOffset); + } else if (mGestureStrokeType == GESTURE_STROKE_TYPE_MULTIPLE) { + mFadingOut.resetMultipleStrokes = true; + postDelayed(mFadingOut, mFadeOffset); + } else { + mCurrentGesture = null; + mPath.rewind(); + invalidate(); + } + } + } + + public void cancelClearAnimation() { + setPaintAlpha(255); + mIsFadingOut = false; + mFadingHasStarted = false; + removeCallbacks(mFadingOut); + mPath.rewind(); + mCurrentGesture = null; + } + + public void cancelGesture() { + mIsListeningForGestures = false; + + // add the stroke to the current gesture + mCurrentGesture.addStroke(new GestureStroke(mStrokeBuffer)); + + // pass the event to handlers + final long now = SystemClock.uptimeMillis(); + final MotionEvent event = MotionEvent.obtain(now, now, + MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0); + + final ArrayList listeners = mOnGestureListeners; + int count = listeners.size(); + for (int i = 0; i < count; i++) { + listeners.get(i).onGestureCancelled(this, event); + } + + event.recycle(); + + clear(false); + mIsGesturing = false; + mPreviousWasGesturing = false; + mStrokeBuffer.clear(); + + final ArrayList otherListeners = mOnGesturingListeners; + count = otherListeners.size(); + for (int i = 0; i < count; i++) { + otherListeners.get(i).onGesturingEnded(this); + } + } + + @Override + protected void onDetachedFromWindow() { + cancelClearAnimation(); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + if (isEnabled()) { + final boolean cancelDispatch = (mIsGesturing || (mCurrentGesture != null && + mCurrentGesture.getStrokesCount() > 0 && mPreviousWasGesturing)) && + mInterceptEvents; + + processEvent(event); + + if (cancelDispatch) { + event.setAction(MotionEvent.ACTION_CANCEL); + } + + super.dispatchTouchEvent(event); + + return true; + } + + return super.dispatchTouchEvent(event); + } + + private boolean processEvent(MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + touchDown(event); + invalidate(); + return true; + case MotionEvent.ACTION_MOVE: + if (mIsListeningForGestures) { + Rect rect = touchMove(event); + if (rect != null) { + invalidate(rect); + } + return true; + } + break; + case MotionEvent.ACTION_UP: + if (mIsListeningForGestures) { + touchUp(event, false); + invalidate(); + return true; + } + break; + case MotionEvent.ACTION_CANCEL: + if (mIsListeningForGestures) { + touchUp(event, true); + invalidate(); + return true; + } + } + + return false; + } + + private void touchDown(MotionEvent event) { + mIsListeningForGestures = true; + + float x = event.getX(); + float y = event.getY(); + + mX = x; + mY = y; + + mTotalLength = 0; + mIsGesturing = false; + + if (mGestureStrokeType == GESTURE_STROKE_TYPE_SINGLE || mResetGesture) { + if (mHandleGestureActions) setCurrentColor(mUncertainGestureColor); + mResetGesture = false; + mCurrentGesture = null; + mPath.rewind(); + } else if (mCurrentGesture == null || mCurrentGesture.getStrokesCount() == 0) { + if (mHandleGestureActions) setCurrentColor(mUncertainGestureColor); + } + + // if there is fading out going on, stop it. + if (mFadingHasStarted) { + cancelClearAnimation(); + } else if (mIsFadingOut) { + setPaintAlpha(255); + mIsFadingOut = false; + mFadingHasStarted = false; + removeCallbacks(mFadingOut); + } + + if (mCurrentGesture == null) { + mCurrentGesture = new Gesture(); + } + + mStrokeBuffer.add(new GesturePoint(x, y, event.getEventTime())); + mPath.moveTo(x, y); + + final int border = mInvalidateExtraBorder; + mInvalidRect.set((int) x - border, (int) y - border, (int) x + border, (int) y + border); + + mCurveEndX = x; + mCurveEndY = y; + + // pass the event to handlers + final ArrayList listeners = mOnGestureListeners; + final int count = listeners.size(); + for (int i = 0; i < count; i++) { + listeners.get(i).onGestureStarted(this, event); + } + } + + private Rect touchMove(MotionEvent event) { + Rect areaToRefresh = null; + + final float x = event.getX(); + final float y = event.getY(); + + final float previousX = mX; + final float previousY = mY; + + final float dx = Math.abs(x - previousX); + final float dy = Math.abs(y - previousY); + + if (dx >= GestureStroke.TOUCH_TOLERANCE || dy >= GestureStroke.TOUCH_TOLERANCE) { + areaToRefresh = mInvalidRect; + + // start with the curve end + final int border = mInvalidateExtraBorder; + areaToRefresh.set((int) mCurveEndX - border, (int) mCurveEndY - border, + (int) mCurveEndX + border, (int) mCurveEndY + border); + + float cX = mCurveEndX = (x + previousX) / 2; + float cY = mCurveEndY = (y + previousY) / 2; + + mPath.quadTo(previousX, previousY, cX, cY); + + // union with the control point of the new curve + areaToRefresh.union((int) previousX - border, (int) previousY - border, + (int) previousX + border, (int) previousY + border); + + // union with the end point of the new curve + areaToRefresh.union((int) cX - border, (int) cY - border, + (int) cX + border, (int) cY + border); + + mX = x; + mY = y; + + mStrokeBuffer.add(new GesturePoint(x, y, event.getEventTime())); + + if (mHandleGestureActions && !mIsGesturing) { + mTotalLength += (float) Math.sqrt(dx * dx + dy * dy); + + if (mTotalLength > mGestureStrokeLengthThreshold) { + final OrientedBoundingBox box = + GestureUtilities.computeOrientedBoundingBox(mStrokeBuffer); + + float angle = Math.abs(box.orientation); + if (angle > 90) { + angle = 180 - angle; + } + + if (box.squareness > mGestureStrokeSquarenessTreshold || + (mOrientation == ORIENTATION_VERTICAL ? + angle < mGestureStrokeAngleThreshold : + angle > mGestureStrokeAngleThreshold)) { + + mIsGesturing = true; + setCurrentColor(mCertainGestureColor); + + final ArrayList listeners = mOnGesturingListeners; + int count = listeners.size(); + for (int i = 0; i < count; i++) { + listeners.get(i).onGesturingStarted(this); + } + } + } + } + + // pass the event to handlers + final ArrayList listeners = mOnGestureListeners; + final int count = listeners.size(); + for (int i = 0; i < count; i++) { + listeners.get(i).onGesture(this, event); + } + } + + return areaToRefresh; + } + + private void touchUp(MotionEvent event, boolean cancel) { + mIsListeningForGestures = false; + + // A gesture wasn't started or was cancelled + if (mCurrentGesture != null) { + // add the stroke to the current gesture + mCurrentGesture.addStroke(new GestureStroke(mStrokeBuffer)); + + if (!cancel) { + // pass the event to handlers + final ArrayList listeners = mOnGestureListeners; + int count = listeners.size(); + for (int i = 0; i < count; i++) { + listeners.get(i).onGestureEnded(this, event); + } + + clear(mHandleGestureActions && mFadeEnabled, mHandleGestureActions && mIsGesturing, + false); + } else { + cancelGesture(event); + + } + } else { + cancelGesture(event); + } + + mStrokeBuffer.clear(); + mPreviousWasGesturing = mIsGesturing; + mIsGesturing = false; + + final ArrayList listeners = mOnGesturingListeners; + int count = listeners.size(); + for (int i = 0; i < count; i++) { + listeners.get(i).onGesturingEnded(this); + } + } + + private void cancelGesture(MotionEvent event) { + // pass the event to handlers + final ArrayList listeners = mOnGestureListeners; + final int count = listeners.size(); + for (int i = 0; i < count; i++) { + listeners.get(i).onGestureCancelled(this, event); + } + + clear(false); + } + + private void fireOnGesturePerformed() { + final ArrayList actionListeners = mOnGesturePerformedListeners; + final int count = actionListeners.size(); + for (int i = 0; i < count; i++) { + actionListeners.get(i).onGesturePerformed(GestureOverlayView.this, mCurrentGesture); + } + } + + private class FadeOutRunnable implements Runnable { + boolean fireActionPerformed; + boolean resetMultipleStrokes; + + public void run() { + if (mIsFadingOut) { + final long now = AnimationUtils.currentAnimationTimeMillis(); + final long duration = now - mFadingStart; + + if (duration > mFadeDuration) { + if (fireActionPerformed) { + fireOnGesturePerformed(); + } + + mPreviousWasGesturing = false; + mIsFadingOut = false; + mFadingHasStarted = false; + mPath.rewind(); + mCurrentGesture = null; + setPaintAlpha(255); + } else { + mFadingHasStarted = true; + float interpolatedTime = Math.max(0.0f, + Math.min(1.0f, duration / (float) mFadeDuration)); + mFadingAlpha = 1.0f - mInterpolator.getInterpolation(interpolatedTime); + setPaintAlpha((int) (255 * mFadingAlpha)); + postDelayed(this, FADE_ANIMATION_RATE); + } + } else if (resetMultipleStrokes) { + mResetGesture = true; + } else { + fireOnGesturePerformed(); + + mFadingHasStarted = false; + mPath.rewind(); + mCurrentGesture = null; + mPreviousWasGesturing = false; + setPaintAlpha(255); + } + + invalidate(); + } + } + + public static interface OnGesturingListener { + void onGesturingStarted(GestureOverlayView overlay); + + void onGesturingEnded(GestureOverlayView overlay); + } + + public static interface OnGestureListener { + void onGestureStarted(GestureOverlayView overlay, MotionEvent event); + + void onGesture(GestureOverlayView overlay, MotionEvent event); + + void onGestureEnded(GestureOverlayView overlay, MotionEvent event); + + void onGestureCancelled(GestureOverlayView overlay, MotionEvent event); + } + + public static interface OnGesturePerformedListener { + void onGesturePerformed(GestureOverlayView overlay, Gesture gesture); + } +} diff --git a/core/java/android/gesture/GesturePoint.java b/core/java/android/gesture/GesturePoint.java new file mode 100644 index 000000000000..3698011fc7fc --- /dev/null +++ b/core/java/android/gesture/GesturePoint.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2008-2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gesture; + +import java.io.DataInputStream; +import java.io.IOException; + +/** + * A timed point of a gesture stroke + */ + +public class GesturePoint { + public final float x; + public final float y; + + public final long timestamp; + + public GesturePoint(float x, float y, long t) { + this.x = x; + this.y = y; + timestamp = t; + } + + static GesturePoint deserialize(DataInputStream in) throws IOException { + // Read X and Y + final float x = in.readFloat(); + final float y = in.readFloat(); + // Read timestamp + final long timeStamp = in.readLong(); + return new GesturePoint(x, y, timeStamp); + } +} diff --git a/core/java/android/gesture/GestureStore.java b/core/java/android/gesture/GestureStore.java new file mode 100644 index 000000000000..5f1a44503604 --- /dev/null +++ b/core/java/android/gesture/GestureStore.java @@ -0,0 +1,330 @@ +/* + * Copyright (C) 2008-2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gesture; + +import android.util.Log; +import android.os.SystemClock; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.DataOutputStream; +import java.io.DataInputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Set; +import java.util.Map; + +import static android.gesture.GestureConstants.LOG_TAG; + +/** + * GestureLibrary maintains gesture examples and makes predictions on a new + * gesture + */ +// +// File format for GestureStore: +// +// Nb. bytes Java type Description +// ----------------------------------- +// Header +// 2 bytes short File format version number +// 4 bytes int Number of entries +// Entry +// X bytes UTF String Entry name +// 4 bytes int Number of gestures +// Gesture +// 8 bytes long Gesture ID +// 4 bytes int Number of strokes +// Stroke +// 4 bytes int Number of points +// Point +// 4 bytes float X coordinate of the point +// 4 bytes float Y coordinate of the point +// 8 bytes long Time stamp +// +public class GestureStore { + public static final int SEQUENCE_INVARIANT = 1; + // when SEQUENCE_SENSITIVE is used, only single stroke gestures are currently allowed + public static final int SEQUENCE_SENSITIVE = 2; + + // ORIENTATION_SENSITIVE and ORIENTATION_INVARIANT are only for SEQUENCE_SENSITIVE gestures + public static final int ORIENTATION_INVARIANT = 1; + public static final int ORIENTATION_SENSITIVE = 2; + + private static final short FILE_FORMAT_VERSION = 1; + + private static final boolean PROFILE_LOADING_SAVING = false; + + private int mSequenceType = SEQUENCE_SENSITIVE; + private int mOrientationStyle = ORIENTATION_SENSITIVE; + + private final HashMap> mNamedGestures = + new HashMap>(); + + private Learner mClassifier; + + private boolean mChanged = false; + + public GestureStore() { + mClassifier = new InstanceLearner(); + } + + /** + * Specify how the gesture library will handle orientation. + * Use ORIENTATION_INVARIANT or ORIENTATION_SENSITIVE + * + * @param style + */ + public void setOrientationStyle(int style) { + mOrientationStyle = style; + } + + public int getOrientationStyle() { + return mOrientationStyle; + } + + /** + * @param type SEQUENCE_INVARIANT or SEQUENCE_SENSITIVE + */ + public void setSequenceType(int type) { + mSequenceType = type; + } + + /** + * @return SEQUENCE_INVARIANT or SEQUENCE_SENSITIVE + */ + public int getSequenceType() { + return mSequenceType; + } + + /** + * Get all the gesture entry names in the library + * + * @return a set of strings + */ + public Set getGestureEntries() { + return mNamedGestures.keySet(); + } + + /** + * Recognize a gesture + * + * @param gesture the query + * @return a list of predictions of possible entries for a given gesture + */ + public ArrayList recognize(Gesture gesture) { + Instance instance = Instance.createInstance(mSequenceType, + mOrientationStyle, gesture, null); + return mClassifier.classify(mSequenceType, instance.vector); + } + + /** + * Add a gesture for the entry + * + * @param entryName entry name + * @param gesture + */ + public void addGesture(String entryName, Gesture gesture) { + if (entryName == null || entryName.length() == 0) { + return; + } + ArrayList gestures = mNamedGestures.get(entryName); + if (gestures == null) { + gestures = new ArrayList(); + mNamedGestures.put(entryName, gestures); + } + gestures.add(gesture); + mClassifier.addInstance( + Instance.createInstance(mSequenceType, mOrientationStyle, gesture, entryName)); + mChanged = true; + } + + /** + * Remove a gesture from the library. If there are no more gestures for the + * given entry, the gesture entry will be removed. + * + * @param entryName entry name + * @param gesture + */ + public void removeGesture(String entryName, Gesture gesture) { + ArrayList gestures = mNamedGestures.get(entryName); + if (gestures == null) { + return; + } + + gestures.remove(gesture); + + // if there are no more samples, remove the entry automatically + if (gestures.isEmpty()) { + mNamedGestures.remove(entryName); + } + + mClassifier.removeInstance(gesture.getID()); + + mChanged = true; + } + + /** + * Remove a entry of gestures + * + * @param entryName the entry name + */ + public void removeEntry(String entryName) { + mNamedGestures.remove(entryName); + mClassifier.removeInstances(entryName); + mChanged = true; + } + + /** + * Get all the gestures of an entry + * + * @param entryName + * @return the list of gestures that is under this name + */ + public ArrayList getGestures(String entryName) { + ArrayList gestures = mNamedGestures.get(entryName); + if (gestures != null) { + return new ArrayList(gestures); + } else { + return null; + } + } + + public boolean hasChanged() { + return mChanged; + } + + /** + * Save the gesture library + */ + public void save(OutputStream stream) throws IOException { + save(stream, false); + } + + public void save(OutputStream stream, boolean closeStream) throws IOException { + DataOutputStream out = null; + + try { + long start; + if (PROFILE_LOADING_SAVING) { + start = SystemClock.elapsedRealtime(); + } + + final HashMap> maps = mNamedGestures; + + out = new DataOutputStream((stream instanceof BufferedOutputStream) ? stream : + new BufferedOutputStream(stream, GestureConstants.IO_BUFFER_SIZE)); + // Write version number + out.writeShort(FILE_FORMAT_VERSION); + // Write number of entries + out.writeInt(maps.size()); + + for (Map.Entry> entry : maps.entrySet()) { + final String key = entry.getKey(); + final ArrayList examples = entry.getValue(); + final int count = examples.size(); + + // Write entry name + out.writeUTF(key); + // Write number of examples for this entry + out.writeInt(count); + + for (int i = 0; i < count; i++) { + examples.get(i).serialize(out); + } + } + + out.flush(); + + if (PROFILE_LOADING_SAVING) { + long end = SystemClock.elapsedRealtime(); + Log.d(LOG_TAG, "Saving gestures library = " + (end - start) + " ms"); + } + + mChanged = false; + } finally { + if (closeStream) GestureUtilities.closeStream(out); + } + } + + /** + * Load the gesture library + */ + public void load(InputStream stream) throws IOException { + load(stream, false); + } + + public void load(InputStream stream, boolean closeStream) throws IOException { + DataInputStream in = null; + try { + in = new DataInputStream((stream instanceof BufferedInputStream) ? stream : + new BufferedInputStream(stream, GestureConstants.IO_BUFFER_SIZE)); + + long start; + if (PROFILE_LOADING_SAVING) { + start = SystemClock.elapsedRealtime(); + } + + // Read file format version number + final short versionNumber = in.readShort(); + switch (versionNumber) { + case 1: + readFormatV1(in); + break; + } + + if (PROFILE_LOADING_SAVING) { + long end = SystemClock.elapsedRealtime(); + Log.d(LOG_TAG, "Loading gestures library = " + (end - start) + " ms"); + } + } finally { + if (closeStream) GestureUtilities.closeStream(in); + } + } + + private void readFormatV1(DataInputStream in) throws IOException { + final Learner classifier = mClassifier; + final HashMap> namedGestures = mNamedGestures; + namedGestures.clear(); + + // Number of entries in the library + final int entriesCount = in.readInt(); + + for (int i = 0; i < entriesCount; i++) { + // Entry name + final String name = in.readUTF(); + // Number of gestures + final int gestureCount = in.readInt(); + + final ArrayList gestures = new ArrayList(gestureCount); + for (int j = 0; j < gestureCount; j++) { + final Gesture gesture = Gesture.deserialize(in); + gestures.add(gesture); + classifier.addInstance( + Instance.createInstance(mSequenceType, mOrientationStyle, gesture, name)); + } + + namedGestures.put(name, gestures); + } + } + + Learner getLearner() { + return mClassifier; + } +} diff --git a/core/java/android/gesture/GestureStroke.java b/core/java/android/gesture/GestureStroke.java new file mode 100644 index 000000000000..598eb8534ffc --- /dev/null +++ b/core/java/android/gesture/GestureStroke.java @@ -0,0 +1,229 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gesture; + +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.RectF; + +import java.io.IOException; +import java.io.DataOutputStream; +import java.io.DataInputStream; +import java.util.ArrayList; + +/** + * A gesture stroke started on a touch down and ended on a touch up. + */ +public class GestureStroke { + static final float TOUCH_TOLERANCE = 8; + + public final RectF boundingBox; + + public final float length; + public final float[] points; + + private final long[] timestamps; + private Path mCachedPath; + + /** + * Construct a gesture stroke from a list of gesture points + * + * @param points + */ + public GestureStroke(ArrayList points) { + final int count = points.size(); + final float[] tmpPoints = new float[count * 2]; + final long[] times = new long[count]; + + RectF bx = null; + float len = 0; + int index = 0; + + for (int i = 0; i < count; i++) { + final GesturePoint p = points.get(i); + tmpPoints[i * 2] = p.x; + tmpPoints[i * 2 + 1] = p.y; + times[index] = p.timestamp; + + if (bx == null) { + bx = new RectF(); + bx.top = p.y; + bx.left = p.x; + bx.right = p.x; + bx.bottom = p.y; + len = 0; + } else { + len += Math.sqrt(Math.pow(p.x - tmpPoints[(i - 1) * 2], 2) + + Math.pow(p.y - tmpPoints[(i -1 ) * 2 + 1], 2)); + bx.union(p.x, p.y); + } + index++; + } + + timestamps = times; + this.points = tmpPoints; + boundingBox = bx; + length = len; + } + + /** + * Draw the gesture with a given canvas and paint + * + * @param canvas + */ + void draw(Canvas canvas, Paint paint) { + if (mCachedPath == null) { + makePath(); + } + + canvas.drawPath(mCachedPath, paint); + } + + public Path getPath() { + if (mCachedPath == null) { + makePath(); + } + + return mCachedPath; + } + + private void makePath() { + final float[] localPoints = points; + final int count = localPoints.length; + + Path path = null; + + float mX = 0; + float mY = 0; + + for (int i = 0; i < count; i += 2) { + float x = localPoints[i]; + float y = localPoints[i + 1]; + if (path == null) { + path = new Path(); + path.moveTo(x, y); + mX = x; + mY = y; + } else { + float dx = Math.abs(x - mX); + float dy = Math.abs(y - mY); + if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) { + path.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2); + mX = x; + mY = y; + } + } + } + + mCachedPath = path; + } + + /** + * Convert the stroke to a Path based on the number of points + * + * @param width the width of the bounding box of the target path + * @param height the height of the bounding box of the target path + * @param numSample the number of points needed + * + * @return the path + */ + public Path toPath(float width, float height, int numSample) { + final float[] pts = GestureUtilities.temporalSampling(this, numSample); + final RectF rect = boundingBox; + + GestureUtilities.translate(pts, -rect.left, -rect.top); + + float sx = width / rect.width(); + float sy = height / rect.height(); + float scale = sx > sy ? sy : sx; + GestureUtilities.scale(pts, scale, scale); + + float mX = 0; + float mY = 0; + + Path path = null; + + final int count = pts.length; + + for (int i = 0; i < count; i += 2) { + float x = pts[i]; + float y = pts[i + 1]; + if (path == null) { + path = new Path(); + path.moveTo(x, y); + mX = x; + mY = y; + } else { + float dx = Math.abs(x - mX); + float dy = Math.abs(y - mY); + if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) { + path.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2); + mX = x; + mY = y; + } + } + } + + return path; + } + + void serialize(DataOutputStream out) throws IOException { + final float[] pts = points; + final long[] times = timestamps; + final int count = points.length; + + // Write number of points + out.writeInt(count / 2); + + for (int i = 0; i < count; i += 2) { + // Write X + out.writeFloat(pts[i]); + // Write Y + out.writeFloat(pts[i + 1]); + // Write timestamp + out.writeLong(times[i / 2]); + } + } + + static GestureStroke deserialize(DataInputStream in) throws IOException { + // Number of points + final int count = in.readInt(); + + final ArrayList points = new ArrayList(count); + for (int i = 0; i < count; i++) { + points.add(GesturePoint.deserialize(in)); + } + + return new GestureStroke(points); + } + + /** + * Invalidate the cached path that is used to render the stroke + */ + public void clearPath() { + if (mCachedPath != null) mCachedPath.rewind(); + } + + /** + * Compute an oriented bounding box of the stroke + * @return OrientedBoundingBox + */ + public OrientedBoundingBox computeOrientedBoundingBox() { + return GestureUtilities.computeOrientedBoundingBox(points); + } +} diff --git a/core/java/android/gesture/GestureUtilities.java b/core/java/android/gesture/GestureUtilities.java new file mode 100755 index 000000000000..40d70295fc9b --- /dev/null +++ b/core/java/android/gesture/GestureUtilities.java @@ -0,0 +1,475 @@ +/* + * Copyright (C) 2008-2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gesture; + +import android.graphics.RectF; +import android.util.Log; + +import java.util.ArrayList; +import java.util.Arrays; +import java.io.Closeable; +import java.io.IOException; + +import static android.gesture.GestureConstants.*; + +final class GestureUtilities { + private static final int TEMPORAL_SAMPLING_RATE = 16; + + private GestureUtilities() { + } + + /** + * Closes the specified stream. + * + * @param stream The stream to close. + */ + static void closeStream(Closeable stream) { + if (stream != null) { + try { + stream.close(); + } catch (IOException e) { + Log.e(LOG_TAG, "Could not close stream", e); + } + } + } + + static float[] spatialSampling(Gesture gesture, int sampleMatrixDimension) { + final float targetPatchSize = sampleMatrixDimension - 1; // edge inclusive + float[] sample = new float[sampleMatrixDimension * sampleMatrixDimension]; + Arrays.fill(sample, 0); + + RectF rect = gesture.getBoundingBox(); + float sx = targetPatchSize / rect.width(); + float sy = targetPatchSize / rect.height(); + float scale = sx < sy ? sx : sy; + + float preDx = -rect.centerX(); + float preDy = -rect.centerY(); + float postDx = targetPatchSize / 2; + float postDy = targetPatchSize / 2; + + final ArrayList strokes = gesture.getStrokes(); + final int count = strokes.size(); + + int size; + float xpos; + float ypos; + + for (int index = 0; index < count; index++) { + final GestureStroke stroke = strokes.get(index); + float[] strokepoints = stroke.points; + size = strokepoints.length; + + final float[] pts = new float[size]; + + for (int i = 0; i < size; i += 2) { + pts[i] = (strokepoints[i] + preDx) * scale + postDx; + pts[i + 1] = (strokepoints[i + 1] + preDy) * scale + postDy; + } + + float segmentEndX = -1; + float segmentEndY = -1; + + for (int i = 0; i < size; i += 2) { + + float segmentStartX = pts[i] < 0 ? 0 : pts[i]; + float segmentStartY = pts[i + 1] < 0 ? 0 : pts[i + 1]; + + if (segmentStartX > targetPatchSize) { + segmentStartX = targetPatchSize; + } + + if (segmentStartY > targetPatchSize) { + segmentStartY = targetPatchSize; + } + + plot(segmentStartX, segmentStartY, sample, sampleMatrixDimension); + + if (segmentEndX != -1) { + // evaluate horizontally + if (segmentEndX > segmentStartX) { + xpos = (float) Math.ceil(segmentStartX); + float slope = (segmentEndY - segmentStartY) / (segmentEndX - segmentStartX); + while (xpos < segmentEndX) { + ypos = slope * (xpos - segmentStartX) + segmentStartY; + plot(xpos, ypos, sample, sampleMatrixDimension); + xpos++; + } + } else if (segmentEndX < segmentStartX){ + xpos = (float) Math.ceil(segmentEndX); + float slope = (segmentEndY - segmentStartY) / (segmentEndX - segmentStartX); + while (xpos < segmentStartX) { + ypos = slope * (xpos - segmentStartX) + segmentStartY; + plot(xpos, ypos, sample, sampleMatrixDimension); + xpos++; + } + } + + // evaluating vertically + if (segmentEndY > segmentStartY) { + ypos = (float) Math.ceil(segmentStartY); + float invertSlope = (segmentEndX - segmentStartX) / (segmentEndY - segmentStartY); + while (ypos < segmentEndY) { + xpos = invertSlope * (ypos - segmentStartY) + segmentStartX; + plot(xpos, ypos, sample, sampleMatrixDimension); + ypos++; + } + } else if (segmentEndY < segmentStartY) { + ypos = (float) Math.ceil(segmentEndY); + float invertSlope = (segmentEndX - segmentStartX) / (segmentEndY - segmentStartY); + while (ypos < segmentStartY) { + xpos = invertSlope * (ypos - segmentStartY) + segmentStartX; + plot(xpos, ypos, sample, sampleMatrixDimension); + ypos++; + } + } + } + + segmentEndX = segmentStartX; + segmentEndY = segmentStartY; + } + } + + + return sample; + } + + private static void plot(float x, float y, float[] sample, int sampleSize) { + x = x < 0 ? 0 : x; + y = y < 0 ? 0 : y; + int xFloor = (int) Math.floor(x); + int xCeiling = (int) Math.ceil(x); + int yFloor = (int) Math.floor(y); + int yCeiling = (int) Math.ceil(y); + + // if it's an integer + if (x == xFloor && y == yFloor) { + int index = yCeiling * sampleSize + xCeiling; + if (sample[index] < 1){ + sample[index] = 1; + } + } else { + double topLeft = Math.sqrt(Math.pow(xFloor - x, 2) + Math.pow(yFloor - y, 2)); + double topRight = Math.sqrt(Math.pow(xCeiling - x, 2) + Math.pow(yFloor - y, 2)); + double btmLeft = Math.sqrt(Math.pow(xFloor - x, 2) + Math.pow(yCeiling - y, 2)); + double btmRight = Math.sqrt(Math.pow(xCeiling - x, 2) + Math.pow(yCeiling - y, 2)); + double sum = topLeft + topRight + btmLeft + btmRight; + + double value = topLeft / sum; + int index = yFloor * sampleSize + xFloor; + if (value > sample[index]){ + sample[index] = (float) value; + } + + value = topRight / sum; + index = yFloor * sampleSize + xCeiling; + if (value > sample[index]){ + sample[index] = (float) value; + } + + value = btmLeft / sum; + index = yCeiling * sampleSize + xFloor; + if (value > sample[index]){ + sample[index] = (float) value; + } + + value = btmRight / sum; + index = yCeiling * sampleSize + xCeiling; + if (value > sample[index]){ + sample[index] = (float) value; + } + } + } + + /** + * Featurize a stroke into a vector of a given number of elements + * + * @param stroke + * @param sampleSize + * @return a float array + */ + static float[] temporalSampling(GestureStroke stroke, int sampleSize) { + final float increment = stroke.length / (sampleSize - 1); + int vectorLength = sampleSize * 2; + float[] vector = new float[vectorLength]; + float distanceSoFar = 0; + float[] pts = stroke.points; + float lstPointX = pts[0]; + float lstPointY = pts[1]; + int index = 0; + float currentPointX = Float.MIN_VALUE; + float currentPointY = Float.MIN_VALUE; + vector[index] = lstPointX; + index++; + vector[index] = lstPointY; + index++; + int i = 0; + int count = pts.length / 2; + while (i < count) { + if (currentPointX == Float.MIN_VALUE) { + i++; + if (i >= count) { + break; + } + currentPointX = pts[i * 2]; + currentPointY = pts[i * 2 + 1]; + } + float deltaX = currentPointX - lstPointX; + float deltaY = currentPointY - lstPointY; + float distance = (float) Math.sqrt(deltaX * deltaX + deltaY * deltaY); + if (distanceSoFar + distance >= increment) { + float ratio = (increment - distanceSoFar) / distance; + float nx = lstPointX + ratio * deltaX; + float ny = lstPointY + ratio * deltaY; + vector[index] = nx; + index++; + vector[index] = ny; + index++; + lstPointX = nx; + lstPointY = ny; + distanceSoFar = 0; + } else { + lstPointX = currentPointX; + lstPointY = currentPointY; + currentPointX = Float.MIN_VALUE; + currentPointY = Float.MIN_VALUE; + distanceSoFar += distance; + } + } + + for (i = index; i < vectorLength; i += 2) { + vector[i] = lstPointX; + vector[i + 1] = lstPointY; + } + return vector; + } + + /** + * Calculate the centroid + * + * @param points + * @return the centroid + */ + static float[] computeCentroid(float[] points) { + float centerX = 0; + float centerY = 0; + int count = points.length; + for (int i = 0; i < count; i++) { + centerX += points[i]; + i++; + centerY += points[i]; + } + float[] center = new float[2]; + center[0] = 2 * centerX / count; + center[1] = 2 * centerY / count; + + return center; + } + + /** + * calculate the variance-covariance matrix, treat each point as a sample + * + * @param points + * @return the covariance matrix + */ + private static double[][] computeCoVariance(float[] points) { + double[][] array = new double[2][2]; + array[0][0] = 0; + array[0][1] = 0; + array[1][0] = 0; + array[1][1] = 0; + int count = points.length; + for (int i = 0; i < count; i++) { + float x = points[i]; + i++; + float y = points[i]; + array[0][0] += x * x; + array[0][1] += x * y; + array[1][0] = array[0][1]; + array[1][1] += y * y; + } + array[0][0] /= (count / 2); + array[0][1] /= (count / 2); + array[1][0] /= (count / 2); + array[1][1] /= (count / 2); + + return array; + } + + static float computeTotalLength(float[] points) { + float sum = 0; + int count = points.length - 4; + for (int i = 0; i < count; i += 2) { + float dx = points[i + 2] - points[i]; + float dy = points[i + 3] - points[i + 1]; + sum += Math.sqrt(dx * dx + dy * dy); + } + return sum; + } + + static double computeStraightness(float[] points) { + float totalLen = computeTotalLength(points); + float dx = points[2] - points[0]; + float dy = points[3] - points[1]; + return Math.sqrt(dx * dx + dy * dy) / totalLen; + } + + static double computeStraightness(float[] points, float totalLen) { + float dx = points[2] - points[0]; + float dy = points[3] - points[1]; + return Math.sqrt(dx * dx + dy * dy) / totalLen; + } + + /** + * Calculate the squared Euclidean distance between two vectors + * + * @param vector1 + * @param vector2 + * @return the distance + */ + static double squaredEuclideanDistance(float[] vector1, float[] vector2) { + double squaredDistance = 0; + int size = vector1.length; + for (int i = 0; i < size; i++) { + float difference = vector1[i] - vector2[i]; + squaredDistance += difference * difference; + } + return squaredDistance / size; + } + + /** + * Calculate the cosine distance between two instances + * + * @param vector1 + * @param vector2 + * @return the distance between 0 and Math.PI + */ + static double cosineDistance(float[] vector1, float[] vector2) { + float sum = 0; + int len = vector1.length; + for (int i = 0; i < len; i++) { + sum += vector1[i] * vector2[i]; + } + return Math.acos(sum); + } + + static OrientedBoundingBox computeOrientedBoundingBox(ArrayList pts) { + GestureStroke stroke = new GestureStroke(pts); + float[] points = temporalSampling(stroke, TEMPORAL_SAMPLING_RATE); + return computeOrientedBoundingBox(points); + } + + static OrientedBoundingBox computeOrientedBoundingBox(float[] points) { + float[] meanVector = computeCentroid(points); + return computeOrientedBoundingBox(points, meanVector); + } + + static OrientedBoundingBox computeOrientedBoundingBox(float[] points, float[] centroid) { + translate(points, -centroid[0], -centroid[1]); + + double[][] array = computeCoVariance(points); + double[] targetVector = computeOrientation(array); + + float angle; + if (targetVector[0] == 0 && targetVector[1] == 0) { + angle = (float) -Math.PI/2; + } else { // -PI maxx) { + maxx = points[i]; + } + i++; + if (points[i] < miny) { + miny = points[i]; + } + if (points[i] > maxy) { + maxy = points[i]; + } + } + + return new OrientedBoundingBox((float) (angle * 180 / Math.PI), centroid[0], centroid[1], maxx - minx, maxy - miny); + } + + private static double[] computeOrientation(double[][] covarianceMatrix) { + double[] targetVector = new double[2]; + if (covarianceMatrix[0][1] == 0 || covarianceMatrix[1][0] == 0) { + targetVector[0] = 1; + targetVector[1] = 0; + } + + double a = -covarianceMatrix[0][0] - covarianceMatrix[1][1]; + double b = covarianceMatrix[0][0] * covarianceMatrix[1][1] - covarianceMatrix[0][1] + * covarianceMatrix[1][0]; + double value = a / 2; + double rightside = Math.sqrt(Math.pow(value, 2) - b); + double lambda1 = -value + rightside; + double lambda2 = -value - rightside; + if (lambda1 == lambda2) { + targetVector[0] = 0; + targetVector[1] = 0; + } else { + double lambda = lambda1 > lambda2 ? lambda1 : lambda2; + targetVector[0] = 1; + targetVector[1] = (lambda - covarianceMatrix[0][0]) / covarianceMatrix[0][1]; + } + return targetVector; + } + + + static float[] rotate(float[] points, double angle) { + double cos = Math.cos(angle); + double sin = Math.sin(angle); + int size = points.length; + for (int i = 0; i < size; i += 2) { + float x = (float) (points[i] * cos - points[i + 1] * sin); + float y = (float) (points[i] * sin + points[i + 1] * cos); + points[i] = x; + points[i + 1] = y; + } + return points; + } + + static float[] translate(float[] points, float dx, float dy) { + int size = points.length; + for (int i = 0; i < size; i += 2) { + points[i] += dx; + points[i + 1] += dy; + } + return points; + } + + static float[] scale(float[] points, float sx, float sy) { + int size = points.length; + for (int i = 0; i < size; i += 2) { + points[i] *= sx; + points[i + 1] *= sy; + } + return points; + } +} diff --git a/core/java/android/gesture/Instance.java b/core/java/android/gesture/Instance.java new file mode 100755 index 000000000000..ef208acf4ec7 --- /dev/null +++ b/core/java/android/gesture/Instance.java @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2008-2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gesture; + + +/** + * An instance represents a sample if the label is available or a query if the + * label is null. + */ +class Instance { + private static final int SEQUENCE_SAMPLE_SIZE = 16; + + private static final int PATCH_SAMPLE_SIZE = 16; + + private final static float[] ORIENTATIONS = { + 0, (float) (Math.PI / 4), (float) (Math.PI / 2), (float) (Math.PI * 3 / 4), + (float) Math.PI, -0, (float) (-Math.PI / 4), (float) (-Math.PI / 2), + (float) (-Math.PI * 3 / 4), (float) -Math.PI + }; + + // the feature vector + final float[] vector; + + // the label can be null + final String label; + + // the id of the instance + final long id; + + private Instance(long id, float[] sample, String sampleName) { + this.id = id; + vector = sample; + label = sampleName; + } + + private void normalize() { + float[] sample = vector; + float sum = 0; + + int size = sample.length; + for (int i = 0; i < size; i++) { + sum += sample[i] * sample[i]; + } + + float magnitude = (float)Math.sqrt(sum); + for (int i = 0; i < size; i++) { + sample[i] /= magnitude; + } + } + + /** + * create a learning instance for a single stroke gesture + * + * @param gesture + * @param label + * @return the instance + */ + static Instance createInstance(int sequenceType, int orientationType, Gesture gesture, String label) { + float[] pts; + Instance instance; + if (sequenceType == GestureStore.SEQUENCE_SENSITIVE) { + pts = temporalSampler(orientationType, gesture); + instance = new Instance(gesture.getID(), pts, label); + instance.normalize(); + } else { + pts = spatialSampler(gesture); + instance = new Instance(gesture.getID(), pts, label); + } + return instance; + } + + private static float[] spatialSampler(Gesture gesture) { + return GestureUtilities.spatialSampling(gesture, PATCH_SAMPLE_SIZE); + } + + private static float[] temporalSampler(int orientationType, Gesture gesture) { + float[] pts = GestureUtilities.temporalSampling(gesture.getStrokes().get(0), + SEQUENCE_SAMPLE_SIZE); + float[] center = GestureUtilities.computeCentroid(pts); + float orientation = (float)Math.atan2(pts[1] - center[1], pts[0] - center[0]); + + float adjustment = -orientation; + if (orientationType == GestureStore.ORIENTATION_SENSITIVE) { + int count = ORIENTATIONS.length; + for (int i = 0; i < count; i++) { + float delta = ORIENTATIONS[i] - orientation; + if (Math.abs(delta) < Math.abs(adjustment)) { + adjustment = delta; + } + } + } + + GestureUtilities.translate(pts, -center[0], -center[1]); + GestureUtilities.rotate(pts, adjustment); + + return pts; + } + +} diff --git a/core/java/android/gesture/InstanceLearner.java b/core/java/android/gesture/InstanceLearner.java new file mode 100644 index 000000000000..b93b76fa9a87 --- /dev/null +++ b/core/java/android/gesture/InstanceLearner.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2008-2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gesture; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.TreeMap; + +/** + * An implementation of an instance-based learner + */ + +class InstanceLearner extends Learner { + private static final Comparator sComparator = new Comparator() { + public int compare(Prediction object1, Prediction object2) { + double score1 = object1.score; + double score2 = object2.score; + if (score1 > score2) { + return -1; + } else if (score1 < score2) { + return 1; + } else { + return 0; + } + } + }; + + @Override + ArrayList classify(int sequenceType, float[] vector) { + ArrayList predictions = new ArrayList(); + ArrayList instances = getInstances(); + int count = instances.size(); + TreeMap label2score = new TreeMap(); + for (int i = 0; i < count; i++) { + Instance sample = instances.get(i); + if (sample.vector.length != vector.length) { + continue; + } + double distance; + if (sequenceType == GestureStore.SEQUENCE_SENSITIVE) { + distance = GestureUtilities.cosineDistance(sample.vector, vector); + } else { + distance = GestureUtilities.squaredEuclideanDistance(sample.vector, vector); + } + double weight; + if (distance == 0) { + weight = Double.MAX_VALUE; + } else { + weight = 1 / distance; + } + Double score = label2score.get(sample.label); + if (score == null || weight > score) { + label2score.put(sample.label, weight); + } + } + +// double sum = 0; + for (String name : label2score.keySet()) { + double score = label2score.get(name); +// sum += score; + predictions.add(new Prediction(name, score)); + } + + // normalize +// for (Prediction prediction : predictions) { +// prediction.score /= sum; +// } + + Collections.sort(predictions, sComparator); + + return predictions; + } +} diff --git a/core/java/android/gesture/Learner.java b/core/java/android/gesture/Learner.java new file mode 100755 index 000000000000..feacde5f9736 --- /dev/null +++ b/core/java/android/gesture/Learner.java @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2008-2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gesture; + +import java.util.ArrayList; + +/** + * The abstract class of a gesture learner + */ +abstract class Learner { + private final ArrayList mInstances = new ArrayList(); + + /** + * Add an instance to the learner + * + * @param instance + */ + void addInstance(Instance instance) { + mInstances.add(instance); + } + + /** + * Retrieve all the instances + * + * @return instances + */ + ArrayList getInstances() { + return mInstances; + } + + /** + * Remove an instance based on its id + * + * @param id + */ + void removeInstance(long id) { + ArrayList instances = mInstances; + int count = instances.size(); + for (int i = 0; i < count; i++) { + Instance instance = instances.get(i); + if (id == instance.id) { + instances.remove(instance); + return; + } + } + } + + /** + * Remove all the instances of a category + * + * @param name the category name + */ + void removeInstances(String name) { + final ArrayList toDelete = new ArrayList(); + final ArrayList instances = mInstances; + final int count = instances.size(); + + for (int i = 0; i < count; i++) { + final Instance instance = instances.get(i); + // the label can be null, as specified in Instance + if ((instance.label == null && name == null) || instance.label.equals(name)) { + toDelete.add(instance); + } + } + instances.removeAll(toDelete); + } + + abstract ArrayList classify(int gestureType, float[] vector); +} diff --git a/core/java/android/gesture/OrientedBoundingBox.java b/core/java/android/gesture/OrientedBoundingBox.java new file mode 100644 index 000000000000..f1335ee12232 --- /dev/null +++ b/core/java/android/gesture/OrientedBoundingBox.java @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2008-2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gesture; + +import android.graphics.Matrix; +import android.graphics.Path; + +/** + * An oriented bounding box + */ +public class OrientedBoundingBox { + public final float squareness; + + public final float width; + public final float height; + + public final float orientation; + + public final float centerX; + public final float centerY; + + OrientedBoundingBox(float angle, float cx, float cy, float w, float h) { + orientation = angle; + width = w; + height = h; + centerX = cx; + centerY = cy; + float ratio = w / h; + if (ratio > 1) { + squareness = 1 / ratio; + } else { + squareness = ratio; + } + } + + /** + * Currently used for debugging purpose only. + * + * @hide + */ + public Path toPath() { + Path path = new Path(); + float[] point = new float[2]; + point[0] = -width / 2; + point[1] = height / 2; + Matrix matrix = new Matrix(); + matrix.setRotate(orientation); + matrix.postTranslate(centerX, centerY); + matrix.mapPoints(point); + path.moveTo(point[0], point[1]); + + point[0] = -width / 2; + point[1] = -height / 2; + matrix.mapPoints(point); + path.lineTo(point[0], point[1]); + + point[0] = width / 2; + point[1] = -height / 2; + matrix.mapPoints(point); + path.lineTo(point[0], point[1]); + + point[0] = width / 2; + point[1] = height / 2; + matrix.mapPoints(point); + path.lineTo(point[0], point[1]); + + path.close(); + + return path; + } +} diff --git a/core/java/android/gesture/Prediction.java b/core/java/android/gesture/Prediction.java new file mode 100755 index 000000000000..ce6ad5745df6 --- /dev/null +++ b/core/java/android/gesture/Prediction.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2008-2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gesture; + +public class Prediction { + public final String name; + + public double score; + + Prediction(String label, double predictionScore) { + name = label; + score = predictionScore; + } + + @Override + public String toString() { + return name; + } +} diff --git a/core/java/android/gesture/package.html b/core/java/android/gesture/package.html new file mode 100644 index 000000000000..a54a01713c91 --- /dev/null +++ b/core/java/android/gesture/package.html @@ -0,0 +1,5 @@ + + +@hide + + diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index ca579b6b501b..091bc1700988 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -39,13 +39,16 @@ import android.os.Message; public class Camera { private static final String TAG = "Camera"; - // These match the enum in libs/android_runtime/android_hardware_Camera.cpp - private static final int SHUTTER_CALLBACK = 0; - private static final int RAW_PICTURE_CALLBACK = 1; - private static final int JPEG_PICTURE_CALLBACK = 2; - private static final int PREVIEW_CALLBACK = 3; - private static final int AUTOFOCUS_CALLBACK = 4; - private static final int ERROR_CALLBACK = 5; + // These match the enums in frameworks/base/include/ui/Camera.h + private static final int CAMERA_MSG_ERROR = 0; + private static final int CAMERA_MSG_SHUTTER = 1; + private static final int CAMERA_MSG_FOCUS = 2; + private static final int CAMERA_MSG_ZOOM = 3; + private static final int CAMERA_MSG_PREVIEW_FRAME = 4; + private static final int CAMERA_MSG_VIDEO_FRAME = 5; + private static final int CAMERA_MSG_POSTVIEW_FRAME = 6; + private static final int CAMERA_MSG_RAW_IMAGE = 7; + private static final int CAMERA_MSG_COMPRESSED_IMAGE = 8; private int mNativeContext; // accessed by native methods private EventHandler mEventHandler; @@ -152,7 +155,11 @@ public class Camera { * @throws IOException if the method fails. */ public final void setPreviewDisplay(SurfaceHolder holder) throws IOException { - setPreviewDisplay(holder.getSurface()); + if (holder != null) { + setPreviewDisplay(holder.getSurface()); + } else { + setPreviewDisplay((Surface)null); + } } private native final void setPreviewDisplay(Surface surface); @@ -231,22 +238,23 @@ public class Camera { @Override public void handleMessage(Message msg) { switch(msg.what) { - case SHUTTER_CALLBACK: + case CAMERA_MSG_SHUTTER: if (mShutterCallback != null) { mShutterCallback.onShutter(); } return; - case RAW_PICTURE_CALLBACK: + + case CAMERA_MSG_RAW_IMAGE: if (mRawImageCallback != null) mRawImageCallback.onPictureTaken((byte[])msg.obj, mCamera); return; - case JPEG_PICTURE_CALLBACK: + case CAMERA_MSG_COMPRESSED_IMAGE: if (mJpegCallback != null) mJpegCallback.onPictureTaken((byte[])msg.obj, mCamera); return; - case PREVIEW_CALLBACK: + case CAMERA_MSG_PREVIEW_FRAME: if (mPreviewCallback != null) { mPreviewCallback.onPreviewFrame((byte[])msg.obj, mCamera); if (mOneShot) { @@ -255,12 +263,12 @@ public class Camera { } return; - case AUTOFOCUS_CALLBACK: + case CAMERA_MSG_FOCUS: if (mAutoFocusCallback != null) mAutoFocusCallback.onAutoFocus(msg.arg1 == 0 ? false : true, mCamera); return; - case ERROR_CALLBACK: + case CAMERA_MSG_ERROR : Log.e(TAG, "Error " + msg.arg1); if (mErrorCallback != null) mErrorCallback.onError(msg.arg1, mCamera); @@ -363,7 +371,7 @@ public class Camera { } private native final void native_takePicture(); - // These match the enum in libs/android_runtime/android_hardware_Camera.cpp + // These match the enum in include/ui/Camera.h /** Unspecified camerar error. @see #ErrorCallback */ public static final int CAMERA_ERROR_UNKNOWN = 1; /** Media server died. In this case, the application must release the diff --git a/core/java/android/hardware/ISensorService.aidl b/core/java/android/hardware/ISensorService.aidl index 04af2aec4523..67180bd90064 100644 --- a/core/java/android/hardware/ISensorService.aidl +++ b/core/java/android/hardware/ISensorService.aidl @@ -17,13 +17,13 @@ package android.hardware; -import android.os.ParcelFileDescriptor; +import android.os.Bundle; /** * {@hide} */ interface ISensorService { - ParcelFileDescriptor getDataChanel(); + Bundle getDataChannel(); boolean enableSensor(IBinder listener, String name, int sensor, int enable); } diff --git a/core/java/android/hardware/SensorManager.java b/core/java/android/hardware/SensorManager.java index 67df23b270a4..bf945ec7bae3 100644 --- a/core/java/android/hardware/SensorManager.java +++ b/core/java/android/hardware/SensorManager.java @@ -18,7 +18,9 @@ package android.hardware; import android.content.Context; import android.os.Binder; +import android.os.Bundle; import android.os.Looper; +import android.os.Parcelable; import android.os.ParcelFileDescriptor; import android.os.Process; import android.os.RemoteException; @@ -280,8 +282,8 @@ public class SensorManager void startLocked(ISensorService service) { try { if (mThread == null) { - ParcelFileDescriptor fd = service.getDataChanel(); - mThread = new Thread(new SensorThreadRunnable(fd), + Bundle dataChannel = service.getDataChannel(); + mThread = new Thread(new SensorThreadRunnable(dataChannel), SensorThread.class.getName()); mThread.start(); } @@ -291,10 +293,52 @@ public class SensorManager } private class SensorThreadRunnable implements Runnable { - private ParcelFileDescriptor mSensorDataFd; - SensorThreadRunnable(ParcelFileDescriptor fd) { - mSensorDataFd = fd; + private Bundle mDataChannel; + SensorThreadRunnable(Bundle dataChannel) { + mDataChannel = dataChannel; } + + private boolean open() { + if (mDataChannel == null) { + Log.e(TAG, "mDataChannel == NULL, exiting"); + synchronized (sListeners) { + mThread = null; + } + return false; + } + + // this thread is guaranteed to be unique + Parcelable[] pfds = mDataChannel.getParcelableArray("fds"); + FileDescriptor[] fds; + if (pfds != null) { + int length = pfds.length; + fds = new FileDescriptor[length]; + for (int i = 0; i < length; i++) { + ParcelFileDescriptor pfd = (ParcelFileDescriptor)pfds[i]; + fds[i] = pfd.getFileDescriptor(); + } + } else { + fds = null; + } + int[] ints = mDataChannel.getIntArray("ints"); + sensors_data_open(fds, ints); + if (pfds != null) { + try { + // close our copies of the file descriptors, + // since we are just passing these to the JNI code and not using them here. + for (int i = pfds.length - 1; i >= 0; i--) { + ParcelFileDescriptor pfd = (ParcelFileDescriptor)pfds[i]; + pfd.close(); + } + } catch (IOException e) { + // *shrug* + Log.e(TAG, "IOException: ", e); + } + } + mDataChannel = null; + return true; + } + public void run() { //Log.d(TAG, "entering main sensor thread"); final float[] values = new float[3]; @@ -302,23 +346,9 @@ public class SensorManager final long timestamp[] = new long[1]; Process.setThreadPriority(Process.THREAD_PRIORITY_DISPLAY); - if (mSensorDataFd == null) { - Log.e(TAG, "mSensorDataFd == NULL, exiting"); - synchronized (sListeners) { - mThread = null; - } + if (!open()) { return; } - // this thread is guaranteed to be unique - sensors_data_open(mSensorDataFd.getFileDescriptor()); - try { - mSensorDataFd.close(); - } catch (IOException e) { - // *shrug* - Log.e(TAG, "IOException: ", e); - } - mSensorDataFd = null; - while (true) { // wait for an event @@ -1469,7 +1499,7 @@ public class SensorManager // Used within this module from outside SensorManager, don't make private static native int sensors_data_init(); static native int sensors_data_uninit(); - static native int sensors_data_open(FileDescriptor fd); + static native int sensors_data_open(FileDescriptor[] fds, int[] ints); static native int sensors_data_close(); static native int sensors_data_poll(float[] values, int[] status, long[] timestamp); } diff --git a/core/java/android/net/http/RequestHandle.java b/core/java/android/net/http/RequestHandle.java index c4ee5b0da0e2..6a97951fecbd 100644 --- a/core/java/android/net/http/RequestHandle.java +++ b/core/java/android/net/http/RequestHandle.java @@ -159,11 +159,11 @@ public class RequestHandle { e.printStackTrace(); } - // update the "cookie" header based on the redirected url - mHeaders.remove("cookie"); + // update the "Cookie" header based on the redirected url + mHeaders.remove("Cookie"); String cookie = CookieManager.getInstance().getCookie(mUri); if (cookie != null && cookie.length() > 0) { - mHeaders.put("cookie", cookie); + mHeaders.put("Cookie", cookie); } if ((statusCode == 302 || statusCode == 303) && mMethod.equals("POST")) { diff --git a/core/java/android/os/AsyncTask.java b/core/java/android/os/AsyncTask.java index 6c135825a99f..abfb27412de0 100644 --- a/core/java/android/os/AsyncTask.java +++ b/core/java/android/os/AsyncTask.java @@ -127,12 +127,12 @@ import java.util.concurrent.atomic.AtomicInteger; public abstract class AsyncTask { private static final String LOG_TAG = "AsyncTask"; - private static final int CORE_POOL_SIZE = 1; - private static final int MAXIMUM_POOL_SIZE = 10; + private static final int CORE_POOL_SIZE = 5; + private static final int MAXIMUM_POOL_SIZE = 128; private static final int KEEP_ALIVE = 10; private static final BlockingQueue sWorkQueue = - new LinkedBlockingQueue(MAXIMUM_POOL_SIZE); + new LinkedBlockingQueue(10); private static final ThreadFactory sThreadFactory = new ThreadFactory() { private final AtomicInteger mCount = new AtomicInteger(1); diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 8a0fd58530b0..528def5c4011 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -68,6 +68,20 @@ public abstract class BatteryStats implements Parcelable { */ public static final int WIFI_MULTICAST_ENABLED = 7; + /** + * A constant indicating an audio turn on timer + * + * {@hide} + */ + public static final int AUDIO_TURNED_ON = 7; + + /** + * A constant indicating a video turn on timer + * + * {@hide} + */ + public static final int VIDEO_TURNED_ON = 8; + /** * Include all of the data in the stats, including previously saved data. */ @@ -164,7 +178,7 @@ public abstract class BatteryStats implements Parcelable { * @return a time in microseconds */ public abstract long getTotalTimeLocked(long batteryRealtime, int which); - + /** * Temporary for debugging. */ @@ -234,11 +248,17 @@ public abstract class BatteryStats implements Parcelable { public abstract void noteScanWifiLockReleasedLocked(); public abstract void noteWifiMulticastEnabledLocked(); public abstract void noteWifiMulticastDisabledLocked(); + public abstract void noteAudioTurnedOnLocked(); + public abstract void noteAudioTurnedOffLocked(); + public abstract void noteVideoTurnedOnLocked(); + public abstract void noteVideoTurnedOffLocked(); public abstract long getWifiTurnedOnTime(long batteryRealtime, int which); public abstract long getFullWifiLockTime(long batteryRealtime, int which); public abstract long getScanWifiLockTime(long batteryRealtime, int which); public abstract long getWifiMulticastTime(long batteryRealtime, int which); + public abstract long getAudioTurnedOnTime(long batteryRealtime, int which); + public abstract long getVideoTurnedOnTime(long batteryRealtime, int which); /** * Note that these must match the constants in android.os.LocalPowerManager. @@ -287,6 +307,13 @@ public abstract class BatteryStats implements Parcelable { * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. */ public abstract int getStarts(int which); + + /** + * Returns the cpu time spent in microseconds while the process was in the foreground. + * @param which one of STATS_TOTAL, STATS_LAST, STATS_CURRENT or STATS_UNPLUGGED + * @return foreground cpu time in microseconds + */ + public abstract long getForegroundTime(int which); } /** @@ -344,7 +371,7 @@ public abstract class BatteryStats implements Parcelable { public abstract int getStartCount(); /** - * Returns the time in milliseconds that the screen has been on while the device was + * Returns the time in microseconds that the screen has been on while the device was * running on battery. * * {@hide} @@ -364,7 +391,7 @@ public abstract class BatteryStats implements Parcelable { public static final int NUM_SCREEN_BRIGHTNESS_BINS = 5; /** - * Returns the time in milliseconds that the screen has been on with + * Returns the time in microseconds that the screen has been on with * the given brightness * * {@hide} @@ -375,7 +402,7 @@ public abstract class BatteryStats implements Parcelable { public abstract int getInputEventCount(int which); /** - * Returns the time in milliseconds that the phone has been on while the device was + * Returns the time in microseconds that the phone has been on while the device was * running on battery. * * {@hide} @@ -395,7 +422,7 @@ public abstract class BatteryStats implements Parcelable { public static final int NUM_SIGNAL_STRENGTH_BINS = 5; /** - * Returns the time in milliseconds that the phone has been running with + * Returns the time in microseconds that the phone has been running with * the given signal strength. * * {@hide} @@ -423,7 +450,7 @@ public abstract class BatteryStats implements Parcelable { public static final int NUM_DATA_CONNECTION_TYPES = 5; /** - * Returns the time in milliseconds that the phone has been running with + * Returns the time in microseconds that the phone has been running with * the given data connection. * * {@hide} @@ -440,7 +467,7 @@ public abstract class BatteryStats implements Parcelable { public abstract int getPhoneDataConnectionCount(int dataType, int which); /** - * Returns the time in milliseconds that wifi has been on while the device was + * Returns the time in microseconds that wifi has been on while the device was * running on battery. * * {@hide} @@ -448,7 +475,7 @@ public abstract class BatteryStats implements Parcelable { public abstract long getWifiOnTime(long batteryRealtime, int which); /** - * Returns the time in milliseconds that wifi has been on and the driver has + * Returns the time in microseconds that wifi has been on and the driver has * been in the running state while the device was running on battery. * * {@hide} @@ -456,7 +483,7 @@ public abstract class BatteryStats implements Parcelable { public abstract long getWifiRunningTime(long batteryRealtime, int which); /** - * Returns the time in milliseconds that bluetooth has been on while the device was + * Returns the time in microseconds that bluetooth has been on while the device was * running on battery. * * {@hide} diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java index 5487c545c12a..830b0bd7ceb1 100644 --- a/core/java/android/os/Build.java +++ b/core/java/android/os/Build.java @@ -38,6 +38,12 @@ public class Build { /** The name of the underlying board, like "goldfish". */ public static final String BOARD = getString("ro.product.board"); + /** The name of the instruction set (CPU type + ABI convention) of native code. */ + public static final String CPU_ABI = getString("ro.product.cpu.abi"); + + /** The manufacturer of the product/hardware. */ + public static final String MANUFACTURER = getString("ro.product.manufacturer"); + /** The brand (e.g., carrier) the software is customized for, if any. */ public static final String BRAND = getString("ro.product.brand"); @@ -86,6 +92,12 @@ public class Build { * increment monotonically with each official platform release. */ public static class VERSION_CODES { + /** + * Magic version number for a current development build, which has + * not yet turned into an official release. + */ + public static final int CUR_DEVELOPMENT = 10000; + /** * October 2008: The original, first, version of Android. Yay! */ @@ -98,6 +110,19 @@ public class Build { * May 2009: Android 1.5. */ public static final int CUPCAKE = 3; + /** + * Current work on "Donut" development branch. + * + *

      Applications targeting this or a later release will get these + * new changes in behavior:

      + *
        + *
      • They must explicitly request the + * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} permission to be + * able to modify the contents of the SD card. (Apps targeting + * earlier versions will always request the permission.) + *
      + */ + public static final int DONUT = CUR_DEVELOPMENT; } /** The type of build, like "user" or "eng". */ diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java index b669fa2d695f..a91655f8e8e9 100644 --- a/core/java/android/os/Bundle.java +++ b/core/java/android/os/Bundle.java @@ -78,6 +78,10 @@ public final class Bundle implements Parcelable, Cloneable { readFromParcel(parcelledData); } + /* package */ Bundle(Parcel parcelledData, int length) { + readFromParcelInner(parcelledData, length); + } + /** * Constructs a new, empty Bundle that uses a specific ClassLoader for * instantiating Parcelable and Serializable objects. @@ -155,13 +159,14 @@ public final class Bundle implements Parcelable, Cloneable { return; } - mParcelledData.setDataPosition(0); - Bundle b = mParcelledData.readBundleUnpacked(mClassLoader); - mMap = b.mMap; - - mHasFds = mParcelledData.hasFileDescriptors(); - mFdsKnown = true; - + int N = mParcelledData.readInt(); + if (N < 0) { + return; + } + if (mMap == null) { + mMap = new HashMap(); + } + mParcelledData.readMapInternal(mMap, N, mClassLoader); mParcelledData.recycle(); mParcelledData = null; } @@ -1427,7 +1432,25 @@ public final class Bundle implements Parcelable, Cloneable { * @param parcel The parcel to copy this bundle to. */ public void writeToParcel(Parcel parcel, int flags) { - parcel.writeBundle(this); + if (mParcelledData != null) { + int length = mParcelledData.dataSize(); + parcel.writeInt(length); + parcel.writeInt(0x4C444E42); // 'B' 'N' 'D' 'L' + parcel.appendFrom(mParcelledData, 0, length); + } else { + parcel.writeInt(-1); // dummy, will hold length + parcel.writeInt(0x4C444E42); // 'B' 'N' 'D' 'L' + + int oldPos = parcel.dataPosition(); + parcel.writeMapInternal(mMap); + int newPos = parcel.dataPosition(); + + // Backpatch length + parcel.setDataPosition(oldPos - 8); + int length = newPos - oldPos; + parcel.writeInt(length); + parcel.setDataPosition(newPos); + } } /** @@ -1436,8 +1459,33 @@ public final class Bundle implements Parcelable, Cloneable { * @param parcel The parcel to overwrite this bundle from. */ public void readFromParcel(Parcel parcel) { - mParcelledData = parcel; - mHasFds = mParcelledData.hasFileDescriptors(); + int length = parcel.readInt(); + if (length < 0) { + throw new RuntimeException("Bad length in parcel: " + length); + } + readFromParcelInner(parcel, length); + } + + void readFromParcelInner(Parcel parcel, int length) { + int magic = parcel.readInt(); + if (magic != 0x4C444E42) { + //noinspection ThrowableInstanceNeverThrown + String st = Log.getStackTraceString(new RuntimeException()); + Log.e("Bundle", "readBundle: bad magic number"); + Log.e("Bundle", "readBundle: trace = " + st); + } + + // Advance within this Parcel + int offset = parcel.dataPosition(); + parcel.setDataPosition(offset + length); + + Parcel p = Parcel.obtain(); + p.setDataPosition(0); + p.appendFrom(parcel, offset, length); + p.setDataPosition(0); + + mParcelledData = p; + mHasFds = p.hasFileDescriptors(); mFdsKnown = true; } diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java index 8fcb4d7a40a3..d40ea6b300c5 100644 --- a/core/java/android/os/Debug.java +++ b/core/java/android/os/Debug.java @@ -21,6 +21,7 @@ import com.android.internal.util.TypedProperties; import android.util.Config; import android.util.Log; +import java.io.FileDescriptor; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; @@ -377,6 +378,20 @@ href="{@docRoot}guide/developing/tools/traceview.html">Traceview: A Graphical Lo VMDebug.startMethodTracing(pathName, bufferSize, flags); } + /** + * Like startMethodTracing(String, int, int), but taking an already-opened + * FileDescriptor in which the trace is written. The file name is also + * supplied simply for logging. Makes a dup of the file descriptor. + * + * Not exposed in the SDK unless we are really comfortable with supporting + * this and find it would be useful. + * @hide + */ + public static void startMethodTracing(String traceName, FileDescriptor fd, + int bufferSize, int flags) { + VMDebug.startMethodTracing(traceName, fd, bufferSize, flags); + } + /** * Determine whether method tracing is currently active. * @hide diff --git a/core/java/android/os/MemoryFile.java b/core/java/android/os/MemoryFile.java index 76e4f47f8d2b..c14925cd3839 100644 --- a/core/java/android/os/MemoryFile.java +++ b/core/java/android/os/MemoryFile.java @@ -18,6 +18,7 @@ package android.os; import android.util.Log; +import java.io.FileDescriptor; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -35,48 +36,120 @@ import java.io.OutputStream; public class MemoryFile { private static String TAG = "MemoryFile"; - - // returns fd - private native int native_open(String name, int length); + + // mmap(2) protection flags from + private static final int PROT_READ = 0x1; + private static final int PROT_WRITE = 0x2; + + private static native FileDescriptor native_open(String name, int length) throws IOException; // returns memory address for ashmem region - private native int native_mmap(int fd, int length); - private native void native_close(int fd); - private native int native_read(int fd, int address, byte[] buffer, - int srcOffset, int destOffset, int count, boolean isUnpinned); - private native void native_write(int fd, int address, byte[] buffer, - int srcOffset, int destOffset, int count, boolean isUnpinned); - private native void native_pin(int fd, boolean pin); - - private int mFD; // ashmem file descriptor + private static native int native_mmap(FileDescriptor fd, int length, int mode) + throws IOException; + private static native void native_munmap(int addr, int length) throws IOException; + private static native void native_close(FileDescriptor fd); + private static native int native_read(FileDescriptor fd, int address, byte[] buffer, + int srcOffset, int destOffset, int count, boolean isUnpinned) throws IOException; + private static native void native_write(FileDescriptor fd, int address, byte[] buffer, + int srcOffset, int destOffset, int count, boolean isUnpinned) throws IOException; + private static native void native_pin(FileDescriptor fd, boolean pin) throws IOException; + private static native boolean native_is_ashmem_region(FileDescriptor fd) throws IOException; + + private FileDescriptor mFD; // ashmem file descriptor private int mAddress; // address of ashmem memory private int mLength; // total length of our ashmem region private boolean mAllowPurging = false; // true if our ashmem region is unpinned + private final boolean mOwnsRegion; // false if this is a ref to an existing ashmem region /** - * MemoryFile constructor. + * Allocates a new ashmem region. The region is initially not purgable. * * @param name optional name for the file (can be null). * @param length of the memory file in bytes. + * @throws IOException if the memory file could not be created. */ - public MemoryFile(String name, int length) { + public MemoryFile(String name, int length) throws IOException { mLength = length; mFD = native_open(name, length); - mAddress = native_mmap(mFD, length); + mAddress = native_mmap(mFD, length, PROT_READ | PROT_WRITE); + mOwnsRegion = true; } /** - * Closes and releases all resources for the memory file. + * Creates a reference to an existing memory file. Changes to the original file + * will be available through this reference. + * Calls to {@link #allowPurging(boolean)} on the returned MemoryFile will fail. + * + * @param fd File descriptor for an existing memory file, as returned by + * {@link #getFileDescriptor()}. This file descriptor will be closed + * by {@link #close()}. + * @param length Length of the memory file in bytes. + * @param mode File mode. Currently only "r" for read-only access is supported. + * @throws NullPointerException if fd is null. + * @throws IOException If fd does not refer to an existing memory file, + * or if the file mode of the existing memory file is more restrictive + * than mode. + * + * @hide + */ + public MemoryFile(FileDescriptor fd, int length, String mode) throws IOException { + if (fd == null) { + throw new NullPointerException("File descriptor is null."); + } + if (!isMemoryFile(fd)) { + throw new IllegalArgumentException("Not a memory file."); + } + mLength = length; + mFD = fd; + mAddress = native_mmap(mFD, length, modeToProt(mode)); + mOwnsRegion = false; + } + + /** + * Closes the memory file. If there are no other open references to the memory + * file, it will be deleted. */ public void close() { - if (mFD > 0) { + deactivate(); + if (!isClosed()) { native_close(mFD); - mFD = 0; } } + /** + * Unmaps the memory file from the process's memory space, but does not close it. + * After this method has been called, read and write operations through this object + * will fail, but {@link #getFileDescriptor()} will still return a valid file descriptor. + * + * @hide + */ + public void deactivate() { + if (!isDeactivated()) { + try { + native_munmap(mAddress, mLength); + mAddress = 0; + } catch (IOException ex) { + Log.e(TAG, ex.toString()); + } + } + } + + /** + * Checks whether the memory file has been deactivated. + */ + private boolean isDeactivated() { + return mAddress == 0; + } + + /** + * Checks whether the memory file has been closed. + */ + private boolean isClosed() { + return !mFD.valid(); + } + @Override protected void finalize() { - if (mFD > 0) { + if (!isClosed()) { Log.e(TAG, "MemoryFile.finalize() called while ashmem still open"); close(); } @@ -108,6 +181,9 @@ public class MemoryFile * @return previous value of allowPurging */ synchronized public boolean allowPurging(boolean allowPurging) throws IOException { + if (!mOwnsRegion) { + throw new IOException("Only the owner can make ashmem regions purgable."); + } boolean oldValue = mAllowPurging; if (oldValue != allowPurging) { native_pin(mFD, !allowPurging); @@ -131,7 +207,6 @@ public class MemoryFile @return OutputStream */ public OutputStream getOutputStream() { - return new MemoryOutputStream(); } @@ -144,9 +219,13 @@ public class MemoryFile * @param destOffset offset into the byte array buffer to read into. * @param count number of bytes to read. * @return number of bytes read. + * @throws IOException if the memory file has been purged or deactivated. */ public int readBytes(byte[] buffer, int srcOffset, int destOffset, int count) throws IOException { + if (isDeactivated()) { + throw new IOException("Can't read from deactivated memory file."); + } if (destOffset < 0 || destOffset > buffer.length || count < 0 || count > buffer.length - destOffset || srcOffset < 0 || srcOffset > mLength @@ -164,9 +243,13 @@ public class MemoryFile * @param srcOffset offset into the byte array buffer to write from. * @param destOffset offset into the memory file to write to. * @param count number of bytes to write. + * @throws IOException if the memory file has been purged or deactivated. */ public void writeBytes(byte[] buffer, int srcOffset, int destOffset, int count) throws IOException { + if (isDeactivated()) { + throw new IOException("Can't write to deactivated memory file."); + } if (srcOffset < 0 || srcOffset > buffer.length || count < 0 || count > buffer.length - srcOffset || destOffset < 0 || destOffset > mLength @@ -176,6 +259,64 @@ public class MemoryFile native_write(mFD, mAddress, buffer, srcOffset, destOffset, count, mAllowPurging); } + /** + * Gets a ParcelFileDescriptor for the memory file. See {@link #getFileDescriptor()} + * for caveats. This must be here to allow classes outside android.osfd is not a valid file descriptor. + * + * @hide + */ + public static boolean isMemoryFile(FileDescriptor fd) throws IOException { + return native_is_ashmem_region(fd); + } + + /** + * Converts a file mode string to a prot value as expected by + * native_mmap(). + * + * @throws IllegalArgumentException if the file mode is invalid. + */ + private static int modeToProt(String mode) { + if ("r".equals(mode)) { + return PROT_READ; + } else { + throw new IllegalArgumentException("Unsupported file mode: '" + mode + "'"); + } + } + private class MemoryInputStream extends InputStream { private int mMark = 0; @@ -212,13 +353,22 @@ public class MemoryFile } int result = read(mSingleByte, 0, 1); if (result != 1) { - throw new IOException("read() failed"); + return -1; } return mSingleByte[0]; } @Override public int read(byte buffer[], int offset, int count) throws IOException { + if (offset < 0 || count < 0 || offset + count > buffer.length) { + // readBytes() also does this check, but we need to do it before + // changing count. + throw new IndexOutOfBoundsException(); + } + count = Math.min(count, available()); + if (count < 1) { + return -1; + } int result = readBytes(buffer, mOffset, offset, count); if (result > 0) { mOffset += result; diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java index 9a71f6e0f2d4..6cfcceedfa46 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -457,7 +457,7 @@ public final class Parcel { * Flatten a Map into the parcel at the current dataPosition(), * growing dataCapacity() if needed. The Map keys must be String objects. */ - private void writeMapInternal(Map val) { + /* package */ void writeMapInternal(Map val) { if (val == null) { writeInt(-1); return; @@ -480,23 +480,7 @@ public final class Parcel { return; } - if (val.mParcelledData != null) { - int length = val.mParcelledData.dataSize(); - appendFrom(val.mParcelledData, 0, length); - } else { - writeInt(-1); // dummy, will hold length - int oldPos = dataPosition(); - writeInt(0x4C444E42); // 'B' 'N' 'D' 'L' - - writeMapInternal(val.mMap); - int newPos = dataPosition(); - - // Backpatch length - setDataPosition(oldPos - 4); - int length = newPos - oldPos; - writeInt(length); - setDataPosition(newPos); - } + val.writeToParcel(this, 0); } /** @@ -1352,60 +1336,18 @@ public final class Parcel { * Returns null if the previously written Bundle object was null. */ public final Bundle readBundle(ClassLoader loader) { - int offset = dataPosition(); int length = readInt(); if (length < 0) { return null; } - int magic = readInt(); - if (magic != 0x4C444E42) { - //noinspection ThrowableInstanceNeverThrown - String st = Log.getStackTraceString(new RuntimeException()); - Log.e("Bundle", "readBundle: bad magic number"); - Log.e("Bundle", "readBundle: trace = " + st); - } - - // Advance within this Parcel - setDataPosition(offset + length + 4); - - Parcel p = new Parcel(0); - p.setDataPosition(0); - p.appendFrom(this, offset, length + 4); - p.setDataPosition(0); - final Bundle bundle = new Bundle(p); + + final Bundle bundle = new Bundle(this, length); if (loader != null) { bundle.setClassLoader(loader); } return bundle; } - /** - * Read and return a new Bundle object from the parcel at the current - * dataPosition(). Returns null if the previously written Bundle object was - * null. The returned bundle will have its contents fully unpacked using - * the given ClassLoader. - */ - /* package */ Bundle readBundleUnpacked(ClassLoader loader) { - int length = readInt(); - if (length == -1) { - return null; - } - int magic = readInt(); - if (magic != 0x4C444E42) { - //noinspection ThrowableInstanceNeverThrown - String st = Log.getStackTraceString(new RuntimeException()); - Log.e("Bundle", "readBundleUnpacked: bad magic number"); - Log.e("Bundle", "readBundleUnpacked: trace = " + st); - } - Bundle m = new Bundle(loader); - int N = readInt(); - if (N < 0) { - return null; - } - readMapInternal(m.mMap, N, loader); - return m; - } - /** * Read and return a byte[] object from the parcel. */ @@ -1998,7 +1940,7 @@ public final class Parcel { private native void init(int obj); private native void destroy(); - private void readMapInternal(Map outVal, int N, + /* package */ void readMapInternal(Map outVal, int N, ClassLoader loader) { while (N > 0) { Object key = readValue(loader); diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index 30acef9ee7b5..1214abcad634 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -573,7 +573,21 @@ public class Process { * directly to a gid. */ public static final native int getGidForName(String name); - + + /** + * Returns a uid for a currently running process. + * @param pid the process id + * @return the uid of the process, or -1 if the process is not running. + * @hide pending API council review + */ + public static final int getUidForPid(int pid) { + String[] procStatusLabels = { "Uid:" }; + long[] procStatusValues = new long[1]; + procStatusValues[0] = -1; + Process.readProcLines("/proc/" + pid + "/status", procStatusLabels, procStatusValues); + return (int) procStatusValues[0]; + } + /** * Set the priority of a thread, based on Linux priorities. * @@ -604,6 +618,20 @@ public class Process { */ public static final native void setThreadGroup(int tid, int group) throws IllegalArgumentException, SecurityException; + /** + * Sets the scheduling group for a process and all child threads + * @hide + * @param pid The indentifier of the process to change. + * @param group The target group for this process. + * + * @throws IllegalArgumentException Throws IllegalArgumentException if + * tid does not exist. + * @throws SecurityException Throws SecurityException if your process does + * not have permission to modify the given thread, or to use the given + * priority. + */ + public static final native void setProcessGroup(int pid, int group) + throws IllegalArgumentException, SecurityException; /** * Set the priority of the calling thread, based on Linux priorities. See diff --git a/core/java/android/pim/EventRecurrence.java b/core/java/android/pim/EventRecurrence.java index edf69eea8a86..3ea9b4a89bbc 100644 --- a/core/java/android/pim/EventRecurrence.java +++ b/core/java/android/pim/EventRecurrence.java @@ -408,13 +408,13 @@ public class EventRecurrence private String dayToString(Resources r, int day) { switch (day) { - case SU: return r.getString(com.android.internal.R.string.sunday); - case MO: return r.getString(com.android.internal.R.string.monday); - case TU: return r.getString(com.android.internal.R.string.tuesday); - case WE: return r.getString(com.android.internal.R.string.wednesday); - case TH: return r.getString(com.android.internal.R.string.thursday); - case FR: return r.getString(com.android.internal.R.string.friday); - case SA: return r.getString(com.android.internal.R.string.saturday); + case SU: return r.getString(com.android.internal.R.string.day_of_week_long_sunday); + case MO: return r.getString(com.android.internal.R.string.day_of_week_long_monday); + case TU: return r.getString(com.android.internal.R.string.day_of_week_long_tuesday); + case WE: return r.getString(com.android.internal.R.string.day_of_week_long_wednesday); + case TH: return r.getString(com.android.internal.R.string.day_of_week_long_thursday); + case FR: return r.getString(com.android.internal.R.string.day_of_week_long_friday); + case SA: return r.getString(com.android.internal.R.string.day_of_week_long_saturday); default: throw new IllegalArgumentException("bad day argument: " + day); } } diff --git a/core/java/android/preference/CheckBoxPreference.java b/core/java/android/preference/CheckBoxPreference.java index 1e9b7aed59cc..cf5664c3814e 100644 --- a/core/java/android/preference/CheckBoxPreference.java +++ b/core/java/android/preference/CheckBoxPreference.java @@ -16,6 +16,7 @@ package android.preference; +import android.app.Service; import android.content.Context; import android.content.SharedPreferences; import android.content.res.TypedArray; @@ -23,6 +24,8 @@ import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; import android.view.View; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; import android.widget.Checkable; import android.widget.TextView; @@ -42,6 +45,9 @@ public class CheckBoxPreference extends Preference { private CharSequence mSummaryOff; private boolean mChecked; + private boolean mSendAccessibilityEventViewClickedType; + + private AccessibilityManager mAccessibilityManager; private boolean mDisableDependentsState; @@ -55,6 +61,9 @@ public class CheckBoxPreference extends Preference { mDisableDependentsState = a.getBoolean( com.android.internal.R.styleable.CheckBoxPreference_disableDependentsState, false); a.recycle(); + + mAccessibilityManager = + (AccessibilityManager) getContext().getSystemService(Service.ACCESSIBILITY_SERVICE); } public CheckBoxPreference(Context context, AttributeSet attrs) { @@ -64,14 +73,26 @@ public class CheckBoxPreference extends Preference { public CheckBoxPreference(Context context) { this(context, null); } - + @Override protected void onBindView(View view) { super.onBindView(view); - + View checkboxView = view.findViewById(com.android.internal.R.id.checkbox); if (checkboxView != null && checkboxView instanceof Checkable) { ((Checkable) checkboxView).setChecked(mChecked); + + // send an event to announce the value change of the CheckBox and is done here + // because clicking a preference does not immediately change the checked state + // for example when enabling the WiFi + if (mSendAccessibilityEventViewClickedType && + mAccessibilityManager.isEnabled() && + checkboxView.isEnabled()) { + mSendAccessibilityEventViewClickedType = false; + + int eventType = AccessibilityEvent.TYPE_VIEW_CLICKED; + checkboxView.sendAccessibilityEventUnchecked(AccessibilityEvent.obtain(eventType)); + } } // Sync the summary view @@ -85,7 +106,7 @@ public class CheckBoxPreference extends Preference { summaryView.setText(mSummaryOff); useDefaultSummary = false; } - + if (useDefaultSummary) { final CharSequence summary = getSummary(); if (summary != null) { @@ -111,6 +132,10 @@ public class CheckBoxPreference extends Preference { boolean newValue = !isChecked(); + // in onBindView() an AccessibilityEventViewClickedType is sent to announce the change + // not sending + mSendAccessibilityEventViewClickedType = true; + if (!callChangeListener(newValue)) { return; } @@ -124,10 +149,11 @@ public class CheckBoxPreference extends Preference { * @param checked The checked state. */ public void setChecked(boolean checked) { + mChecked = checked; persistBoolean(checked); - + notifyDependencyChange(shouldDisableDependents()); notifyChanged(); diff --git a/core/java/android/preference/PreferenceScreen.java b/core/java/android/preference/PreferenceScreen.java index 5353b531dd06..95e54324f445 100644 --- a/core/java/android/preference/PreferenceScreen.java +++ b/core/java/android/preference/PreferenceScreen.java @@ -22,6 +22,7 @@ import android.content.DialogInterface; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; +import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.Adapter; @@ -147,13 +148,20 @@ public final class PreferenceScreen extends PreferenceGroup implements AdapterVi ListView listView = new ListView(context); bind(listView); - Dialog dialog = mDialog = new Dialog(context, com.android.internal.R.style.Theme_NoTitleBar); + // Set the title bar if title is available, else no title bar + final CharSequence title = getTitle(); + Dialog dialog = mDialog = new Dialog(context, TextUtils.isEmpty(title) + ? com.android.internal.R.style.Theme_NoTitleBar + : com.android.internal.R.style.Theme); dialog.setContentView(listView); + if (!TextUtils.isEmpty(title)) { + dialog.setTitle(title); + } dialog.setOnDismissListener(this); if (state != null) { dialog.onRestoreInstanceState(state); } - + // Add the screen to the list of preferences screens opened as dialogs getPreferenceManager().addPreferencesScreen(dialog); diff --git a/core/java/android/provider/Browser.java b/core/java/android/provider/Browser.java index c597b3c62125..1ba5e25e1d54 100644 --- a/core/java/android/provider/Browser.java +++ b/core/java/android/provider/Browser.java @@ -33,6 +33,12 @@ public class Browser { public static final Uri BOOKMARKS_URI = Uri.parse("content://browser/bookmarks"); + /** + * The inline scheme to show embedded content in a browser. + * @hide + */ + public static final Uri INLINE_URI = Uri.parse("inline:"); + /** * The name of extra data when starting Browser with ACTION_VIEW or * ACTION_SEARCH intent. @@ -53,7 +59,48 @@ public class Browser { * identifier. */ public static final String EXTRA_APPLICATION_ID = - "com.android.browser.application_id"; + "com.android.browser.application_id"; + + /** + * The content to be rendered when url's scheme is inline. + * @hide + */ + public static final String EXTRA_INLINE_CONTENT ="com.android.browser.inline.content"; + + /** + * The encoding of the inlined content for inline scheme. + * @hide + */ + public static final String EXTRA_INLINE_ENCODING ="com.android.browser.inline.encoding"; + + /** + * The url used when the inline content is falied to render. + * @hide + */ + public static final String EXTRA_INLINE_FAILURL ="com.android.browser.inline.failurl"; + + /** + * The name of the extra data in the VIEW intent. The data is in boolean. + *

      + * If the Browser is handling the intent and the setting for + * USE_LOCATION_FOR_SERVICES is allow, the Browser will send the location in + * the POST data if this extra data is presented and it is true. + *

      + * pending api approval + * @hide + */ + public static final String EXTRA_APPEND_LOCATION = "com.android.browser.append_location"; + + /** + * The name of the extra data in the VIEW intent. The data is in the format of + * a byte array. + *

      + * Any value sent here will be passed in the http request to the provided url as post data. + *

      + * pending api approval + * @hide + */ + public static final String EXTRA_POST_DATA = "com.android.browser.post_data"; /* if you change column order you must also change indices below */ @@ -132,6 +179,7 @@ public class Browser { /** * Return a cursor pointing to a list of all the bookmarks. + * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} * @param cr The ContentResolver used to access the database. */ public static final Cursor getAllBookmarks(ContentResolver cr) throws @@ -143,6 +191,7 @@ public class Browser { /** * Return a cursor pointing to a list of all visited site urls. + * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} * @param cr The ContentResolver used to access the database. */ public static final Cursor getAllVisitedUrls(ContentResolver cr) throws @@ -154,6 +203,8 @@ public class Browser { /** * Update the visited history to acknowledge that a site has been * visited. + * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} + * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} * @param cr The ContentResolver used to access the database. * @param url The site being visited. * @param real Whether this is an actual visit, and should be added to the @@ -203,6 +254,8 @@ public class Browser { * of them. This is used to keep our history table to a * reasonable size. Note: it does not prune bookmarks. If the * user wants 1000 bookmarks, the user gets 1000 bookmarks. + * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} + * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} * * @param cr The ContentResolver used to access the database. */ @@ -236,6 +289,7 @@ public class Browser { /** * Returns whether there is any history to clear. + * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} * @param cr The ContentResolver used to access the database. * @return boolean True if the history can be cleared. */ @@ -261,6 +315,7 @@ public class Browser { /** * Delete all entries from the bookmarks/history table which are * not bookmarks. Also set all visited bookmarks to unvisited. + * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} * @param cr The ContentResolver used to access the database. */ public static final void clearHistory(ContentResolver cr) { @@ -270,6 +325,8 @@ public class Browser { /** * Helper function to delete all history items and revert all * bookmarks to zero visits which meet the criteria provided. + * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} + * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} * @param cr The ContentResolver used to access the database. * @param whereClause String to limit the items affected. * null means all items. @@ -332,6 +389,7 @@ public class Browser { /** * Delete all history items from begin to end. + * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} * @param cr The ContentResolver used to access the database. * @param begin First date to remove. If -1, all dates before end. * Inclusive. @@ -359,6 +417,7 @@ public class Browser { /** * Remove a specific url from the history database. + * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} * @param cr The ContentResolver used to access the database. * @param url url to remove. */ @@ -372,6 +431,8 @@ public class Browser { /** * Add a search string to the searches database. + * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} + * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} * @param cr The ContentResolver used to access the database. * @param search The string to add to the searches database. */ @@ -401,6 +462,7 @@ public class Browser { } /** * Remove all searches from the search database. + * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} * @param cr The ContentResolver used to access the database. */ public static final void clearSearches(ContentResolver cr) { @@ -415,6 +477,7 @@ public class Browser { /** * Request all icons from the database. + * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} * @param cr The ContentResolver used to access the database. * @param where Clause to be used to limit the query from the database. * Must be an allowable string to be passed into a database query. diff --git a/core/java/android/provider/CallLog.java b/core/java/android/provider/CallLog.java index abd6934a86b3..7d03801d7bd1 100644 --- a/core/java/android/provider/CallLog.java +++ b/core/java/android/provider/CallLog.java @@ -151,6 +151,9 @@ public class CallLog { int presentation, int callType, long start, int duration) { final ContentResolver resolver = context.getContentResolver(); + // TODO(Moto): Which is correct: original code, this only changes the + // number if the number is empty and never changes the caller info name. + if (false) { if (TextUtils.isEmpty(number)) { if (presentation == Connection.PRESENTATION_RESTRICTED) { number = CallerInfo.PRIVATE_NUMBER; @@ -160,7 +163,22 @@ public class CallLog { number = CallerInfo.UNKNOWN_NUMBER; } } - + } else { + // NEWCODE: From Motorola + + //If this is a private number then set the number to Private, otherwise check + //if the number field is empty and set the number to Unavailable + if (presentation == Connection.PRESENTATION_RESTRICTED) { + number = CallerInfo.PRIVATE_NUMBER; + ci.name = ""; + } else if (presentation == Connection.PRESENTATION_PAYPHONE) { + number = CallerInfo.PAYPHONE_NUMBER; + ci.name = ""; + } else if (TextUtils.isEmpty(number) || presentation == Connection.PRESENTATION_UNKNOWN) { + number = CallerInfo.UNKNOWN_NUMBER; + ci.name = ""; + } + } ContentValues values = new ContentValues(5); values.put(NUMBER, number); diff --git a/core/java/android/provider/Checkin.java b/core/java/android/provider/Checkin.java index 3c23db03ac0a..f2c275e69931 100644 --- a/core/java/android/provider/Checkin.java +++ b/core/java/android/provider/Checkin.java @@ -137,6 +137,8 @@ public final class Checkin { CRASHES_TRUNCATED, ELAPSED_REALTIME_SEC, ELAPSED_UPTIME_SEC, + HTTP_REQUEST, + HTTP_REUSED, HTTP_STATUS, PHONE_GSM_REGISTERED, PHONE_GPRS_ATTEMPTED, @@ -351,6 +353,3 @@ public final class Checkin { } } } - - - diff --git a/core/java/android/provider/Contacts.java b/core/java/android/provider/Contacts.java index 3141f1aede53..84fe1841888e 100644 --- a/core/java/android/provider/Contacts.java +++ b/core/java/android/provider/Contacts.java @@ -340,27 +340,33 @@ public class Contacts { } /** - * Adds a person to the My Contacts group. - * - * @param resolver the resolver to use - * @param personId the person to add to the group - * @return the URI of the group membership row - * @throws IllegalStateException if the My Contacts group can't be found + * @hide Used in vCard parser code. */ - public static Uri addToMyContactsGroup(ContentResolver resolver, long personId) { - long groupId = 0; + public static long tryGetMyContactsGroupId(ContentResolver resolver) { Cursor groupsCursor = resolver.query(Groups.CONTENT_URI, GROUPS_PROJECTION, Groups.SYSTEM_ID + "='" + Groups.GROUP_MY_CONTACTS + "'", null, null); if (groupsCursor != null) { try { if (groupsCursor.moveToFirst()) { - groupId = groupsCursor.getLong(0); + return groupsCursor.getLong(0); } } finally { groupsCursor.close(); } } + return 0; + } + /** + * Adds a person to the My Contacts group. + * + * @param resolver the resolver to use + * @param personId the person to add to the group + * @return the URI of the group membership row + * @throws IllegalStateException if the My Contacts group can't be found + */ + public static Uri addToMyContactsGroup(ContentResolver resolver, long personId) { + long groupId = tryGetMyContactsGroupId(resolver); if (groupId == 0) { throw new IllegalStateException("Failed to find the My Contacts group"); } @@ -868,6 +874,17 @@ public class Contacts { public static final int TYPE_WORK = 2; public static final int TYPE_OTHER = 3; + /** + * @hide This is temporal. TYPE_MOBILE should be added to TYPE in the future. + */ + public static final int MOBILE_EMAIL_TYPE_INDEX = 2; + + /** + * @hide This is temporal. TYPE_MOBILE should be added to TYPE in the future. + * This is not "mobile" but "CELL" since vCard uses it for identifying mobile phone. + */ + public static final String MOBILE_EMAIL_TYPE_NAME = "_AUTO_CELL"; + /** * The user defined label for the the contact method. *

      Type: TEXT

      @@ -1005,7 +1022,13 @@ public class Contacts { } } else { if (!TextUtils.isEmpty(label)) { - display = label; + if (label.toString().equals(MOBILE_EMAIL_TYPE_NAME)) { + display = + context.getString( + com.android.internal.R.string.mobileEmailTypeName); + } else { + display = label; + } } } break; diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java index b6f96c4e0d4b..21e5865fef70 100644 --- a/core/java/android/provider/MediaStore.java +++ b/core/java/android/provider/MediaStore.java @@ -344,7 +344,10 @@ public final class MediaStore // Check if file exists with a FileInputStream FileInputStream stream = new FileInputStream(imagePath); try { - return insertImage(cr, BitmapFactory.decodeFile(imagePath), name, description); + Bitmap bm = BitmapFactory.decodeFile(imagePath); + String ret = insertImage(cr, bm, name, description); + bm.recycle(); + return ret; } finally { try { stream.close(); @@ -719,9 +722,15 @@ public final class MediaStore */ public static String keyFor(String name) { if (name != null) { + boolean sortfirst = false; if (name.equals(android.media.MediaFile.UNKNOWN_STRING)) { return "\001"; } + // Check if the first character is \001. We use this to + // force sorting of certain special files, like the silent ringtone. + if (name.startsWith("\001")) { + sortfirst = true; + } name = name.trim().toLowerCase(); if (name.startsWith("the ")) { name = name.substring(4); @@ -737,7 +746,7 @@ public final class MediaStore name.endsWith(", a") || name.endsWith(",a")) { name = name.substring(0, name.lastIndexOf(',')); } - name = name.replaceAll("[\\[\\]\\(\\)'.,?!]", "").trim(); + name = name.replaceAll("[\\[\\]\\(\\)\"'.,?!]", "").trim(); if (name.length() > 0) { // Insert a separator between the characters to avoid // matches on a partial character. If we ever change @@ -750,7 +759,11 @@ public final class MediaStore b.append('.'); } name = b.toString(); - return DatabaseUtils.getCollationKey(name); + String key = DatabaseUtils.getCollationKey(name); + if (sortfirst) { + key = "\001" + key; + } + return key; } else { return ""; } @@ -797,7 +810,7 @@ public final class MediaStore /** * The default sort order for this table */ - public static final String DEFAULT_SORT_ORDER = TITLE; + public static final String DEFAULT_SORT_ORDER = TITLE_KEY; /** * Activity Action: Start SoundRecorder application. @@ -894,7 +907,7 @@ public final class MediaStore /** * The default sort order for this table */ - public static final String DEFAULT_SORT_ORDER = TITLE; + public static final String DEFAULT_SORT_ORDER = TITLE_KEY; /** * The ID of the audio file diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 4dd6524fd2c0..aa583ac35b5e 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -148,7 +148,7 @@ public final class Settings { @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_WIFI_SETTINGS = "android.settings.WIFI_SETTINGS"; - + /** * Activity Action: Show settings to allow configuration of a static IP * address for Wi-Fi. @@ -305,7 +305,7 @@ public final class Settings { @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_QUICK_LAUNCH_SETTINGS = "android.settings.QUICK_LAUNCH_SETTINGS"; - + /** * Activity Action: Show settings to manage installed applications. *

      @@ -319,7 +319,7 @@ public final class Settings { @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_MANAGE_APPLICATIONS_SETTINGS = "android.settings.MANAGE_APPLICATIONS_SETTINGS"; - + /** * Activity Action: Show settings for system update functionality. *

      @@ -329,7 +329,7 @@ public final class Settings { * Input: Nothing. *

      * Output: Nothing. - * + * * @hide */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) @@ -349,7 +349,7 @@ public final class Settings { @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_SYNC_SETTINGS = "android.settings.SYNC_SETTINGS"; - + /** * Activity Action: Show settings for selecting the network operator. *

      @@ -404,7 +404,7 @@ public final class Settings { @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_MEMORY_CARD_SETTINGS = "android.settings.MEMORY_CARD_SETTINGS"; - + // End of Intent actions for Settings private static final String JID_RESOURCE_PREFIX = "android"; @@ -495,7 +495,7 @@ public final class Settings { public static final String SYS_PROP_SETTING_VERSION = "sys.settings_system_version"; private static volatile NameValueCache mNameValueCache = null; - + private static final HashSet MOVED_TO_SECURE; static { MOVED_TO_SECURE = new HashSet(30); @@ -901,12 +901,12 @@ public final class Settings { * plugged in. */ public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; - + /** * Value for {@link #WIFI_SLEEP_POLICY} to never go to sleep. */ public static final int WIFI_SLEEP_POLICY_NEVER = 2; - + /** * Whether to use static IP and other static network attributes. *

      @@ -1024,6 +1024,14 @@ public final class Settings { */ public static final String SCREEN_OFF_TIMEOUT = "screen_off_timeout"; + /** + * If 0, the compatibility mode is off for all applications. + * If 1, older applications run under compatibility mode. + * TODO: remove this settings before code freeze (bug/1907571) + * @hide + */ + public static final String COMPATIBILITY_MODE = "compatibility_mode"; + /** * The screen backlight brightness between 0 and 255. */ @@ -1115,12 +1123,12 @@ public final class Settings { * Note: This is a one-off setting that will be removed in the future * when there is profile support. For this reason, it is kept hidden * from the public APIs. - * + * * @hide */ - public static final String NOTIFICATIONS_USE_RING_VOLUME = + public static final String NOTIFICATIONS_USE_RING_VOLUME = "notifications_use_ring_volume"; - + /** * The mapping of stream type (integer) to its setting. */ @@ -1188,7 +1196,7 @@ public final class Settings { * feature converts two spaces to a "." and space. */ public static final String TEXT_AUTO_PUNCTUATE = "auto_punctuate"; - + /** * Setting to showing password characters in text editors. 1 = On, 0 = Off */ @@ -1265,18 +1273,126 @@ public final class Settings { */ public static final String DTMF_TONE_WHEN_DIALING = "dtmf_tone"; + /** + * CDMA only settings + * DTMF tone type played by the dialer when dialing. + * 0 = Normal + * 1 = Long + * @hide + */ + public static final String DTMF_TONE_TYPE_WHEN_DIALING = "dtmf_tone_type"; + + /** + * CDMA only settings + * Emergency Tone 0 = Off + * 1 = Alert + * 2 = Vibrate + * @hide + */ + public static final String EMERGENCY_TONE = "emergency_tone"; + + /** + * CDMA only settings + * Whether the auto retry is enabled. The value is + * boolean (1 or 0). + * @hide + */ + public static final String CALL_AUTO_RETRY = "call_auto_retry"; + + /** + * Whether the hearing aid is enabled. The value is + * boolean (1 or 0). + * @hide + */ + public static final String HEARING_AID = "hearing_aid"; + + /** + * CDMA only settings + * TTY Mode + * 0 = OFF + * 1 = FULL + * 2 = VCO + * 3 = HCO + * @hide + */ + public static final String TTY_MODE = "tty_mode"; + /** * Whether the sounds effects (key clicks, lid open ...) are enabled. The value is * boolean (1 or 0). */ public static final String SOUND_EFFECTS_ENABLED = "sound_effects_enabled"; - + /** * Whether the haptic feedback (long presses, ...) are enabled. The value is * boolean (1 or 0). */ public static final String HAPTIC_FEEDBACK_ENABLED = "haptic_feedback_enabled"; + /** + * Whether live web suggestions while the user types into search dialogs are + * enabled. Browsers and other search UIs should respect this, as it allows + * a user to avoid sending partial queries to a search engine, if it poses + * any privacy concern. The value is boolean (1 or 0). + */ + public static final String SHOW_WEB_SUGGESTIONS = "show_web_suggestions"; + + /** + * Settings to backup. This is here so that it's in the same place as the settings + * keys and easy to update. + * @hide + */ + public static final String[] SETTINGS_TO_BACKUP = { + STAY_ON_WHILE_PLUGGED_IN, + END_BUTTON_BEHAVIOR, + WIFI_SLEEP_POLICY, + WIFI_USE_STATIC_IP, + WIFI_STATIC_IP, + WIFI_STATIC_GATEWAY, + WIFI_STATIC_NETMASK, + WIFI_STATIC_DNS1, + WIFI_STATIC_DNS2, + BLUETOOTH_DISCOVERABILITY, + BLUETOOTH_DISCOVERABILITY_TIMEOUT, + DIM_SCREEN, + SCREEN_OFF_TIMEOUT, + SCREEN_BRIGHTNESS, + VIBRATE_ON, + NOTIFICATIONS_USE_RING_VOLUME, + MODE_RINGER, + MODE_RINGER_STREAMS_AFFECTED, + MUTE_STREAMS_AFFECTED, + VOLUME_VOICE, + VOLUME_SYSTEM, + VOLUME_RING, + VOLUME_MUSIC, + VOLUME_ALARM, + VOLUME_NOTIFICATION, + VOLUME_VOICE + APPEND_FOR_LAST_AUDIBLE, + VOLUME_SYSTEM + APPEND_FOR_LAST_AUDIBLE, + VOLUME_RING + APPEND_FOR_LAST_AUDIBLE, + VOLUME_MUSIC + APPEND_FOR_LAST_AUDIBLE, + VOLUME_ALARM + APPEND_FOR_LAST_AUDIBLE, + VOLUME_NOTIFICATION + APPEND_FOR_LAST_AUDIBLE, + TEXT_AUTO_REPLACE, + TEXT_AUTO_CAPS, + TEXT_AUTO_PUNCTUATE, + TEXT_SHOW_PASSWORD, + AUTO_TIME, + TIME_12_24, + DATE_FORMAT, + ACCELEROMETER_ROTATION, + DTMF_TONE_WHEN_DIALING, + DTMF_TONE_TYPE_WHEN_DIALING, + EMERGENCY_TONE, + CALL_AUTO_RETRY, + HEARING_AID, + TTY_MODE, + SOUND_EFFECTS_ENABLED, + HAPTIC_FEEDBACK_ENABLED, + SHOW_WEB_SUGGESTIONS + }; + // Settings moved to Settings.Secure /** @@ -1321,7 +1437,7 @@ public final class Settings { */ @Deprecated public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS; - + /** * @deprecated Use {@link android.provider.Settings.Secure#LOCATION_PROVIDERS_ALLOWED} * instead @@ -1334,7 +1450,7 @@ public final class Settings { */ @Deprecated public static final String LOGGING_ID = Secure.LOGGING_ID; - + /** * @deprecated Use {@link android.provider.Settings.Secure#NETWORK_PREFERENCE} instead */ @@ -1374,7 +1490,7 @@ public final class Settings { */ @Deprecated public static final String USB_MASS_STORAGE_ENABLED = Secure.USB_MASS_STORAGE_ENABLED; - + /** * @deprecated Use {@link android.provider.Settings.Secure#USE_GOOGLE_MAIL} instead */ @@ -1412,7 +1528,7 @@ public final class Settings { @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY; - + /** * @deprecated Use {@link android.provider.Settings.Secure#WIFI_NUM_OPEN_NETWORKS_KEPT} * instead @@ -1448,7 +1564,7 @@ public final class Settings { @Deprecated public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS; - + /** * @deprecated Use * {@link android.provider.Settings.Secure#WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED} instead @@ -1824,19 +1940,19 @@ public final class Settings { * Whether the device has been provisioned (0 = false, 1 = true) */ public static final String DEVICE_PROVISIONED = "device_provisioned"; - + /** * List of input methods that are currently enabled. This is a string * containing the IDs of all enabled input methods, each ID separated * by ':'. */ public static final String ENABLED_INPUT_METHODS = "enabled_input_methods"; - + /** * Host name and port for a user-selected proxy. */ public static final String HTTP_PROXY = "http_proxy"; - + /** * Whether the package installer should allow installation of apps downloaded from * sources other than the Android Market (vending machine). @@ -1845,12 +1961,12 @@ public final class Settings { * 0 = only allow installing from the Android Market */ public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps"; - + /** * Comma-separated list of location providers that activities may access. */ public static final String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed"; - + /** * The Logging ID (a unique 64-bit value) as a hex string. * Used as a pseudonymous identifier for logging. @@ -1872,19 +1988,19 @@ public final class Settings { * connectivity service should touch this. */ public static final String NETWORK_PREFERENCE = "network_preference"; - - /** + + /** */ public static final String PARENTAL_CONTROL_ENABLED = "parental_control_enabled"; - - /** + + /** */ public static final String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update"; - - /** + + /** */ public static final String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url"; - + /** * Settings classname to launch when Settings is clicked from All * Applications. Needed because of user testing between the old @@ -1892,18 +2008,67 @@ public final class Settings { */ // TODO: 881807 public static final String SETTINGS_CLASSNAME = "settings_classname"; - + /** * USB Mass Storage Enabled */ public static final String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled"; - + /** * If this setting is set (to anything), then all references * to Gmail on the device must change to Google Mail. */ public static final String USE_GOOGLE_MAIL = "use_google_mail"; - + + /** + * If accessibility is enabled. + */ + public static final String ACCESSIBILITY_ENABLED = "accessibility_enabled"; + + /** + * List of the enabled accessibility providers. + */ + public static final String ENABLED_ACCESSIBILITY_SERVICES = + "enabled_accessibility_services"; + + /** + * Setting to always use the default text-to-speech settings regardless + * of the application settings. + * 1 = override application settings, + * 0 = use application settings (if specified). + */ + public static final String TTS_USE_DEFAULTS = "tts_use_defaults"; + + /** + * Default text-to-speech engine speech rate. 100 = 1x + */ + public static final String TTS_DEFAULT_RATE = "tts_default_rate"; + + /** + * Default text-to-speech engine pitch. 100 = 1x + */ + public static final String TTS_DEFAULT_PITCH = "tts_default_pitch"; + + /** + * Default text-to-speech engine. + */ + public static final String TTS_DEFAULT_SYNTH = "tts_default_synth"; + + /** + * Default text-to-speech language. + */ + public static final String TTS_DEFAULT_LANG = "tts_default_lang"; + + /** + * Default text-to-speech country. + */ + public static final String TTS_DEFAULT_COUNTRY = "tts_default_country"; + + /** + * Default text-to-speech locale variant. + */ + public static final String TTS_DEFAULT_VARIANT = "tts_default_variant"; + /** * Whether to notify the user of open networks. *

      @@ -1915,64 +2080,64 @@ public final class Settings { */ public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on"; - + /** * Delay (in seconds) before repeating the Wi-Fi networks available notification. * Connecting to a network will reset the timer. */ public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay"; - + /** * The number of radio channels that are allowed in the local * 802.11 regulatory domain. * @hide */ public static final String WIFI_NUM_ALLOWED_CHANNELS = "wifi_num_allowed_channels"; - + /** * When the number of open networks exceeds this number, the * least-recently-used excess networks will be removed. */ public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept"; - + /** * Whether the Wi-Fi should be on. Only the Wi-Fi service should touch this. */ public static final String WIFI_ON = "wifi_on"; - + /** * The acceptable packet loss percentage (range 0 - 100) before trying * another AP on the same network. */ public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = "wifi_watchdog_acceptable_packet_loss_percentage"; - + /** * The number of access points required for a network in order for the * watchdog to monitor it. */ public static final String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count"; - + /** * The delay between background checks. */ public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = "wifi_watchdog_background_check_delay_ms"; - + /** * Whether the Wi-Fi watchdog is enabled for background checking even * after it thinks the user has connected to a good access point. */ public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED = "wifi_watchdog_background_check_enabled"; - + /** * The timeout for a background ping */ public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS = "wifi_watchdog_background_check_timeout_ms"; - + /** * The number of initial pings to perform that *may* be ignored if they * fail. Again, if these fail, they will *not* be used in packet loss @@ -1981,7 +2146,7 @@ public final class Settings { */ public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT = "wifi_watchdog_initial_ignored_ping_count"; - + /** * The maximum number of access points (per network) to attempt to test. * If this number is reached, the watchdog will no longer monitor the @@ -1989,7 +2154,7 @@ public final class Settings { * networks containing multiple APs whose DNS does not respond to pings. */ public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks"; - + /** * Whether the Wi-Fi watchdog is enabled. */ @@ -2004,24 +2169,24 @@ public final class Settings { * The number of pings to test if an access point is a good connection. */ public static final String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count"; - + /** * The delay between pings. */ public static final String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms"; - + /** * The timeout per ping. */ public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms"; - + /** * The maximum number of times we will retry a connection to an access * point for which we have failed in acquiring an IP address from DHCP. * A value of N means that we will make N+1 connection attempts in all. */ public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count"; - + /** * Maximum amount of time in milliseconds to hold a wakelock while waiting for mobile * data connectivity to be established after a disconnect from Wi-Fi. @@ -2051,20 +2216,29 @@ public final class Settings { public static final String CDMA_SUBSCRIPTION_MODE = "subscription_mode"; /** - * represents current active phone class - * 1 = GSM-Phone, 0 = CDMA-Phone + * The preferred network mode 7 = Global + * 6 = EvDo only + * 5 = CDMA w/o EvDo + * 4 = CDMA / EvDo auto + * 3 = GSM / WCDMA auto + * 2 = WCDMA only + * 1 = GSM only + * 0 = GSM / WCDMA preferred * @hide */ - public static final String CURRENT_ACTIVE_PHONE = "current_active_phone"; + public static final String PREFERRED_NETWORK_MODE = + "preferred_network_mode"; /** - * The preferred network mode 7 = Global, CDMA default - * 4 = CDMA only - * 3 = GSM/UMTS only + * The preferred TTY mode 0 = TTy Off, CDMA default + * 1 = TTY Full + * 2 = TTY HCO + * 3 = TTY VCO * @hide */ - public static final String PREFERRED_NETWORK_MODE = - "preferred_network_mode"; + public static final String PREFERRED_TTY_MODE = + "preferred_tty_mode"; + /** * CDMA Cell Broadcast SMS @@ -2099,6 +2273,71 @@ public final class Settings { */ public static final String TTY_MODE_ENABLED = "tty_mode_enabled"; + /** + * Flag for allowing service provider to use location information to improve products and + * services. + * Type: int ( 0 = disallow, 1 = allow ) + * @hide + */ + public static final String USE_LOCATION_FOR_SERVICES = "use_location"; + + /** + * Controls whether settings backup is enabled. + * Type: int ( 0 = disabled, 1 = enabled ) + * @hide + */ + public static final String BACKUP_ENABLED = "backup_enabled"; + + /** + * Indicates whether settings backup has been fully provisioned. + * Type: int ( 0 = unprovisioned, 1 = fully provisioned ) + * @hide + */ + public static final String BACKUP_PROVISIONED = "backup_provisioned"; + + /** + * Component of the transport to use for backup/restore. + * @hide + */ + public static final String BACKUP_TRANSPORT = "backup_transport"; + + /** + * Version for which the setup wizard was last shown. Bumped for + * each release when there is new setup information to show. + * @hide + */ + public static final String LAST_SETUP_SHOWN = "last_setup_shown"; + + /** + * @hide + */ + public static final String[] SETTINGS_TO_BACKUP = { + ADB_ENABLED, + ALLOW_MOCK_LOCATION, + INSTALL_NON_MARKET_APPS, + PARENTAL_CONTROL_ENABLED, + PARENTAL_CONTROL_REDIRECT_URL, + USB_MASS_STORAGE_ENABLED, + ACCESSIBILITY_ENABLED, + ENABLED_ACCESSIBILITY_SERVICES, + TTS_USE_DEFAULTS, + TTS_DEFAULT_RATE, + TTS_DEFAULT_PITCH, + TTS_DEFAULT_SYNTH, + TTS_DEFAULT_LANG, + TTS_DEFAULT_COUNTRY, + WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, + WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, + WIFI_NUM_ALLOWED_CHANNELS, + WIFI_NUM_OPEN_NETWORKS_KEPT, + BACKGROUND_DATA, + PREFERRED_NETWORK_MODE, + PREFERRED_TTY_MODE, + CDMA_CELL_BROADCAST_SMS, + PREFERRED_CDMA_SUBSCRIPTION, + ENHANCED_VOICE_PRIVACY_ENABLED + }; + /** * Helper method for determining if a location provider is enabled. * @param cr the content resolver to use @@ -2115,7 +2354,7 @@ public final class Settings { allowedProviders.startsWith(provider + ",") || allowedProviders.endsWith("," + provider)); } - return false; + return false; } /** @@ -2139,7 +2378,7 @@ public final class Settings { putString(cr, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, provider); } } - + /** * Gservices settings, containing the network names for Google's * various services. This table holds simple name/addr pairs. @@ -2160,6 +2399,13 @@ public final class Settings { public static final String CHANGED_ACTION = "com.google.gservices.intent.action.GSERVICES_CHANGED"; + /** + * Intent action to override Gservices for testing. (Requires WRITE_GSERVICES permission.) + */ + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String OVERRIDE_ACTION = + "com.google.gservices.intent.action.GSERVICES_OVERRIDE"; + private static volatile NameValueCache mNameValueCache = null; private static final Object mNameValueCacheLock = new Object(); @@ -2260,7 +2506,7 @@ public final class Settings { * Event tags from the kernel event log to upload during checkin. */ public static final String CHECKIN_EVENTS = "checkin_events"; - + /** * Event tags for list of services to upload during checkin. */ @@ -2427,12 +2673,34 @@ public final class Settings { */ public static final String GMAIL_BUFFER_SERVER_RESPONSE = "gmail_buffer_server_response"; + /** + * The maximum size in bytes allowed for the provider to gzip a protocol buffer uploaded to + * the server. + */ + public static final String GMAIL_MAX_GZIP_SIZE = "gmail_max_gzip_size_bytes"; + /** * Controls whether Gmail will discard uphill operations that repeatedly fail. Value must be * an integer where non-zero means true. Defaults to 1. */ public static final String GMAIL_DISCARD_ERROR_UPHILL_OP = "gmail_discard_error_uphill_op"; + /** + * Controls how many attempts Gmail will try to upload an uphill operations before it + * abandons the operation. Defaults to 20. + */ + public static final String GMAIL_NUM_RETRY_UPHILL_OP = "gmail_discard_error_uphill_op"; + + /** + * the transcoder URL for mobile devices. + */ + public static final String TRANSCODER_URL = "mobile_transcoder_url"; + + /** + * URL that points to the privacy terms of the Google Talk service. + */ + public static final String GTALK_TERMS_OF_SERVICE_URL = "gtalk_terms_of_service_url"; + /** * Hostname of the GTalk server. */ @@ -2560,6 +2828,21 @@ public final class Settings { public static final String GTALK_SSL_HANDSHAKE_TIMEOUT_MS = "gtalk_ssl_handshake_timeout_ms"; + /** + * Compress the gtalk stream. + */ + public static final String GTALK_COMPRESS = "gtalk_compress"; + + /** + * This is the timeout for which Google Talk will send the message using bareJID. In a + * established chat between two XMPP endpoints, Google Talk uses fullJID in the format + * of user@domain/resource in order to send the message to the specific client. However, + * if Google Talk hasn't received a message from that client after some time, it would + * fall back to use the bareJID, which would broadcast the message to all clients for + * the other user. + */ + public static final String GTALK_USE_BARE_JID_TIMEOUT_MS = "gtalk_use_barejid_timeout_ms"; + /** * Enable use of ssl session caching. * 'db' - save each session in a (per process) database @@ -2656,6 +2939,20 @@ public final class Settings { */ public static final String VENDING_TAB_2_TITLE = "vending_tab_2_title"; + /** + * Frequency in milliseconds at which we should request MCS heartbeats + * from the Vending Machine client. + */ + public static final String VENDING_HEARTBEAT_FREQUENCY_MS = + "vending_heartbeat_frequency_ms"; + + /** + * Frequency in milliseconds at which we should resend pending download + * requests to the API Server from the Vending Machine client. + */ + public static final String VENDING_PENDING_DOWNLOAD_RESEND_FREQUENCY_MS = + "vending_pd_resend_frequency_ms"; + /** * URL that points to the legal terms of service to display in Settings. *

      @@ -2796,12 +3093,12 @@ public final class Settings { * out without asking for use permit, to limit the un-authorized SMS * usage. */ - public static final String SMS_OUTGOING_CEHCK_INTERVAL_MS = + public static final String SMS_OUTGOING_CHECK_INTERVAL_MS = "sms_outgoing_check_interval_ms"; /** * The number of outgoing SMS sent without asking for user permit - * (of {@link #SMS_OUTGOING_CEHCK_INTERVAL_MS} + * (of {@link #SMS_OUTGOING_CHECK_INTERVAL_MS} */ public static final String SMS_OUTGOING_CEHCK_MAX_COUNT = "sms_outgoing_check_max_count"; @@ -2950,12 +3247,20 @@ public final class Settings { public static final String BATTERY_DISCHARGE_DURATION_THRESHOLD = "battery_discharge_duration_threshold"; public static final String BATTERY_DISCHARGE_THRESHOLD = "battery_discharge_threshold"; - + /** * An email address that anr bugreports should be sent to. */ public static final String ANR_BUGREPORT_RECIPIENT = "anr_bugreport_recipient"; + /** + * Flag for allowing service provider to use location information to improve products and + * services. + * Type: int ( 0 = disallow, 1 = allow ) + * @deprecated + */ + public static final String USE_LOCATION_FOR_SERVICES = "use_location"; + /** * @deprecated * @hide @@ -3094,7 +3399,7 @@ public final class Settings { /** * Add a new bookmark to the system. - * + * * @param cr The ContentResolver to query. * @param intent The desired target of the bookmark. * @param title Bookmark title that is shown to the user; null if none @@ -3159,7 +3464,7 @@ public final class Settings { /** * Return the title as it should be displayed to the user. This takes * care of localizing bookmarks that point to activities. - * + * * @param context A context. * @param cursor A cursor pointing to the row whose title should be * returned. The cursor must contain at least the {@link #TITLE} @@ -3174,24 +3479,24 @@ public final class Settings { throw new IllegalArgumentException( "The cursor must contain the TITLE and INTENT columns."); } - + String title = cursor.getString(titleColumn); if (!TextUtils.isEmpty(title)) { return title; } - + String intentUri = cursor.getString(intentColumn); if (TextUtils.isEmpty(intentUri)) { return ""; } - + Intent intent; try { intent = Intent.getIntent(intentUri); } catch (URISyntaxException e) { return ""; } - + PackageManager packageManager = context.getPackageManager(); ResolveInfo info = packageManager.resolveActivity(intent, 0); return info != null ? info.loadLabel(packageManager) : ""; @@ -3247,4 +3552,3 @@ public final class Settings { return "android-" + Long.toHexString(androidId); } } - diff --git a/core/java/android/provider/Telephony.java b/core/java/android/provider/Telephony.java index a4145c487696..4078fa6d5a73 100644 --- a/core/java/android/provider/Telephony.java +++ b/core/java/android/provider/Telephony.java @@ -465,6 +465,24 @@ public final class Telephony { * Contains info about SMS related Intents that are broadcast. */ public static final class Intents { + /** + * Set by BroadcastReceiver. Indicates the message was handled + * successfully. + */ + public static final int RESULT_SMS_HANDLED = 1; + + /** + * Set by BroadcastReceiver. Indicates a generic error while + * processing the message. + */ + public static final int RESULT_SMS_GENERIC_ERROR = 2; + + /** + * Set by BroadcastReceiver. Indicates insufficient memory to store + * the message. + */ + public static final int RESULT_SMS_OUT_OF_MEMORY = 3; + /** * Broadcast Action: A new text based SMS message has been received * by the device. The intent will have the following extra @@ -476,7 +494,10 @@ public final class Telephony { * * *

      The extra values can be extracted using - * {@link #getMessagesFromIntent(Intent)}

      + * {@link #getMessagesFromIntent(Intent)}.

      + * + *

      If a BroadcastReceiver encounters an error while processing + * this intent it should set the result code appropriately.

      */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String SMS_RECEIVED_ACTION = @@ -493,7 +514,10 @@ public final class Telephony { * * *

      The extra values can be extracted using - * {@link #getMessagesFromIntent(Intent)}

      + * {@link #getMessagesFromIntent(Intent)}.

      + * + *

      If a BroadcastReceiver encounters an error while processing + * this intent it should set the result code appropriately.

      */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String DATA_SMS_RECEIVED_ACTION = @@ -510,6 +534,9 @@ public final class Telephony { *
    15. pduType (Integer) - The WAP PDU type
    16. *
    17. data - The data payload of the message
    18. * + * + *

      If a BroadcastReceiver encounters an error while processing + * this intent it should set the result code appropriately.

      */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String WAP_PUSH_RECEIVED_ACTION = diff --git a/core/java/android/server/BluetoothDeviceService.java b/core/java/android/server/BluetoothDeviceService.java index 8e5cee9bbfba..8c843efd7e4e 100644 --- a/core/java/android/server/BluetoothDeviceService.java +++ b/core/java/android/server/BluetoothDeviceService.java @@ -372,6 +372,10 @@ public class BluetoothDeviceService extends IBluetoothDevice.Stub { mEventLoop.onModeChanged(getModeNative()); } + if (mIsAirplaneSensitive && isAirplaneModeOn()) { + disable(false); + } + } } @@ -1220,6 +1224,8 @@ public class BluetoothDeviceService extends IBluetoothDevice.Stub { break; } pw.println("getHeadsetAddress() = " + headset.getHeadsetAddress()); + pw.println("getBatteryUsageHint() = " + headset.getBatteryUsageHint()); + headset.close(); } diff --git a/core/java/android/server/search/SearchManagerService.java b/core/java/android/server/search/SearchManagerService.java index 03623d6bf411..373e61ff97f0 100644 --- a/core/java/android/server/search/SearchManagerService.java +++ b/core/java/android/server/search/SearchManagerService.java @@ -17,48 +17,69 @@ package android.server.search; import android.app.ISearchManager; +import android.app.ISearchManagerCallback; +import android.app.SearchDialog; +import android.app.SearchManager; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; +import android.content.res.Configuration; +import android.os.Bundle; import android.os.Handler; +import android.os.RemoteException; +import android.os.SystemProperties; +import android.text.TextUtils; +import android.util.Log; import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.FutureTask; /** * This is a simplified version of the Search Manager service. It no longer handles - * presentation (UI). Its function is to maintain the map & list of "searchable" + * presentation (UI). Its function is to maintain the map & list of "searchable" * items, which provides a mapping from individual activities (where a user might have * invoked search) to specific searchable activities (where the search will be dispatched). */ public class SearchManagerService extends ISearchManager.Stub + implements DialogInterface.OnCancelListener, DialogInterface.OnDismissListener { // general debugging support private static final String TAG = "SearchManagerService"; - private static final boolean DEBUG = false; - - // configuration choices - private static final boolean IMMEDIATE_SEARCHABLES_UPDATE = true; + private static final boolean DBG = false; // class maintenance and general shared data private final Context mContext; private final Handler mHandler; private boolean mSearchablesDirty; - private Searchables mSearchables; - + private final Searchables mSearchables; + + final SearchDialog mSearchDialog; + ISearchManagerCallback mCallback = null; + + private final boolean mDisabledOnBoot; + + private static final String DISABLE_SEARCH_PROPERTY = "dev.disablesearchdialog"; + /** * Initializes the Search Manager service in the provided system context. * Only one instance of this object should be created! * * @param context to use for accessing DB, window manager, etc. */ - public SearchManagerService(Context context) { + public SearchManagerService(Context context) { mContext = context; mHandler = new Handler(); mSearchablesDirty = true; mSearchables = new Searchables(context); - + mSearchDialog = new SearchDialog(context); + mSearchDialog.setOnCancelListener(this); + mSearchDialog.setOnDismissListener(this); + // Setup the infrastructure for updating and maintaining the list // of searchable activities. IntentFilter filter = new IntentFilter(); @@ -67,17 +88,18 @@ public class SearchManagerService extends ISearchManager.Stub filter.addAction(Intent.ACTION_PACKAGE_CHANGED); filter.addDataScheme("package"); mContext.registerReceiver(mIntentReceiver, filter, null, mHandler); - + // After startup settles down, preload the searchables list, // which will reduce the delay when the search UI is invoked. - if (IMMEDIATE_SEARCHABLES_UPDATE) { - mHandler.post(mRunUpdateSearchable); - } + mHandler.post(mRunUpdateSearchable); + + // allows disabling of search dialog for stress testing runs + mDisabledOnBoot = !TextUtils.isEmpty(SystemProperties.get(DISABLE_SEARCH_PROPERTY)); } - + /** * Listens for intent broadcasts. - * + * * The primary purpose here is to refresh the "searchables" list * if packages are added/removed. */ @@ -85,29 +107,25 @@ public class SearchManagerService extends ISearchManager.Stub @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); - + // First, test for intents that matter at any time if (action.equals(Intent.ACTION_PACKAGE_ADDED) || action.equals(Intent.ACTION_PACKAGE_REMOVED) || action.equals(Intent.ACTION_PACKAGE_CHANGED)) { mSearchablesDirty = true; - if (IMMEDIATE_SEARCHABLES_UPDATE) { - mHandler.post(mRunUpdateSearchable); - } + mHandler.post(mRunUpdateSearchable); return; } } }; - + /** * This runnable (for the main handler / UI thread) will update the searchables list. */ private Runnable mRunUpdateSearchable = new Runnable() { public void run() { - if (mSearchablesDirty) { - updateSearchables(); - } - } + updateSearchablesIfDirty(); + } }; /** @@ -115,42 +133,251 @@ public class SearchManagerService extends ISearchManager.Stub * a package add/remove broadcast message. */ private void updateSearchables() { + if (DBG) debug("updateSearchables()"); mSearchables.buildSearchableList(); mSearchablesDirty = false; } + /** + * Updates the list of searchables if needed. + */ + private void updateSearchablesIfDirty() { + if (mSearchablesDirty) { + updateSearchables(); + } + } + /** * Returns the SearchableInfo for a given activity * * @param launchActivity The activity from which we're launching this search. * @param globalSearch If false, this will only launch the search that has been specifically - * defined by the application (which is usually defined as a local search). If no default + * defined by the application (which is usually defined as a local search). If no default * search is defined in the current application or activity, no search will be launched. * If true, this will always launch a platform-global (e.g. web-based) search instead. * @return Returns a SearchableInfo record describing the parameters of the search, * or null if no searchable metadata was available. */ public SearchableInfo getSearchableInfo(ComponentName launchActivity, boolean globalSearch) { - // final check. however we should try to avoid this, because - // it slows down the entry into the UI. - if (mSearchablesDirty) { - updateSearchables(); - } + updateSearchablesIfDirty(); SearchableInfo si = null; if (globalSearch) { si = mSearchables.getDefaultSearchable(); } else { + if (launchActivity == null) { + Log.e(TAG, "getSearchableInfo(), activity == null"); + return null; + } si = mSearchables.getSearchableInfo(launchActivity); } return si; } - + /** * Returns a list of the searchable activities that can be included in global search. */ public List getSearchablesInGlobalSearch() { + updateSearchablesIfDirty(); return mSearchables.getSearchablesInGlobalSearchList(); } + /** + * Launches the search UI on the main thread of the service. + * + * @see SearchManager#startSearch(String, boolean, ComponentName, Bundle, boolean) + */ + public void startSearch(final String initialQuery, + final boolean selectInitialQuery, + final ComponentName launchActivity, + final Bundle appSearchData, + final boolean globalSearch, + final ISearchManagerCallback searchManagerCallback) { + if (DBG) debug("startSearch()"); + Runnable task = new Runnable() { + public void run() { + performStartSearch(initialQuery, + selectInitialQuery, + launchActivity, + appSearchData, + globalSearch, + searchManagerCallback); + } + }; + mHandler.post(task); + } + + /** + * Actually launches the search. This must be called on the service UI thread. + */ + /*package*/ void performStartSearch(String initialQuery, + boolean selectInitialQuery, + ComponentName launchActivity, + Bundle appSearchData, + boolean globalSearch, + ISearchManagerCallback searchManagerCallback) { + if (DBG) debug("performStartSearch()"); + + if (mDisabledOnBoot) { + Log.d(TAG, "ignoring start search request because " + DISABLE_SEARCH_PROPERTY + + " system property is set."); + return; + } + + mSearchDialog.show(initialQuery, selectInitialQuery, launchActivity, appSearchData, + globalSearch); + if (searchManagerCallback != null) { + mCallback = searchManagerCallback; + } + } + + /** + * Cancels the search dialog. Can be called from any thread. + */ + public void stopSearch() { + if (DBG) debug("stopSearch()"); + mHandler.post(new Runnable() { + public void run() { + performStopSearch(); + } + }); + } + + /** + * Cancels the search dialog. Must be called from the service UI thread. + */ + /*package*/ void performStopSearch() { + if (DBG) debug("performStopSearch()"); + mSearchDialog.cancel(); + } + + /** + * Determines if the Search UI is currently displayed. + * + * @see SearchManager#isVisible() + */ + public boolean isVisible() { + return postAndWait(mIsShowing, false, "isShowing()"); + } + + private final Callable mIsShowing = new Callable() { + public Boolean call() { + return mSearchDialog.isShowing(); + } + }; + + public Bundle onSaveInstanceState() { + return postAndWait(mOnSaveInstanceState, null, "onSaveInstanceState()"); + } + + private final Callable mOnSaveInstanceState = new Callable() { + public Bundle call() { + if (mSearchDialog.isShowing()) { + return mSearchDialog.onSaveInstanceState(); + } else { + return null; + } + } + }; + + public void onRestoreInstanceState(final Bundle searchDialogState) { + if (searchDialogState != null) { + mHandler.post(new Runnable() { + public void run() { + mSearchDialog.onRestoreInstanceState(searchDialogState); + } + }); + } + } + + public void onConfigurationChanged(final Configuration newConfig) { + mHandler.post(new Runnable() { + public void run() { + if (mSearchDialog.isShowing()) { + mSearchDialog.onConfigurationChanged(newConfig); + } + } + }); + } + + /** + * Called by {@link SearchDialog} when it goes away. + */ + public void onDismiss(DialogInterface dialog) { + if (DBG) debug("onDismiss()"); + if (mCallback != null) { + try { + mCallback.onDismiss(); + } catch (RemoteException ex) { + Log.e(TAG, "onDismiss() failed: " + ex); + } + } + } + + /** + * Called by {@link SearchDialog} when the user or activity cancels search. + * When this is called, {@link #onDismiss} is called too. + */ + public void onCancel(DialogInterface dialog) { + if (DBG) debug("onCancel()"); + if (mCallback != null) { + try { + mCallback.onCancel(); + } catch (RemoteException ex) { + Log.e(TAG, "onCancel() failed: " + ex); + } + } + } + + /** + * Returns a list of the searchable activities that handle web searches. + */ + public List getSearchablesForWebSearch() { + updateSearchablesIfDirty(); + return mSearchables.getSearchablesForWebSearchList(); + } + + /** + * Returns the default searchable activity for web searches. + */ + public SearchableInfo getDefaultSearchableForWebSearch() { + updateSearchablesIfDirty(); + return mSearchables.getDefaultSearchableForWebSearch(); + } + + /** + * Sets the default searchable activity for web searches. + */ + public void setDefaultWebSearch(ComponentName component) { + mSearchables.setDefaultWebSearch(component); + } + + /** + * Runs an operation on the handler for the service, blocks until it returns, + * and returns the value returned by the operation. + * + * @param Return value type. + * @param callable Operation to run. + * @param errorResult Value to return if the operations throws an exception. + * @param name Operation name to include in error log messages. + * @return The value returned by the operation. + */ + private V postAndWait(Callable callable, V errorResult, String name) { + FutureTask task = new FutureTask(callable); + mHandler.post(task); + try { + return task.get(); + } catch (InterruptedException ex) { + Log.e(TAG, "Error calling " + name + ": " + ex); + return errorResult; + } catch (ExecutionException ex) { + Log.e(TAG, "Error calling " + name + ": " + ex); + return errorResult; + } + } + + private static void debug(String msg) { + Thread thread = Thread.currentThread(); + Log.d(TAG, msg + " (" + thread.getName() + "-" + thread.getId() + ")"); + } } diff --git a/core/java/android/server/search/SearchableInfo.java b/core/java/android/server/search/SearchableInfo.java index 842fc7573aef..8ef1f154d72d 100644 --- a/core/java/android/server/search/SearchableInfo.java +++ b/core/java/android/server/search/SearchableInfo.java @@ -40,7 +40,7 @@ import java.util.HashMap; public final class SearchableInfo implements Parcelable { // general debugging support - private static final boolean DBG = true; + private static final boolean DBG = false; private static final String LOG_TAG = "SearchableInfo"; // static strings used for XML lookups. @@ -66,6 +66,8 @@ public final class SearchableInfo implements Parcelable { private final int mSearchInputType; private final int mSearchImeOptions; private final boolean mIncludeInGlobalSearch; + private final boolean mQueryAfterZeroResults; + private final String mSettingsDescription; private final String mSuggestAuthority; private final String mSuggestPath; private final String mSuggestSelection; @@ -133,6 +135,14 @@ public final class SearchableInfo implements Parcelable { public boolean shouldRewriteQueryFromText() { return 0 != (mSearchMode & SEARCH_MODE_QUERY_REWRITE_FROM_TEXT); } + + /** + * Gets the description to use for this source in system search settings, or null if + * none has been specified. + */ + public String getSettingsDescription() { + return mSettingsDescription; + } /** * Retrieve the path for obtaining search suggestions. @@ -276,7 +286,11 @@ public final class SearchableInfo implements Parcelable { EditorInfo.IME_ACTION_SEARCH); mIncludeInGlobalSearch = a.getBoolean( com.android.internal.R.styleable.Searchable_includeInGlobalSearch, false); + mQueryAfterZeroResults = a.getBoolean( + com.android.internal.R.styleable.Searchable_queryAfterZeroResults, false); + mSettingsDescription = a.getString( + com.android.internal.R.styleable.Searchable_searchSettingsDescription); mSuggestAuthority = a.getString( com.android.internal.R.styleable.Searchable_searchSuggestAuthority); mSuggestPath = a.getString( @@ -317,7 +331,7 @@ public final class SearchableInfo implements Parcelable { // for now, implement some form of rules - minimal data if (mLabelId == 0) { - throw new IllegalArgumentException("No label."); + throw new IllegalArgumentException("Search label must be a resource reference."); } } @@ -438,13 +452,18 @@ public final class SearchableInfo implements Parcelable { xml.close(); if (DBG) { - Log.d(LOG_TAG, "Checked " + activityInfo.name - + ",label=" + searchable.getLabelId() - + ",icon=" + searchable.getIconId() - + ",suggestAuthority=" + searchable.getSuggestAuthority() - + ",target=" + searchable.getSearchActivity().getClassName() - + ",global=" + searchable.shouldIncludeInGlobalSearch() - + ",threshold=" + searchable.getSuggestThreshold()); + if (searchable != null) { + Log.d(LOG_TAG, "Checked " + activityInfo.name + + ",label=" + searchable.getLabelId() + + ",icon=" + searchable.getIconId() + + ",suggestAuthority=" + searchable.getSuggestAuthority() + + ",target=" + searchable.getSearchActivity().getClassName() + + ",global=" + searchable.shouldIncludeInGlobalSearch() + + ",settingsDescription=" + searchable.getSettingsDescription() + + ",threshold=" + searchable.getSuggestThreshold()); + } else { + Log.d(LOG_TAG, "Checked " + activityInfo.name + ", no searchable meta-data"); + } } return searchable; } @@ -636,6 +655,17 @@ public final class SearchableInfo implements Parcelable { return mIncludeInGlobalSearch; } + /** + * Checks whether this searchable activity should be invoked after a query returned zero + * results. + * + * @return The value of the queryAfterZeroResults attribute, + * or false if the attribute is not set. + */ + public boolean queryAfterZeroResults() { + return mQueryAfterZeroResults; + } + /** * Support for parcelable and aidl operations. */ @@ -667,7 +697,9 @@ public final class SearchableInfo implements Parcelable { mSearchInputType = in.readInt(); mSearchImeOptions = in.readInt(); mIncludeInGlobalSearch = in.readInt() != 0; - + mQueryAfterZeroResults = in.readInt() != 0; + + mSettingsDescription = in.readString(); mSuggestAuthority = in.readString(); mSuggestPath = in.readString(); mSuggestSelection = in.readString(); @@ -702,7 +734,9 @@ public final class SearchableInfo implements Parcelable { dest.writeInt(mSearchInputType); dest.writeInt(mSearchImeOptions); dest.writeInt(mIncludeInGlobalSearch ? 1 : 0); + dest.writeInt(mQueryAfterZeroResults ? 1 : 0); + dest.writeString(mSettingsDescription); dest.writeString(mSuggestAuthority); dest.writeString(mSuggestPath); dest.writeString(mSuggestSelection); diff --git a/core/java/android/server/search/Searchables.java b/core/java/android/server/search/Searchables.java index 9586d56e8e8d..c7cc8edf108d 100644 --- a/core/java/android/server/search/Searchables.java +++ b/core/java/android/server/search/Searchables.java @@ -16,49 +16,64 @@ package android.server.search; +import com.android.internal.app.ResolverActivity; +import com.android.internal.R; + import android.app.SearchManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.res.Resources; import android.os.Bundle; +import android.util.Log; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /** - * This class maintains the information about all searchable activities. + * This class maintains the information about all searchable activities. */ public class Searchables { + private static final String LOG_TAG = "Searchables"; + // static strings used for XML lookups, etc. - // TODO how should these be documented for the developer, in a more structured way than + // TODO how should these be documented for the developer, in a more structured way than // the current long wordy javadoc in SearchManager.java ? private static final String MD_LABEL_DEFAULT_SEARCHABLE = "android.app.default_searchable"; private static final String MD_SEARCHABLE_SYSTEM_SEARCH = "*"; - + private Context mContext; - + private HashMap mSearchablesMap = null; private ArrayList mSearchablesList = null; private ArrayList mSearchablesInGlobalSearchList = null; + private ArrayList mSearchablesForWebSearchList = null; private SearchableInfo mDefaultSearchable = null; - + private SearchableInfo mDefaultSearchableForWebSearch = null; + + public static String GOOGLE_SEARCH_COMPONENT_NAME = + "com.android.googlesearch/.GoogleSearch"; + public static String ENHANCED_GOOGLE_SEARCH_COMPONENT_NAME = + "com.google.android.providers.enhancedgooglesearch/.Launcher"; + /** - * + * * @param context Context to use for looking up activities etc. */ public Searchables (Context context) { mContext = context; } - + /** * Look up, or construct, based on the activity. - * - * The activities fall into three cases, based on meta-data found in + * + * The activities fall into three cases, based on meta-data found in * the manifest entry: *
        *
      1. The activity itself implements search. This is indicated by the @@ -70,16 +85,16 @@ public class Searchables { * case the factory will "redirect" and return the searchable data.
      2. *
      3. No searchability data is provided. We return null here and other * code will insert the "default" (e.g. contacts) search. - * + * * TODO: cache the result in the map, and check the map first. * TODO: it might make sense to implement the searchable reference as * an application meta-data entry. This way we don't have to pepper each * and every activity. * TODO: can we skip the constructor step if it's a non-searchable? - * TODO: does it make sense to plug the default into a slot here for + * TODO: does it make sense to plug the default into a slot here for * automatic return? Probably not, but it's one way to do it. * - * @param activity The name of the current activity, or null if the + * @param activity The name of the current activity, or null if the * activity does not define any explicit searchable metadata. */ public SearchableInfo getSearchableInfo(ComponentName activity) { @@ -89,18 +104,18 @@ public class Searchables { result = mSearchablesMap.get(activity); if (result != null) return result; } - + // Step 2. See if the current activity references a searchable. // Note: Conceptually, this could be a while(true) loop, but there's - // no point in implementing reference chaining here and risking a loop. + // no point in implementing reference chaining here and risking a loop. // References must point directly to searchable activities. - + ActivityInfo ai = null; try { ai = mContext.getPackageManager(). getActivityInfo(activity, PackageManager.GET_META_DATA ); String refActivityName = null; - + // First look for activity-specific reference Bundle md = ai.metaData; if (md != null) { @@ -113,11 +128,11 @@ public class Searchables { refActivityName = md.getString(MD_LABEL_DEFAULT_SEARCHABLE); } } - + // Irrespective of source, if a reference was found, follow it. if (refActivityName != null) { - // An app or activity can declare that we should simply launch + // An app or activity can declare that we should simply launch // "system default search" if search is invoked. if (refActivityName.equals(MD_SEARCHABLE_SYSTEM_SEARCH)) { return getDefaultSearchable(); @@ -143,95 +158,212 @@ public class Searchables { } catch (PackageManager.NameNotFoundException e) { // case 3: no metadata } - + // Step 3. None found. Return null. return null; - + } - + /** * Provides the system-default search activity, which you can use * whenever getSearchableInfo() returns null; - * + * * @return Returns the system-default search activity, null if never defined */ public synchronized SearchableInfo getDefaultSearchable() { return mDefaultSearchable; } - + public synchronized boolean isDefaultSearchable(SearchableInfo searchable) { return searchable == mDefaultSearchable; } - + /** - * Builds an entire list (suitable for display) of - * activities that are searchable, by iterating the entire set of - * ACTION_SEARCH intents. - * + * Builds an entire list (suitable for display) of + * activities that are searchable, by iterating the entire set of + * ACTION_SEARCH & ACTION_WEB_SEARCH intents. + * * Also clears the hash of all activities -> searches which will * refill as the user clicks "search". - * + * * This should only be done at startup and again if we know that the * list has changed. - * + * * TODO: every activity that provides a ACTION_SEARCH intent should * also provide searchability meta-data. There are a bunch of checks here * that, if data is not found, silently skip to the next activity. This * won't help a developer trying to figure out why their activity isn't * showing up in the list, but an exception here is too rough. I would * like to find a better notification mechanism. - * + * * TODO: sort the list somehow? UI choice. */ public void buildSearchableList() { - // These will become the new values at the end of the method - HashMap newSearchablesMap + HashMap newSearchablesMap = new HashMap(); ArrayList newSearchablesList = new ArrayList(); ArrayList newSearchablesInGlobalSearchList = new ArrayList(); + ArrayList newSearchablesForWebSearchList + = new ArrayList(); final PackageManager pm = mContext.getPackageManager(); - - // use intent resolver to generate list of ACTION_SEARCH receivers - List infoList; + + // Use intent resolver to generate list of ACTION_SEARCH & ACTION_WEB_SEARCH receivers. + List searchList; final Intent intent = new Intent(Intent.ACTION_SEARCH); - infoList = pm.queryIntentActivities(intent, PackageManager.GET_META_DATA); - + searchList = pm.queryIntentActivities(intent, PackageManager.GET_META_DATA); + + List webSearchInfoList; + final Intent webSearchIntent = new Intent(Intent.ACTION_WEB_SEARCH); + webSearchInfoList = pm.queryIntentActivities(webSearchIntent, PackageManager.GET_META_DATA); + // analyze each one, generate a Searchables record, and record - if (infoList != null) { - int count = infoList.size(); + if (searchList != null || webSearchInfoList != null) { + int search_count = (searchList == null ? 0 : searchList.size()); + int web_search_count = (webSearchInfoList == null ? 0 : webSearchInfoList.size()); + int count = search_count + web_search_count; for (int ii = 0; ii < count; ii++) { // for each component, try to find metadata - ResolveInfo info = infoList.get(ii); + ResolveInfo info = (ii < search_count) + ? searchList.get(ii) + : webSearchInfoList.get(ii - search_count); ActivityInfo ai = info.activityInfo; - SearchableInfo searchable = SearchableInfo.getActivityMetaData(mContext, ai); - if (searchable != null) { - newSearchablesList.add(searchable); - newSearchablesMap.put(searchable.getSearchActivity(), searchable); - if (searchable.shouldIncludeInGlobalSearch()) { - newSearchablesInGlobalSearchList.add(searchable); + // Check first to avoid duplicate entries. + if (newSearchablesMap.get(new ComponentName(ai.packageName, ai.name)) == null) { + SearchableInfo searchable = SearchableInfo.getActivityMetaData(mContext, ai); + if (searchable != null) { + newSearchablesList.add(searchable); + newSearchablesMap.put(searchable.getSearchActivity(), searchable); + if (searchable.shouldIncludeInGlobalSearch()) { + newSearchablesInGlobalSearchList.add(searchable); + } } } } } - + + if (webSearchInfoList != null) { + for (int i = 0; i < webSearchInfoList.size(); ++i) { + ActivityInfo ai = webSearchInfoList.get(i).activityInfo; + ComponentName component = new ComponentName(ai.packageName, ai.name); + newSearchablesForWebSearchList.add(newSearchablesMap.get(component)); + } + } + // Find the global search provider Intent globalSearchIntent = new Intent(SearchManager.INTENT_ACTION_GLOBAL_SEARCH); ComponentName globalSearchActivity = globalSearchIntent.resolveActivity(pm); SearchableInfo newDefaultSearchable = newSearchablesMap.get(globalSearchActivity); + if (newDefaultSearchable == null) { + Log.w(LOG_TAG, "No searchable info found for new default searchable activity " + + globalSearchActivity); + } + + // Find the default web search provider. + ComponentName webSearchActivity = getPreferredWebSearchActivity(); + SearchableInfo newDefaultSearchableForWebSearch = null; + if (webSearchActivity != null) { + newDefaultSearchableForWebSearch = newSearchablesMap.get(webSearchActivity); + } + if (newDefaultSearchableForWebSearch == null) { + Log.w(LOG_TAG, "No searchable info found for new default web search activity " + + webSearchActivity); + } + // Store a consistent set of new values synchronized (this) { mSearchablesMap = newSearchablesMap; mSearchablesList = newSearchablesList; mSearchablesInGlobalSearchList = newSearchablesInGlobalSearchList; + mSearchablesForWebSearchList = newSearchablesForWebSearchList; mDefaultSearchable = newDefaultSearchable; + mDefaultSearchableForWebSearch = newDefaultSearchableForWebSearch; + } + + // Inform all listeners that the list of searchables has been updated. + mContext.sendBroadcast(new Intent(SearchManager.INTENT_ACTION_SEARCHABLES_CHANGED)); + } + + /** + * Checks if the given activity component is present in the system and if so makes it the + * preferred activity for handling ACTION_WEB_SEARCH. + * @param component Name of the component to check and set as preferred. + * @param action Intent action for which this activity is to be set as preferred. + * @return true if component was detected and set as preferred activity, false if not. + */ + private boolean setPreferredActivity(ComponentName component, String action) { + Log.d(LOG_TAG, "Checking component " + component); + PackageManager pm = mContext.getPackageManager(); + ActivityInfo ai; + try { + ai = pm.getActivityInfo(component, 0); + } catch (PackageManager.NameNotFoundException e) { + return false; + } + + // The code here to find the value for bestMatch is heavily inspired by the code + // in ResolverActivity where the preferred activity is set. + Intent intent = new Intent(action); + intent.addCategory(Intent.CATEGORY_DEFAULT); + List webSearchActivities = pm.queryIntentActivities(intent, 0); + ComponentName set[] = new ComponentName[webSearchActivities.size()]; + int bestMatch = 0; + for (int i = 0; i < webSearchActivities.size(); ++i) { + ResolveInfo ri = webSearchActivities.get(i); + set[i] = new ComponentName(ri.activityInfo.packageName, + ri.activityInfo.name); + if (ri.match > bestMatch) bestMatch = ri.match; + } + + Log.d(LOG_TAG, "Setting preferred web search activity to " + component); + IntentFilter filter = new IntentFilter(action); + filter.addCategory(Intent.CATEGORY_DEFAULT); + pm.replacePreferredActivity(filter, bestMatch, set, component); + return true; + } + + public ComponentName getPreferredWebSearchActivity() { + // Check if we have a preferred web search activity. + Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); + PackageManager pm = mContext.getPackageManager(); + ResolveInfo ri = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); + + if (ri == null || ri.activityInfo.name.equals(ResolverActivity.class.getName())) { + Log.d(LOG_TAG, "No preferred activity set for action web search."); + + // The components in the providers array are checked in the order of declaration so the + // first one has the highest priority. If the component exists in the system it is set + // as the preferred activity to handle intent action web search. + String[] preferredActivities = mContext.getResources().getStringArray( + com.android.internal.R.array.default_web_search_providers); + for (String componentName : preferredActivities) { + ComponentName component = ComponentName.unflattenFromString(componentName); + if (setPreferredActivity(component, Intent.ACTION_WEB_SEARCH)) { + return component; + } + } + } else { + // If the current preferred activity is GoogleSearch, and we detect + // EnhancedGoogleSearch installed as well, set the latter as preferred since that + // is a superset and provides more functionality. + ComponentName cn = new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name); + if (cn.flattenToShortString().equals(GOOGLE_SEARCH_COMPONENT_NAME)) { + ComponentName enhancedGoogleSearch = ComponentName.unflattenFromString( + ENHANCED_GOOGLE_SEARCH_COMPONENT_NAME); + if (setPreferredActivity(enhancedGoogleSearch, Intent.ACTION_WEB_SEARCH)) { + return enhancedGoogleSearch; + } + } } + + if (ri == null) return null; + return new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name); } - + /** * Returns the list of searchable activities. */ @@ -239,11 +371,33 @@ public class Searchables { ArrayList result = new ArrayList(mSearchablesList); return result; } - + /** * Returns a list of the searchable activities that can be included in global search. */ public synchronized ArrayList getSearchablesInGlobalSearchList() { return new ArrayList(mSearchablesInGlobalSearchList); } + + /** + * Returns a list of the searchable activities that handle web searches. + */ + public synchronized ArrayList getSearchablesForWebSearchList() { + return new ArrayList(mSearchablesForWebSearchList); + } + + /** + * Returns the default searchable activity for web searches. + */ + public synchronized SearchableInfo getDefaultSearchableForWebSearch() { + return mDefaultSearchableForWebSearch; + } + + /** + * Sets the default searchable activity for web searches. + */ + public synchronized void setDefaultWebSearch(ComponentName component) { + setPreferredActivity(component, Intent.ACTION_WEB_SEARCH); + buildSearchableList(); + } } diff --git a/core/java/android/speech/IRecognitionListener.aidl b/core/java/android/speech/IRecognitionListener.aidl index 6ed32b502b42..2da2258b4ee1 100644 --- a/core/java/android/speech/IRecognitionListener.aidl +++ b/core/java/android/speech/IRecognitionListener.aidl @@ -17,6 +17,7 @@ package android.speech; import android.os.Bundle; +import android.speech.RecognitionResult; /** * Listener for speech recognition events, used with RecognitionService. @@ -43,13 +44,17 @@ interface IRecognitionListener { /** Called after the user stops speaking. */ void onEndOfSpeech(); - /** A network or recognition error occurred. */ - void onError(in String error); + /** + * A network or recognition error occurred. The code is defined in + * {@link android.speech.RecognitionResult} + */ + void onError(in int error); /** - * Called when recognition transcripts are ready. - * results: an ordered list of the most likely transcripts (N-best list). - * @hide + * Called when recognition results are ready. + * @param results: an ordered list of the most likely results (N-best list). + * @param key: a key associated with the results. The same results can + * be retrieved asynchronously later using the key, if available. */ - void onResults(in List results); + void onResults(in List results, long key); } diff --git a/core/java/android/speech/IRecognitionService.aidl b/core/java/android/speech/IRecognitionService.aidl index 36d12e9aae64..a18c380c9e70 100644 --- a/core/java/android/speech/IRecognitionService.aidl +++ b/core/java/android/speech/IRecognitionService.aidl @@ -18,6 +18,7 @@ package android.speech; import android.content.Intent; import android.speech.IRecognitionListener; +import android.speech.RecognitionResult; // A Service interface to speech recognition. Call startListening when // you want to begin capturing audio; RecognitionService will automatically @@ -29,6 +30,8 @@ interface IRecognitionService { // see RecognizerIntent.java for constants used to specify the intent. void startListening(in Intent recognizerIntent, in IRecognitionListener listener); + + List getRecognitionResults(in long key); void cancel(); } diff --git a/core/java/android/speech/RecognitionResult.aidl b/core/java/android/speech/RecognitionResult.aidl new file mode 100644 index 000000000000..59e53ab86fd1 --- /dev/null +++ b/core/java/android/speech/RecognitionResult.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.speech; + +parcelable RecognitionResult; diff --git a/core/java/android/speech/RecognitionResult.java b/core/java/android/speech/RecognitionResult.java new file mode 100644 index 000000000000..8d031fcd3273 --- /dev/null +++ b/core/java/android/speech/RecognitionResult.java @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2008 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package android.speech; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * RecognitionResult is a passive object that stores a single recognized + * query and its search result. + * TODO: revisit and improve. May be we should have a separate result + * object for each type, and put them (type/value) in bundle? + * + * {@hide} + */ +public class RecognitionResult implements Parcelable { + /** + * Status of the recognize request. + */ + public static final int NETWORK_TIMEOUT = 1; // Network operation timed out. + public static final int NETWORK_ERROR = 2; // Other networkrelated errors. + public static final int AUDIO_ERROR = 3; // Audio recording error. + public static final int SERVER_ERROR = 4; // Server sends error status. + public static final int CLIENT_ERROR = 5; // Other client side errors. + public static final int SPEECH_TIMEOUT = 6; // No speech input + public static final int NO_MATCH = 7; // No recognition result matched. + public static final int SERVICE_BUSY = 8; // RecognitionService busy. + + /** + * Type of the recognition results. + */ + public static final int RAW_RECOGNITION_RESULT = 0; + public static final int WEB_SEARCH_RESULT = 1; + public static final int CONTACT_RESULT = 2; + + /** + * A factory method to create a raw RecognitionResult + * + * @param sentence the recognized text. + */ + public static RecognitionResult newRawRecognitionResult(String sentence) { + return new RecognitionResult(RAW_RECOGNITION_RESULT, sentence, null, null); + } + + /** + * A factory method to create RecognitionResult for contacts. + * + * @param contact the contact name. + * @param phoneType the phone type. + */ + public static RecognitionResult newContactResult(String contact, int phoneType) { + return new RecognitionResult(CONTACT_RESULT, contact, phoneType); + } + + /** + * A factory method to create a RecognitionResult for Web Search Query. + * + * @param query the query string. + * @param html the html page of the search result. + * @param url the url that performs the search with the query. + */ + public static RecognitionResult newWebResult(String query, String html, String url) { + return new RecognitionResult(WEB_SEARCH_RESULT, query, html, url); + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + + public RecognitionResult createFromParcel(Parcel in) { + return new RecognitionResult(in); + } + + public RecognitionResult[] newArray(int size) { + return new RecognitionResult[size]; + } + }; + + /** + * Result type. + */ + public final int mResultType; + + /** + * The recognized string when mResultType is WEB_SEARCH_RESULT. + * The name of the contact when mResultType is CONTACT_RESULT. + */ + public final String mText; + + /** + * The HTML result page for the query. If this is null, then the + * application must use the url field to get the HTML result page. + */ + public final String mHtml; + + /** + * The url to get the result page for the query string. The + * application must use this url instead of performing the search + * with the query. + */ + public final String mUrl; + + /** Phone number type. This is valid only when mResultType == CONTACT_RESULT */ + public final int mPhoneType; + + private RecognitionResult(int type, String query, String html, String url) { + mResultType = type; + mText = query; + mHtml = html; + mUrl = url; + mPhoneType = -1; + } + + private RecognitionResult(int type, String query, int at) { + mResultType = type; + mText = query; + mPhoneType = at; + mHtml = null; + mUrl = null; + } + + private RecognitionResult(Parcel in) { + mResultType = in.readInt(); + mText = in.readString(); + mHtml= in.readString(); + mUrl= in.readString(); + mPhoneType = in.readInt(); + } + + public void writeToParcel(Parcel out, int flags) { + out.writeInt(mResultType); + out.writeString(mText); + out.writeString(mHtml); + out.writeString(mUrl); + out.writeInt(mPhoneType); + } + + + @Override + public String toString() { + String resultType[] = { "RAW", "WEB", "CONTACT" }; + return "[type=" + resultType[mResultType] + + ", text=" + mText+ ", mUrl=" + mUrl + ", html=" + mHtml + "]"; + } + + public int describeContents() { + // no special description + return 0; + } +} diff --git a/core/java/android/speech/RecognitionServiceUtil.java b/core/java/android/speech/RecognitionServiceUtil.java index 650c0fd24881..a8c78684f6cd 100644 --- a/core/java/android/speech/RecognitionServiceUtil.java +++ b/core/java/android/speech/RecognitionServiceUtil.java @@ -21,6 +21,9 @@ import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; +import android.os.RemoteException; +import android.speech.RecognitionResult; +import android.util.Log; import java.util.List; @@ -56,6 +59,11 @@ public class RecognitionServiceUtil { public static final Intent sDefaultIntent = new Intent( RecognizerIntent.ACTION_RECOGNIZE_SPEECH); + // Recognize request parameters + public static final String USE_LOCATION = "useLocation"; + public static final String CONTACT_AUTH_TOKEN = "contactAuthToken"; + + // Bundles public static final String NOISE_LEVEL = "NoiseLevel"; public static final String SIGNAL_NOISE_RATIO = "SignalNoiseRatio"; @@ -72,8 +80,8 @@ public class RecognitionServiceUtil { public void onRmsChanged(float rmsdB) {} public void onBufferReceived(byte[] buf) {} public void onEndOfSpeech() {} - public void onError(String error) {} - public void onResults(List results) {} + public void onError(int error) {} + public void onResults(List results, long key) {} } /** diff --git a/core/java/android/speech/tts/ITts.aidl b/core/java/android/speech/tts/ITts.aidl new file mode 100755 index 000000000000..c9a6180d4e69 --- /dev/null +++ b/core/java/android/speech/tts/ITts.aidl @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.speech.tts; + +import android.speech.tts.ITtsCallback; + +import android.content.Intent; + +/** + * AIDL for the TTS Service + * ITts.java is autogenerated from this. + * + * {@hide} + */ +interface ITts { + int setSpeechRate(in int speechRate); + + int setPitch(in int pitch); + + int speak(in String text, in int queueMode, in String[] params); + + boolean isSpeaking(); + + int stop(); + + void addSpeech(in String text, in String packageName, in int resId); + + void addSpeechFile(in String text, in String filename); + + String[] getLanguage(); + + int isLanguageAvailable(in String language, in String country, in String variant); + + int setLanguage(in String language, in String country, in String variant); + + boolean synthesizeToFile(in String text, in String[] params, in String outputDirectory); + + int playEarcon(in String earcon, in int queueMode, in String[] params); + + void addEarcon(in String earcon, in String packageName, in int resId); + + void addEarconFile(in String earcon, in String filename); + + void registerCallback(ITtsCallback cb); + + void unregisterCallback(ITtsCallback cb); + + int playSilence(in long duration, in int queueMode, in String[] params); +} diff --git a/core/java/android/speech/tts/ITtsCallback.aidl b/core/java/android/speech/tts/ITtsCallback.aidl new file mode 100755 index 000000000000..48ed73e02165 --- /dev/null +++ b/core/java/android/speech/tts/ITtsCallback.aidl @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.speech.tts; + +/** + * AIDL for the callback from the TTS Service + * ITtsCallback.java is autogenerated from this. + * + * {@hide} + */ +oneway interface ITtsCallback { + void markReached(String mark); +} diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java new file mode 100644 index 000000000000..616b3f113ffb --- /dev/null +++ b/core/java/android/speech/tts/TextToSpeech.java @@ -0,0 +1,719 @@ +/* + * Copyright (C) 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package android.speech.tts; + +import android.speech.tts.ITts; +import android.speech.tts.ITtsCallback; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.IBinder; +import android.os.RemoteException; +import android.util.Log; + +import java.util.HashMap; +import java.util.Locale; + +/** + * + * Synthesizes speech from text for immediate playback or to create a sound file. + * + */ +//TODO complete javadoc + add links to constants +public class TextToSpeech { + + /** + * Denotes a successful operation. + */ + public static final int TTS_SUCCESS = 0; + /** + * Denotes a generic operation failure. + */ + public static final int TTS_ERROR = -1; + + /** + * Queue mode where all entries in the playback queue (media to be played + * and text to be synthesized) are dropped and replaced by the new entry. + */ + public static final int TTS_QUEUE_FLUSH = 0; + /** + * Queue mode where the new entry is added at the end of the playback queue. + */ + public static final int TTS_QUEUE_ADD = 1; + + + /** + * Denotes the language is available exactly as specified by the locale + */ + public static final int TTS_LANG_COUNTRY_VAR_AVAILABLE = 2; + + + /** + * Denotes the language is available for the language and country specified + * by the locale, but not the variant. + */ + public static final int TTS_LANG_COUNTRY_AVAILABLE = 1; + + + /** + * Denotes the language is available for the language by the locale, + * but not the country and variant. + */ + public static final int TTS_LANG_AVAILABLE = 0; + + /** + * Denotes the language data is missing. + */ + public static final int TTS_LANG_MISSING_DATA = -1; + + /** + * Denotes the language is not supported by the current TTS engine. + */ + public static final int TTS_LANG_NOT_SUPPORTED = -2; + + + /** + * Called when the TTS has initialized. + * + * The InitListener must implement the onInit function. onInit is passed a + * status code indicating the result of the TTS initialization. + */ + public interface OnInitListener { + public void onInit(int status); + } + + /** + * Internal constants for the TTS functionality + * + * {@hide} + */ + public class Engine { + // default values for a TTS engine when settings are not found in the provider + public static final int FALLBACK_TTS_DEFAULT_RATE = 100; // 1x + public static final int FALLBACK_TTS_DEFAULT_PITCH = 100;// 1x + public static final int FALLBACK_TTS_USE_DEFAULTS = 0; // false + public static final String FALLBACK_TTS_DEFAULT_LANG = "eng"; + public static final String FALLBACK_TTS_DEFAULT_COUNTRY = ""; + public static final String FALLBACK_TTS_DEFAULT_VARIANT = ""; + + // return codes for a TTS engine's check data activity + public static final int CHECK_VOICE_DATA_PASS = 1; + public static final int CHECK_VOICE_DATA_FAIL = 0; + public static final int CHECK_VOICE_DATA_BAD_DATA = -1; + public static final int CHECK_VOICE_DATA_MISSING_DATA = -2; + public static final int CHECK_VOICE_DATA_MISSING_DATA_NO_SDCARD = -3; + + // return codes for a TTS engine's check data activity + public static final String VOICE_DATA_ROOT_DIRECTORY = "dataRoot"; + public static final String VOICE_DATA_FILES = "dataFiles"; + public static final String VOICE_DATA_FILES_INFO = "dataFilesInfo"; + + // keys for the parameters passed with speak commands + public static final String TTS_KEY_PARAM_RATE = "rate"; + public static final String TTS_KEY_PARAM_LANGUAGE = "language"; + public static final String TTS_KEY_PARAM_COUNTRY = "country"; + public static final String TTS_KEY_PARAM_VARIANT = "variant"; + public static final int TTS_PARAM_POSITION_RATE = 0; + public static final int TTS_PARAM_POSITION_LANGUAGE = 2; + public static final int TTS_PARAM_POSITION_COUNTRY = 4; + public static final int TTS_PARAM_POSITION_VARIANT = 6; + } + + /** + * Connection needed for the TTS. + */ + private ServiceConnection mServiceConnection; + + private ITts mITts = null; + private Context mContext = null; + private OnInitListener mInitListener = null; + private boolean mStarted = false; + private final Object mStartLock = new Object(); + /** + * Used to store the cached parameters sent along with each synthesis request to the + * TTS service. + */ + private String[] mCachedParams; + + /** + * The constructor for the TTS. + * + * @param context + * The context + * @param listener + * The InitListener that will be called when the TTS has + * initialized successfully. + */ + public TextToSpeech(Context context, OnInitListener listener) { + mContext = context; + mInitListener = listener; + + mCachedParams = new String[2*4]; // 4 parameters, store key and value + mCachedParams[Engine.TTS_PARAM_POSITION_RATE] = Engine.TTS_KEY_PARAM_RATE; + mCachedParams[Engine.TTS_PARAM_POSITION_LANGUAGE] = Engine.TTS_KEY_PARAM_LANGUAGE; + mCachedParams[Engine.TTS_PARAM_POSITION_COUNTRY] = Engine.TTS_KEY_PARAM_COUNTRY; + mCachedParams[Engine.TTS_PARAM_POSITION_VARIANT] = Engine.TTS_KEY_PARAM_VARIANT; + + mCachedParams[Engine.TTS_PARAM_POSITION_RATE + 1] = + String.valueOf(Engine.FALLBACK_TTS_DEFAULT_RATE); + // initialize the language cached parameters with the current Locale + Locale defaultLoc = Locale.getDefault(); + mCachedParams[Engine.TTS_PARAM_POSITION_LANGUAGE + 1] = defaultLoc.getISO3Language(); + mCachedParams[Engine.TTS_PARAM_POSITION_COUNTRY + 1] = defaultLoc.getISO3Country(); + mCachedParams[Engine.TTS_PARAM_POSITION_VARIANT + 1] = defaultLoc.getVariant(); + + initTts(); + } + + + private void initTts() { + mStarted = false; + + // Initialize the TTS, run the callback after the binding is successful + mServiceConnection = new ServiceConnection() { + public void onServiceConnected(ComponentName name, IBinder service) { + synchronized(mStartLock) { + mITts = ITts.Stub.asInterface(service); + mStarted = true; + if (mInitListener != null) { + // TODO manage failures and missing resources + mInitListener.onInit(TTS_SUCCESS); + } + } + } + + public void onServiceDisconnected(ComponentName name) { + synchronized(mStartLock) { + mITts = null; + mInitListener = null; + mStarted = false; + } + } + }; + + Intent intent = new Intent("android.intent.action.START_TTS_SERVICE"); + intent.addCategory("android.intent.category.TTS"); + mContext.bindService(intent, mServiceConnection, + Context.BIND_AUTO_CREATE); + // TODO handle case where the binding works (should always work) but + // the plugin fails + } + + + /** + * Shuts down the TTS. It is good practice to call this in the onDestroy + * method of the Activity that is using the TTS so that the TTS is stopped + * cleanly. + */ + public void shutdown() { + try { + mContext.unbindService(mServiceConnection); + } catch (IllegalArgumentException e) { + // Do nothing and fail silently since an error here indicates that + // binding never succeeded in the first place. + } + } + + + /** + * Adds a mapping between a string of text and a sound resource in a + * package. + * + * @see #TTS.speak(String text, int queueMode, String[] params) + * + * @param text + * Example: "south_south_east"
        + * + * @param packagename + * Pass the packagename of the application that contains the + * resource. If the resource is in your own application (this is + * the most common case), then put the packagename of your + * application here.
        + * Example: "com.google.marvin.compass"
        + * The packagename can be found in the AndroidManifest.xml of + * your application. + *

        + * <manifest xmlns:android="..." + * package="com.google.marvin.compass"> + *

        + * + * @param resourceId + * Example: R.raw.south_south_east + * + * @return Code indicating success or failure. See TTS_ERROR and TTS_SUCCESS. + */ + public int addSpeech(String text, String packagename, int resourceId) { + synchronized(mStartLock) { + if (!mStarted) { + return TTS_ERROR; + } + try { + mITts.addSpeech(text, packagename, resourceId); + return TTS_SUCCESS; + } catch (RemoteException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (NullPointerException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (IllegalStateException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } + return TTS_ERROR; + } + } + + + /** + * Adds a mapping between a string of text and a sound file. Using this, it + * is possible to add custom pronounciations for text. + * + * @param text + * The string of text + * @param filename + * The full path to the sound file (for example: + * "/sdcard/mysounds/hello.wav") + * + * @return Code indicating success or failure. See TTS_ERROR and TTS_SUCCESS. + */ + public int addSpeech(String text, String filename) { + synchronized (mStartLock) { + if (!mStarted) { + return TTS_ERROR; + } + try { + mITts.addSpeechFile(text, filename); + return TTS_SUCCESS; + } catch (RemoteException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (NullPointerException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (IllegalStateException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } + return TTS_ERROR; + } + } + + + /** + * Speaks the string using the specified queuing strategy and speech + * parameters. Note that the speech parameters are not universally supported + * by all engines and will be treated as a hint. The TTS library will try to + * fulfill these parameters as much as possible, but there is no guarantee + * that the voice used will have the properties specified. + * + * @param text + * The string of text to be spoken. + * @param queueMode + * The queuing strategy to use. + * See TTS_QUEUE_ADD and TTS_QUEUE_FLUSH. + * @param params + * The hashmap of speech parameters to be used. + * + * @return Code indicating success or failure. See TTS_ERROR and TTS_SUCCESS. + */ + public int speak(String text, int queueMode, HashMap params) + { + synchronized (mStartLock) { + int result = TTS_ERROR; + Log.i("TTS received: ", text); + if (!mStarted) { + return result; + } + try { + // TODO support extra parameters, passing cache of current parameters for the moment + result = mITts.speak(text, queueMode, mCachedParams); + } catch (RemoteException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (NullPointerException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (IllegalStateException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } finally { + return result; + } + } + } + + + /** + * Plays the earcon using the specified queueing mode and parameters. + * + * @param earcon + * The earcon that should be played + * @param queueMode + * See TTS_QUEUE_ADD and TTS_QUEUE_FLUSH. + * @param params + * The hashmap of parameters to be used. + * + * @return Code indicating success or failure. See TTS_ERROR and TTS_SUCCESS. + */ + public int playEarcon(String earcon, int queueMode, + HashMap params) { + synchronized (mStartLock) { + int result = TTS_ERROR; + if (!mStarted) { + return result; + } + try { + // TODO support extra parameters, passing null for the moment + result = mITts.playEarcon(earcon, queueMode, null); + } catch (RemoteException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (NullPointerException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (IllegalStateException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } finally { + return result; + } + } + } + + /** + * Plays silence for the specified amount of time using the specified + * queue mode. + * + * @param durationInMs + * A long that indicates how long the silence should last. + * @param queueMode + * See TTS_QUEUE_ADD and TTS_QUEUE_FLUSH. + * + * @return Code indicating success or failure. See TTS_ERROR and TTS_SUCCESS. + */ + public int playSilence(long durationInMs, int queueMode) { + synchronized (mStartLock) { + int result = TTS_ERROR; + if (!mStarted) { + return result; + } + try { + // TODO support extra parameters, passing cache of current parameters for the moment + result = mITts.playSilence(durationInMs, queueMode, mCachedParams); + } catch (RemoteException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (NullPointerException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (IllegalStateException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } finally { + return result; + } + } + } + + + /** + * Returns whether or not the TTS is busy speaking. + * + * @return Whether or not the TTS is busy speaking. + */ + public boolean isSpeaking() { + synchronized (mStartLock) { + if (!mStarted) { + return false; + } + try { + return mITts.isSpeaking(); + } catch (RemoteException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (NullPointerException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (IllegalStateException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } + return false; + } + } + + + /** + * Stops speech from the TTS. + * + * @return Code indicating success or failure. See TTS_ERROR and TTS_SUCCESS. + */ + public int stop() { + synchronized (mStartLock) { + int result = TTS_ERROR; + if (!mStarted) { + return result; + } + try { + result = mITts.stop(); + } catch (RemoteException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (NullPointerException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (IllegalStateException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } finally { + return result; + } + } + } + + + /** + * Sets the speech rate for the TTS engine. + * + * Note that the speech rate is not universally supported by all engines and + * will be treated as a hint. The TTS library will try to use the specified + * speech rate, but there is no guarantee. + * This has no effect on any pre-recorded speech. + * + * @param speechRate + * The speech rate for the TTS engine. 1 is the normal speed, + * lower values slow down the speech (0.5 is half the normal speech rate), + * greater values accelerate it (2 is twice the normal speech rate). + * + * @return Code indicating success or failure. See TTS_ERROR and TTS_SUCCESS. + */ + public int setSpeechRate(float speechRate) { + synchronized (mStartLock) { + int result = TTS_ERROR; + if (!mStarted) { + return result; + } + try { + if (speechRate > 0) { + int rate = (int)(speechRate*100); + mCachedParams[Engine.TTS_PARAM_POSITION_RATE + 1] = String.valueOf(rate); + result = mITts.setSpeechRate(rate); + } + } catch (RemoteException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } finally { + return result; + } + } + } + + + /** + * Sets the speech pitch for the TTS engine. + * + * Note that the pitch is not universally supported by all engines and + * will be treated as a hint. The TTS library will try to use the specified + * pitch, but there is no guarantee. + * This has no effect on any pre-recorded speech. + * + * @param pitch + * The pitch for the TTS engine. 1 is the normal pitch, + * lower values lower the tone of the synthesized voice, + * greater values increase it. + * + * @return Code indicating success or failure. See TTS_ERROR and TTS_SUCCESS. + */ + public int setPitch(float pitch) { + synchronized (mStartLock) { + int result = TTS_ERROR; + if (!mStarted) { + return result; + } + try { + if (pitch > 0) { + result = mITts.setPitch((int)(pitch*100)); + } + } catch (RemoteException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } finally { + return result; + } + } + } + + + /** + * Sets the language for the TTS engine. + * + * Note that the language is not universally supported by all engines and + * will be treated as a hint. The TTS library will try to use the specified + * language as represented by the Locale, but there is no guarantee. + * + * @param loc + * The locale describing the language to be used. + * + * @return Code indicating the support status for the locale. See the TTS_LANG_ codes. + */ + public int setLanguage(Locale loc) { + synchronized (mStartLock) { + int result = TTS_LANG_NOT_SUPPORTED; + if (!mStarted) { + return result; + } + try { + mCachedParams[Engine.TTS_PARAM_POSITION_LANGUAGE + 1] = loc.getISO3Language(); + mCachedParams[Engine.TTS_PARAM_POSITION_COUNTRY + 1] = loc.getISO3Country(); + mCachedParams[Engine.TTS_PARAM_POSITION_VARIANT + 1] = loc.getVariant(); + result = mITts.setLanguage(mCachedParams[Engine.TTS_PARAM_POSITION_LANGUAGE + 1], + mCachedParams[Engine.TTS_PARAM_POSITION_COUNTRY + 1], + mCachedParams[Engine.TTS_PARAM_POSITION_VARIANT + 1] ); + // TTS died; restart it. + mStarted = false; + initTts(); + } finally { + return result; + } + } + } + + + /** + * Returns a Locale instance describing the language currently being used by the TTS engine. + * @return language, country (if any) and variant (if any) used by the engine stored in a Locale + * instance, or null is the TTS engine has failed. + */ + public Locale getLanguage() { + synchronized (mStartLock) { + if (!mStarted) { + return null; + } + try { + String[] locStrings = mITts.getLanguage(); + if (locStrings.length == 3) { + return new Locale(locStrings[0], locStrings[1], locStrings[2]); + } else { + return null; + } + } catch (RemoteException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } + return null; + } + } + + /** + * Checks if the specified language as represented by the Locale is available. + * + * @param loc + * The Locale describing the language to be used. + * + * @return one of TTS_LANG_NOT_SUPPORTED, TTS_LANG_MISSING_DATA, TTS_LANG_AVAILABLE, + * TTS_LANG_COUNTRY_AVAILABLE, TTS_LANG_COUNTRY_VAR_AVAILABLE. + */ + public int isLanguageAvailable(Locale loc) { + synchronized (mStartLock) { + int result = TTS_LANG_NOT_SUPPORTED; + if (!mStarted) { + return result; + } + try { + result = mITts.isLanguageAvailable(loc.getISO3Language(), + loc.getISO3Country(), loc.getVariant()); + } catch (RemoteException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } finally { + return result; + } + } + } + + + /** + * Synthesizes the given text to a file using the specified parameters. + * + * @param text + * The String of text that should be synthesized + * @param params + * A hashmap of parameters. + * @param filename + * The string that gives the full output filename; it should be + * something like "/sdcard/myappsounds/mysound.wav". + * + * @return Code indicating success or failure. See TTS_ERROR and TTS_SUCCESS. + */ + public int synthesizeToFile(String text, HashMap params, + String filename) { + synchronized (mStartLock) { + int result = TTS_ERROR; + if (!mStarted) { + return result; + } + try { + // TODO support extra parameters, passing null for the moment + if (mITts.synthesizeToFile(text, null, filename)){ + result = TTS_SUCCESS; + } + } catch (RemoteException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (NullPointerException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } catch (IllegalStateException e) { + // TTS died; restart it. + mStarted = false; + initTts(); + } finally { + return result; + } + } + } + +} diff --git a/core/java/android/syncml/pim/PropertyNode.java b/core/java/android/syncml/pim/PropertyNode.java index cc5249905efe..983ecb8a37f2 100644 --- a/core/java/android/syncml/pim/PropertyNode.java +++ b/core/java/android/syncml/pim/PropertyNode.java @@ -17,12 +17,16 @@ package android.syncml.pim; import android.content.ContentValues; -import android.util.Log; +import org.apache.commons.codec.binary.Base64; + +import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.Map.Entry; +import java.util.regex.Pattern; public class PropertyNode { @@ -52,7 +56,9 @@ public class PropertyNode { public Set propGroupSet; public PropertyNode() { + propName = ""; propValue = ""; + propValue_vector = new ArrayList(); paramMap = new ContentValues(); paramMap_TYPE = new HashSet(); propGroupSet = new HashSet(); @@ -62,13 +68,21 @@ public class PropertyNode { String propName, String propValue, List propValue_vector, byte[] propValue_bytes, ContentValues paramMap, Set paramMap_TYPE, Set propGroupSet) { - this.propName = propName; + if (propName != null) { + this.propName = propName; + } else { + this.propName = ""; + } if (propValue != null) { this.propValue = propValue; } else { this.propValue = ""; } - this.propValue_vector = propValue_vector; + if (propValue_vector != null) { + this.propValue_vector = propValue_vector; + } else { + this.propValue_vector = new ArrayList(); + } this.propValue_bytes = propValue_bytes; if (paramMap != null) { this.paramMap = paramMap; @@ -117,17 +131,9 @@ public class PropertyNode { // decoded by BASE64 or QUOTED-PRINTABLE. When the size of propValue_vector // is 1, the encoded value is stored in propValue, so we do not have to // check it. - if (propValue_vector != null) { - // Log.d("@@@", "===" + propValue_vector + ", " + node.propValue_vector); - return (propValue_vector.equals(node.propValue_vector) || - (propValue_vector.size() == 1)); - } else if (node.propValue_vector != null) { - // Log.d("@@@", "===" + propValue_vector + ", " + node.propValue_vector); - return (node.propValue_vector.equals(propValue_vector) || - (node.propValue_vector.size() == 1)); - } else { - return true; - } + return (propValue_vector.equals(node.propValue_vector) || + propValue_vector.size() == 1 || + node.propValue_vector.size() == 1); } } @@ -154,4 +160,164 @@ public class PropertyNode { builder.append(propValue); return builder.toString(); } + + /** + * Encode this object into a string which can be decoded. + */ + public String encode() { + // PropertyNode#toString() is for reading, not for parsing in the future. + // We construct appropriate String here. + StringBuilder builder = new StringBuilder(); + if (propName.length() > 0) { + builder.append("propName:["); + builder.append(propName); + builder.append("],"); + } + int size = propGroupSet.size(); + if (size > 0) { + Set set = propGroupSet; + builder.append("propGroup:["); + int i = 0; + for (String group : set) { + // We do not need to double quote groups. + // group = 1*(ALPHA / DIGIT / "-") + builder.append(group); + if (i < size - 1) { + builder.append(","); + } + i++; + } + builder.append("],"); + } + + if (paramMap.size() > 0 || paramMap_TYPE.size() > 0) { + ContentValues values = paramMap; + builder.append("paramMap:["); + size = paramMap.size(); + int i = 0; + for (Entry entry : values.valueSet()) { + // Assuming param-key does not contain NON-ASCII nor symbols. + // + // According to vCard 3.0: + // param-name = iana-token / x-name + builder.append(entry.getKey()); + + // param-value may contain any value including NON-ASCIIs. + // We use the following replacing rule. + // \ -> \\ + // , -> \, + // In String#replaceAll(), "\\\\" means a single backslash. + builder.append("="); + builder.append(entry.getValue().toString() + .replaceAll("\\\\", "\\\\\\\\") + .replaceAll(",", "\\\\,")); + if (i < size -1) { + builder.append(","); + } + i++; + } + + Set set = paramMap_TYPE; + size = paramMap_TYPE.size(); + if (i > 0 && size > 0) { + builder.append(","); + } + i = 0; + for (String type : set) { + builder.append("TYPE="); + builder.append(type + .replaceAll("\\\\", "\\\\\\\\") + .replaceAll(",", "\\\\,")); + if (i < size - 1) { + builder.append(","); + } + i++; + } + builder.append("],"); + } + + size = propValue_vector.size(); + if (size > 0) { + builder.append("propValue:["); + List list = propValue_vector; + for (int i = 0; i < size; i++) { + builder.append(list.get(i) + .replaceAll("\\\\", "\\\\\\\\") + .replaceAll(",", "\\\\,")); + if (i < size -1) { + builder.append(","); + } + } + builder.append("],"); + } + + return builder.toString(); + } + + public static PropertyNode decode(String encodedString) { + PropertyNode propertyNode = new PropertyNode(); + String trimed = encodedString.trim(); + if (trimed.length() == 0) { + return propertyNode; + } + String[] elems = trimed.split("],"); + + for (String elem : elems) { + int index = elem.indexOf('['); + String name = elem.substring(0, index - 1); + Pattern pattern = Pattern.compile("(? paramMap_TYPE = propertyNode.paramMap_TYPE; + for (String value : values) { + String[] tmp = value.split("=", 2); + String mapKey = tmp[0]; + // \, -> , + // \\ -> \ + // In String#replaceAll(), "\\\\" means a single backslash. + String mapValue = + tmp[1].replaceAll("\\\\,", ",").replaceAll("\\\\\\\\", "\\\\"); + if (mapKey.equalsIgnoreCase("TYPE")) { + paramMap_TYPE.add(mapValue); + } else { + paramMap.put(mapKey, mapValue); + } + } + } else if (name.equals("propValue")) { + StringBuilder builder = new StringBuilder(); + List list = propertyNode.propValue_vector; + int length = values.length; + for (int i = 0; i < length; i++) { + String normValue = values[i] + .replaceAll("\\\\,", ",") + .replaceAll("\\\\\\\\", "\\\\"); + list.add(normValue); + builder.append(normValue); + if (i < length - 1) { + builder.append(";"); + } + } + propertyNode.propValue = builder.toString(); + } + } + + // At this time, QUOTED-PRINTABLE is already decoded to Java String. + // We just need to decode BASE64 String to binary. + String encoding = propertyNode.paramMap.getAsString("ENCODING"); + if (encoding != null && + (encoding.equalsIgnoreCase("BASE64") || + encoding.equalsIgnoreCase("B"))) { + propertyNode.propValue_bytes = + Base64.decodeBase64(propertyNode.propValue_vector.get(0).getBytes()); + } + + return propertyNode; + } } diff --git a/core/java/android/syncml/pim/VBuilderCollection.java b/core/java/android/syncml/pim/VBuilderCollection.java new file mode 100644 index 000000000000..f09c1c49445c --- /dev/null +++ b/core/java/android/syncml/pim/VBuilderCollection.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.syncml.pim; + +import java.util.Collection; +import java.util.List; + +public class VBuilderCollection implements VBuilder { + + private final Collection mVBuilderCollection; + + public VBuilderCollection(Collection vBuilderCollection) { + mVBuilderCollection = vBuilderCollection; + } + + public Collection getVBuilderCollection() { + return mVBuilderCollection; + } + + public void start() { + for (VBuilder builder : mVBuilderCollection) { + builder.start(); + } + } + + public void end() { + for (VBuilder builder : mVBuilderCollection) { + builder.end(); + } + } + + public void startRecord(String type) { + for (VBuilder builder : mVBuilderCollection) { + builder.startRecord(type); + } + } + + public void endRecord() { + for (VBuilder builder : mVBuilderCollection) { + builder.endRecord(); + } + } + + public void startProperty() { + for (VBuilder builder : mVBuilderCollection) { + builder.startProperty(); + } + } + + + public void endProperty() { + for (VBuilder builder : mVBuilderCollection) { + builder.endProperty(); + } + } + + public void propertyGroup(String group) { + for (VBuilder builder : mVBuilderCollection) { + builder.propertyGroup(group); + } + } + + public void propertyName(String name) { + for (VBuilder builder : mVBuilderCollection) { + builder.propertyName(name); + } + } + + public void propertyParamType(String type) { + for (VBuilder builder : mVBuilderCollection) { + builder.propertyParamType(type); + } + } + + public void propertyParamValue(String value) { + for (VBuilder builder : mVBuilderCollection) { + builder.propertyParamValue(value); + } + } + + public void propertyValues(List values) { + for (VBuilder builder : mVBuilderCollection) { + builder.propertyValues(values); + } + } +} diff --git a/core/java/android/syncml/pim/VDataBuilder.java b/core/java/android/syncml/pim/VDataBuilder.java index 8c67cf5bfa03..f6e5b653125f 100644 --- a/core/java/android/syncml/pim/VDataBuilder.java +++ b/core/java/android/syncml/pim/VDataBuilder.java @@ -17,8 +17,10 @@ package android.syncml.pim; import android.content.ContentValues; +import android.util.CharsetUtils; import android.util.Log; +import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.net.QuotedPrintableCodec; @@ -26,9 +28,7 @@ import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.util.ArrayList; -import java.util.Collection; import java.util.List; -import java.util.Vector; /** * Store the parse result to custom datastruct: VNode, PropertyNode @@ -38,7 +38,13 @@ import java.util.Vector; */ public class VDataBuilder implements VBuilder { static private String LOG_TAG = "VDATABuilder"; - + + /** + * If there's no other information available, this class uses this charset for encoding + * byte arrays. + */ + static public String DEFAULT_CHARSET = "UTF-8"; + /** type=VNode */ public List vNodeList = new ArrayList(); private int mNodeListPos = 0; @@ -47,34 +53,74 @@ public class VDataBuilder implements VBuilder { private String mCurrentParamType; /** - * Assumes that each String can be encoded into byte array using this encoding. + * The charset using which VParser parses the text. + */ + private String mSourceCharset; + + /** + * The charset with which byte array is encoded to String. */ - private String mCharset; + private String mTargetCharset; private boolean mStrictLineBreakParsing; public VDataBuilder() { - mCharset = "ISO-8859-1"; - mStrictLineBreakParsing = false; + this(VParser.DEFAULT_CHARSET, DEFAULT_CHARSET, false); } - public VDataBuilder(String encoding, boolean strictLineBreakParsing) { - mCharset = encoding; - mStrictLineBreakParsing = strictLineBreakParsing; + public VDataBuilder(String charset, boolean strictLineBreakParsing) { + this(null, charset, strictLineBreakParsing); } + /** + * @hide sourceCharset is temporal. + */ + public VDataBuilder(String sourceCharset, String targetCharset, + boolean strictLineBreakParsing) { + if (sourceCharset != null) { + mSourceCharset = sourceCharset; + } else { + mSourceCharset = VParser.DEFAULT_CHARSET; + } + if (targetCharset != null) { + mTargetCharset = targetCharset; + } else { + mTargetCharset = DEFAULT_CHARSET; + } + mStrictLineBreakParsing = strictLineBreakParsing; + } + public void start() { } public void end() { } + // Note: I guess that this code assumes the Record may nest like this: + // START:VPOS + // ... + // START:VPOS2 + // ... + // END:VPOS2 + // ... + // END:VPOS + // + // However the following code has a bug. + // When error occurs after calling startRecord(), the entry which is probably + // the cause of the error remains to be in vNodeList, while endRecord() is not called. + // + // I leave this code as is since I'm not familiar with vcalendar specification. + // But I believe we should refactor this code in the future. + // Until this, the last entry has to be removed when some error occurs. public void startRecord(String type) { + VNode vnode = new VNode(); vnode.parseStatus = 1; vnode.VName = type; + // I feel this should be done in endRecord(), but it cannot be done because of + // the reason above. vNodeList.add(vnode); - mNodeListPos = vNodeList.size()-1; + mNodeListPos = vNodeList.size() - 1; mCurrentVNode = vNodeList.get(mNodeListPos); } @@ -90,15 +136,14 @@ public class VDataBuilder implements VBuilder { } public void startProperty() { - // System.out.println("+ startProperty. "); + mCurrentPropNode = new PropertyNode(); } public void endProperty() { - // System.out.println("- endProperty. "); + mCurrentVNode.propList.add(mCurrentPropNode); } public void propertyName(String name) { - mCurrentPropNode = new PropertyNode(); mCurrentPropNode.propName = name; } @@ -122,139 +167,145 @@ public class VDataBuilder implements VBuilder { mCurrentParamType = null; } - private String encodeString(String originalString, String targetEncoding) { - Charset charset = Charset.forName(mCharset); + private String encodeString(String originalString, String targetCharset) { + if (mSourceCharset.equalsIgnoreCase(targetCharset)) { + return originalString; + } + Charset charset = Charset.forName(mSourceCharset); ByteBuffer byteBuffer = charset.encode(originalString); // byteBuffer.array() "may" return byte array which is larger than // byteBuffer.remaining(). Here, we keep on the safe side. byte[] bytes = new byte[byteBuffer.remaining()]; byteBuffer.get(bytes); try { - return new String(bytes, targetEncoding); + return new String(bytes, targetCharset); } catch (UnsupportedEncodingException e) { - return null; + Log.e(LOG_TAG, "Failed to encode: charset=" + targetCharset); + return new String(bytes); } } - public void propertyValues(List values) { - ContentValues paramMap = mCurrentPropNode.paramMap; - - String charsetString = paramMap.getAsString("CHARSET"); - - boolean setupParamValues = false; - //decode value string to propValue_bytes - if (paramMap.containsKey("ENCODING")) { - String encoding = paramMap.getAsString("ENCODING"); - if (encoding.equalsIgnoreCase("BASE64") || - encoding.equalsIgnoreCase("B")) { - if (values.size() > 1) { - Log.e(LOG_TAG, - ("BASE64 encoding is used while " + - "there are multiple values (" + values.size())); - } + private String handleOneValue(String value, String targetCharset, String encoding) { + if (encoding != null) { + if (encoding.equals("BASE64") || encoding.equals("B")) { + // Assume BASE64 is used only when the number of values is 1. mCurrentPropNode.propValue_bytes = - Base64.decodeBase64(values.get(0). - replaceAll(" ","").replaceAll("\t",""). - replaceAll("\r\n",""). - getBytes()); - } - - if(encoding.equalsIgnoreCase("QUOTED-PRINTABLE")){ - // if CHARSET is defined, we translate each String into the Charset. - List tmpValues = new ArrayList(); - Vector byteVector = new Vector(); - int size = 0; - try{ - for (String value : values) { - String quotedPrintable = value - .replaceAll("= ", " ").replaceAll("=\t", "\t"); - String[] lines; - if (mStrictLineBreakParsing) { - lines = quotedPrintable.split("\r\n"); - } else { - lines = quotedPrintable - .replace("\r\n", "\n").replace("\r", "\n").split("\n"); - } - StringBuilder builder = new StringBuilder(); - for (String line : lines) { - if (line.endsWith("=")) { - line = line.substring(0, line.length() - 1); - } - builder.append(line); - } - byte[] bytes = QuotedPrintableCodec.decodeQuotedPrintable( - builder.toString().getBytes()); - if (charsetString != null) { - try { - tmpValues.add(new String(bytes, charsetString)); - } catch (UnsupportedEncodingException e) { - Log.e(LOG_TAG, "Failed to encode: charset=" + charsetString); - tmpValues.add(new String(bytes)); + Base64.decodeBase64(value.getBytes()); + return value; + } else if (encoding.equals("QUOTED-PRINTABLE")) { + String quotedPrintable = value + .replaceAll("= ", " ").replaceAll("=\t", "\t"); + String[] lines; + if (mStrictLineBreakParsing) { + lines = quotedPrintable.split("\r\n"); + } else { + StringBuilder builder = new StringBuilder(); + int length = quotedPrintable.length(); + ArrayList list = new ArrayList(); + for (int i = 0; i < length; i++) { + char ch = quotedPrintable.charAt(i); + if (ch == '\n') { + list.add(builder.toString()); + builder = new StringBuilder(); + } else if (ch == '\r') { + list.add(builder.toString()); + builder = new StringBuilder(); + if (i < length - 1) { + char nextCh = quotedPrintable.charAt(i + 1); + if (nextCh == '\n') { + i++; + } } } else { - tmpValues.add(new String(bytes)); - } - byteVector.add(bytes); - size += bytes.length; - } // for (String value : values) { - mCurrentPropNode.propValue_vector = tmpValues; - mCurrentPropNode.propValue = listToString(tmpValues); - - mCurrentPropNode.propValue_bytes = new byte[size]; - - { - byte[] tmpBytes = mCurrentPropNode.propValue_bytes; - int index = 0; - for (byte[] bytes : byteVector) { - int length = bytes.length; - for (int i = 0; i < length; i++, index++) { - tmpBytes[index] = bytes[i]; - } + builder.append(ch); } } - setupParamValues = true; - } catch(Exception e) { - Log.e(LOG_TAG, "Failed to decode quoted-printable: " + e); + String finalLine = builder.toString(); + if (finalLine.length() > 0) { + list.add(finalLine); + } + lines = list.toArray(new String[0]); } - } // QUOTED-PRINTABLE - } // ENCODING - - if (!setupParamValues) { - // if CHARSET is defined, we translate each String into the Charset. - if (charsetString != null) { - List tmpValues = new ArrayList(); - for (String value : values) { - String result = encodeString(value, charsetString); - if (result != null) { - tmpValues.add(result); - } else { - Log.e(LOG_TAG, "Failed to encode: charset=" + charsetString); - tmpValues.add(value); + StringBuilder builder = new StringBuilder(); + for (String line : lines) { + if (line.endsWith("=")) { + line = line.substring(0, line.length() - 1); } + builder.append(line); + } + byte[] bytes; + try { + bytes = builder.toString().getBytes(mSourceCharset); + } catch (UnsupportedEncodingException e1) { + Log.e(LOG_TAG, "Failed to encode: charset=" + mSourceCharset); + bytes = builder.toString().getBytes(); + } + + try { + bytes = QuotedPrintableCodec.decodeQuotedPrintable(bytes); + } catch (DecoderException e) { + Log.e(LOG_TAG, "Failed to decode quoted-printable: " + e); + return ""; + } + + try { + return new String(bytes, targetCharset); + } catch (UnsupportedEncodingException e) { + Log.e(LOG_TAG, "Failed to encode: charset=" + targetCharset); + return new String(bytes); } - values = tmpValues; } - - mCurrentPropNode.propValue_vector = values; - mCurrentPropNode.propValue = listToString(values); + // Unknown encoding. Fall back to default. } - mCurrentVNode.propList.add(mCurrentPropNode); + return encodeString(value, targetCharset); } - - private String listToString(Collection list){ - StringBuilder typeListB = new StringBuilder(); - for (String type : list) { - typeListB.append(type).append(";"); + + public void propertyValues(List values) { + if (values == null || values.size() == 0) { + mCurrentPropNode.propValue_bytes = null; + mCurrentPropNode.propValue_vector.clear(); + mCurrentPropNode.propValue_vector.add(""); + mCurrentPropNode.propValue = ""; + return; + } + + ContentValues paramMap = mCurrentPropNode.paramMap; + + String targetCharset = CharsetUtils.nameForDefaultVendor(paramMap.getAsString("CHARSET")); + String encoding = paramMap.getAsString("ENCODING"); + + if (targetCharset == null || targetCharset.length() == 0) { + targetCharset = mTargetCharset; + } + + for (String value : values) { + mCurrentPropNode.propValue_vector.add( + handleOneValue(value, targetCharset, encoding)); } - int len = typeListB.length(); - if (len > 0 && typeListB.charAt(len - 1) == ';') { - return typeListB.substring(0, len - 1); + + mCurrentPropNode.propValue = listToString(mCurrentPropNode.propValue_vector); + } + + private String listToString(List list){ + int size = list.size(); + if (size > 1) { + StringBuilder typeListB = new StringBuilder(); + for (String type : list) { + typeListB.append(type).append(";"); + } + int len = typeListB.length(); + if (len > 0 && typeListB.charAt(len - 1) == ';') { + return typeListB.substring(0, len - 1); + } + return typeListB.toString(); + } else if (size == 1) { + return list.get(0); + } else { + return ""; } - return typeListB.toString(); } public String getResult(){ return null; } } - diff --git a/core/java/android/syncml/pim/VParser.java b/core/java/android/syncml/pim/VParser.java index df93f38e9e38..57c5f7a5cfd3 100644 --- a/core/java/android/syncml/pim/VParser.java +++ b/core/java/android/syncml/pim/VParser.java @@ -26,6 +26,9 @@ import java.io.UnsupportedEncodingException; * */ abstract public class VParser { + // Assume that "iso-8859-1" is able to map "all" 8bit characters to some unicode and + // decode the unicode to the original charset. If not, this setting will cause some bug. + public static String DEFAULT_CHARSET = "iso-8859-1"; /** * The buffer used to store input stream @@ -95,6 +98,20 @@ abstract public class VParser { return (mBuffer.length() == sum); } + /** + * Parse the given stream with the default encoding. + * + * @param is + * The source to parse. + * @param builder + * The v builder which used to construct data. + * @return Return true for success, otherwise false. + * @throws IOException + */ + public boolean parse(InputStream is, VBuilder builder) throws IOException { + return parse(is, DEFAULT_CHARSET, builder); + } + /** * Copy the content of input stream and filter the "folding" */ diff --git a/core/java/android/syncml/pim/vcard/ContactStruct.java b/core/java/android/syncml/pim/vcard/ContactStruct.java index 8d9b7fab24fb..ecd719da069d 100644 --- a/core/java/android/syncml/pim/vcard/ContactStruct.java +++ b/core/java/android/syncml/pim/vcard/ContactStruct.java @@ -16,45 +16,103 @@ package android.syncml.pim.vcard; -import java.util.List; +import android.content.AbstractSyncableContentProvider; +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.ContentValues; +import android.net.Uri; +import android.provider.Contacts; +import android.provider.Contacts.ContactMethods; +import android.provider.Contacts.Extensions; +import android.provider.Contacts.GroupMembership; +import android.provider.Contacts.Organizations; +import android.provider.Contacts.People; +import android.provider.Contacts.Phones; +import android.provider.Contacts.Photos; +import android.syncml.pim.PropertyNode; +import android.syncml.pim.VNode; +import android.telephony.PhoneNumberUtils; +import android.text.TextUtils; +import android.util.Log; + import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; /** - * The parameter class of VCardCreator. + * The parameter class of VCardComposer. * This class standy by the person-contact in * Android system, we must use this class instance as parameter to transmit to - * VCardCreator so that create vCard string. + * VCardComposer so that create vCard string. */ // TODO: rename the class name, next step public class ContactStruct { - public String company; + private static final String LOG_TAG = "ContactStruct"; + + // Note: phonetic name probably should be "LAST FIRST MIDDLE" for European languages, and + // space should be added between each element while it should not be in Japanese. + // But unfortunately, we currently do not have the data and are not sure whether we should + // support European version of name ordering. + // + // TODO: Implement the logic described above if we really need European version of + // phonetic name handling. Also, adding the appropriate test case of vCard would be + // highly appreciated. + public static final int NAME_ORDER_TYPE_ENGLISH = 0; + public static final int NAME_ORDER_TYPE_JAPANESE = 1; + /** MUST exist */ public String name; + public String phoneticName; /** maybe folding */ - public String notes; + public List notes = new ArrayList(); /** maybe folding */ public String title; /** binary bytes of pic. */ public byte[] photoBytes; - /** mime_type col of images table */ + /** The type of Photo (e.g. JPEG, BMP, etc.) */ public String photoType; /** Only for GET. Use addPhoneList() to PUT. */ public List phoneList; /** Only for GET. Use addContactmethodList() to PUT. */ public List contactmethodList; + /** Only for GET. Use addOrgList() to PUT. */ + public List organizationList; + /** Only for GET. Use addExtension() to PUT */ + public Map> extensionMap; - public static class PhoneData{ + // Use organizationList instead when handling ORG. + @Deprecated + public String company; + + public static class PhoneData { + public int type; /** maybe folding */ public String data; - public String type; public String label; + public boolean isPrimary; } - public static class ContactMethod{ - public String kind; - public String type; + public static class ContactMethod { + // Contacts.KIND_EMAIL, Contacts.KIND_POSTAL + public int kind; + // e.g. Contacts.ContactMethods.TYPE_HOME, Contacts.PhoneColumns.TYPE_HOME + // If type == Contacts.PhoneColumns.TYPE_CUSTOM, label is used. + public int type; public String data; + // Used only when TYPE is TYPE_CUSTOM. public String label; + public boolean isPrimary; + } + + public static class OrganizationData { + public int type; + public String companyName; + public String positionName; + public boolean isPrimary; } /** @@ -63,29 +121,858 @@ public class ContactStruct { * @param type type col of content://contacts/phones * @param label lable col of content://contacts/phones */ - public void addPhone(String data, String type, String label){ - if(phoneList == null) + public void addPhone(int type, String data, String label, boolean isPrimary){ + if (phoneList == null) { phoneList = new ArrayList(); - PhoneData st = new PhoneData(); - st.data = data; - st.type = type; - st.label = label; - phoneList.add(st); + } + PhoneData phoneData = new PhoneData(); + phoneData.type = type; + + StringBuilder builder = new StringBuilder(); + String trimed = data.trim(); + int length = trimed.length(); + for (int i = 0; i < length; i++) { + char ch = trimed.charAt(i); + if (('0' <= ch && ch <= '9') || (i == 0 && ch == '+')) { + builder.append(ch); + } + } + phoneData.data = PhoneNumberUtils.formatNumber(builder.toString()); + phoneData.label = label; + phoneData.isPrimary = isPrimary; + phoneList.add(phoneData); } + /** * Add a contactmethod info to contactmethodList. - * @param data contact data + * @param kind integer value defined in Contacts.java + * (e.g. Contacts.KIND_EMAIL) * @param type type col of content://contacts/contact_methods + * @param data contact data + * @param label extra string used only when kind is Contacts.KIND_CUSTOM. */ - public void addContactmethod(String kind, String data, String type, - String label){ - if(contactmethodList == null) + public void addContactmethod(int kind, int type, String data, + String label, boolean isPrimary){ + if (contactmethodList == null) { contactmethodList = new ArrayList(); - ContactMethod st = new ContactMethod(); - st.kind = kind; - st.data = data; - st.type = type; - st.label = label; - contactmethodList.add(st); + } + ContactMethod contactMethod = new ContactMethod(); + contactMethod.kind = kind; + contactMethod.type = type; + contactMethod.data = data; + contactMethod.label = label; + contactMethod.isPrimary = isPrimary; + contactmethodList.add(contactMethod); + } + + /** + * Add a Organization info to organizationList. + */ + public void addOrganization(int type, String companyName, String positionName, + boolean isPrimary) { + if (organizationList == null) { + organizationList = new ArrayList(); + } + OrganizationData organizationData = new OrganizationData(); + organizationData.type = type; + organizationData.companyName = companyName; + organizationData.positionName = positionName; + organizationData.isPrimary = isPrimary; + organizationList.add(organizationData); + } + + /** + * Set "position" value to the appropriate data. If there's more than one + * OrganizationData objects, the value is set to the last one. If there's no + * OrganizationData object, a new OrganizationData is created, whose company name is + * empty. + * + * TODO: incomplete logic. fix this: + * + * e.g. This assumes ORG comes earlier, but TITLE may come earlier like this, though we do not + * know how to handle it in general cases... + * ---- + * TITLE:Software Engineer + * ORG:Google + * ---- + */ + public void setPosition(String positionValue) { + if (organizationList == null) { + organizationList = new ArrayList(); + } + int size = organizationList.size(); + if (size == 0) { + addOrganization(Contacts.OrganizationColumns.TYPE_OTHER, "", null, false); + size = 1; + } + OrganizationData lastData = organizationList.get(size - 1); + lastData.positionName = positionValue; + } + + public void addExtension(PropertyNode propertyNode) { + if (propertyNode.propValue.length() == 0) { + return; + } + // Now store the string into extensionMap. + List list; + String name = propertyNode.propName; + if (extensionMap == null) { + extensionMap = new HashMap>(); + } + if (!extensionMap.containsKey(name)){ + list = new ArrayList(); + extensionMap.put(name, list); + } else { + list = extensionMap.get(name); + } + + list.add(propertyNode.encode()); + } + + private static String getNameFromNProperty(List elems, int nameOrderType) { + // Family, Given, Middle, Prefix, Suffix. (1 - 5) + int size = elems.size(); + if (size > 1) { + StringBuilder builder = new StringBuilder(); + boolean builderIsEmpty = true; + // Prefix + if (size > 3 && elems.get(3).length() > 0) { + builder.append(elems.get(3)); + builderIsEmpty = false; + } + String first, second; + if (nameOrderType == NAME_ORDER_TYPE_JAPANESE) { + first = elems.get(0); + second = elems.get(1); + } else { + first = elems.get(1); + second = elems.get(0); + } + if (first.length() > 0) { + if (!builderIsEmpty) { + builder.append(' '); + } + builder.append(first); + builderIsEmpty = false; + } + // Middle name + if (size > 2 && elems.get(2).length() > 0) { + if (!builderIsEmpty) { + builder.append(' '); + } + builder.append(elems.get(2)); + builderIsEmpty = false; + } + if (second.length() > 0) { + if (!builderIsEmpty) { + builder.append(' '); + } + builder.append(second); + builderIsEmpty = false; + } + // Suffix + if (size > 4 && elems.get(4).length() > 0) { + if (!builderIsEmpty) { + builder.append(' '); + } + builder.append(elems.get(4)); + builderIsEmpty = false; + } + return builder.toString(); + } else if (size == 1) { + return elems.get(0); + } else { + return ""; + } + } + + public static ContactStruct constructContactFromVNode(VNode node, + int nameOrderType) { + if (!node.VName.equals("VCARD")) { + // Impossible in current implementation. Just for safety. + Log.e(LOG_TAG, "Non VCARD data is inserted."); + return null; + } + + // For name, there are three fields in vCard: FN, N, NAME. + // We prefer FN, which is a required field in vCard 3.0 , but not in vCard 2.1. + // Next, we prefer NAME, which is defined only in vCard 3.0. + // Finally, we use N, which is a little difficult to parse. + String fullName = null; + String nameFromNProperty = null; + + // Some vCard has "X-PHONETIC-FIRST-NAME", "X-PHONETIC-MIDDLE-NAME", and + // "X-PHONETIC-LAST-NAME" + String xPhoneticFirstName = null; + String xPhoneticMiddleName = null; + String xPhoneticLastName = null; + + ContactStruct contact = new ContactStruct(); + + // Each Column of four properties has ISPRIMARY field + // (See android.provider.Contacts) + // If false even after the following loop, we choose the first + // entry as a "primary" entry. + boolean prefIsSetAddress = false; + boolean prefIsSetPhone = false; + boolean prefIsSetEmail = false; + boolean prefIsSetOrganization = false; + + for (PropertyNode propertyNode: node.propList) { + String name = propertyNode.propName; + + if (TextUtils.isEmpty(propertyNode.propValue)) { + continue; + } + + if (name.equals("VERSION")) { + // vCard version. Ignore this. + } else if (name.equals("FN")) { + fullName = propertyNode.propValue; + } else if (name.equals("NAME") && fullName == null) { + // Only in vCard 3.0. Use this if FN does not exist. + // Though, note that vCard 3.0 requires FN. + fullName = propertyNode.propValue; + } else if (name.equals("N")) { + nameFromNProperty = getNameFromNProperty(propertyNode.propValue_vector, + nameOrderType); + } else if (name.equals("SORT-STRING")) { + contact.phoneticName = propertyNode.propValue; + } else if (name.equals("SOUND")) { + if (propertyNode.paramMap_TYPE.contains("X-IRMC-N") && + contact.phoneticName == null) { + // Some Japanese mobile phones use this field for phonetic name, + // since vCard 2.1 does not have "SORT-STRING" type. + // Also, in some cases, the field has some ';' in it. + // We remove them. + StringBuilder builder = new StringBuilder(); + String value = propertyNode.propValue; + int length = value.length(); + for (int i = 0; i < length; i++) { + char ch = value.charAt(i); + if (ch != ';') { + builder.append(ch); + } + } + contact.phoneticName = builder.toString(); + } else { + contact.addExtension(propertyNode); + } + } else if (name.equals("ADR")) { + List values = propertyNode.propValue_vector; + boolean valuesAreAllEmpty = true; + for (String value : values) { + if (value.length() > 0) { + valuesAreAllEmpty = false; + break; + } + } + if (valuesAreAllEmpty) { + continue; + } + + int kind = Contacts.KIND_POSTAL; + int type = -1; + String label = ""; + boolean isPrimary = false; + for (String typeString : propertyNode.paramMap_TYPE) { + if (typeString.equals("PREF") && !prefIsSetAddress) { + // Only first "PREF" is considered. + prefIsSetAddress = true; + isPrimary = true; + } else if (typeString.equalsIgnoreCase("HOME")) { + type = Contacts.ContactMethodsColumns.TYPE_HOME; + label = ""; + } else if (typeString.equalsIgnoreCase("WORK") || + typeString.equalsIgnoreCase("COMPANY")) { + // "COMPANY" seems emitted by Windows Mobile, which is not + // specifically supported by vCard 2.1. We assume this is same + // as "WORK". + type = Contacts.ContactMethodsColumns.TYPE_WORK; + label = ""; + } else if (typeString.equalsIgnoreCase("POSTAL")) { + kind = Contacts.KIND_POSTAL; + } else if (typeString.equalsIgnoreCase("PARCEL") || + typeString.equalsIgnoreCase("DOM") || + typeString.equalsIgnoreCase("INTL")) { + // We do not have a kind or type matching these. + // TODO: fix this. We may need to split entries into two. + // (e.g. entries for KIND_POSTAL and KIND_PERCEL) + } else if (typeString.toUpperCase().startsWith("X-") && + type < 0) { + type = Contacts.ContactMethodsColumns.TYPE_CUSTOM; + label = typeString.substring(2); + } else if (type < 0) { + // vCard 3.0 allows iana-token. Also some vCard 2.1 exporters + // emit non-standard types. We do not handle their values now. + type = Contacts.ContactMethodsColumns.TYPE_CUSTOM; + label = typeString; + } + } + // We use "HOME" as default + if (type < 0) { + type = Contacts.ContactMethodsColumns.TYPE_HOME; + } + + // adr-value = 0*6(text-value ";") text-value + // ; PO Box, Extended Address, Street, Locality, Region, Postal + // ; Code, Country Name + String address; + List list = propertyNode.propValue_vector; + int size = list.size(); + if (size > 1) { + StringBuilder builder = new StringBuilder(); + boolean builderIsEmpty = true; + if (Locale.getDefault().getCountry().equals(Locale.JAPAN.getCountry())) { + // In Japan, the order is reversed. + for (int i = size - 1; i >= 0; i--) { + String addressPart = list.get(i); + if (addressPart.length() > 0) { + if (!builderIsEmpty) { + builder.append(' '); + } + builder.append(addressPart); + builderIsEmpty = false; + } + } + } else { + for (int i = 0; i < size; i++) { + String addressPart = list.get(i); + if (addressPart.length() > 0) { + if (!builderIsEmpty) { + builder.append(' '); + } + builder.append(addressPart); + builderIsEmpty = false; + } + } + } + address = builder.toString().trim(); + } else { + address = propertyNode.propValue; + } + contact.addContactmethod(kind, type, address, label, isPrimary); + } else if (name.equals("ORG")) { + // vCard specification does not specify other types. + int type = Contacts.OrganizationColumns.TYPE_WORK; + boolean isPrimary = false; + + for (String typeString : propertyNode.paramMap_TYPE) { + if (typeString.equals("PREF") && !prefIsSetOrganization) { + // vCard specification officially does not have PREF in ORG. + // This is just for safety. + prefIsSetOrganization = true; + isPrimary = true; + } + // XXX: Should we cope with X- words? + } + + List list = propertyNode.propValue_vector; + int size = list.size(); + StringBuilder builder = new StringBuilder(); + for (Iterator iter = list.iterator(); iter.hasNext();) { + builder.append(iter.next()); + if (iter.hasNext()) { + builder.append(' '); + } + } + + contact.addOrganization(type, builder.toString(), "", isPrimary); + } else if (name.equals("TITLE")) { + contact.setPosition(propertyNode.propValue); + } else if (name.equals("ROLE")) { + contact.setPosition(propertyNode.propValue); + } else if (name.equals("PHOTO")) { + // We prefer PHOTO to LOGO. + String valueType = propertyNode.paramMap.getAsString("VALUE"); + if (valueType != null && valueType.equals("URL")) { + // TODO: do something. + } else { + // Assume PHOTO is stored in BASE64. In that case, + // data is already stored in propValue_bytes in binary form. + // It should be automatically done by VBuilder (VDataBuilder/VCardDatabuilder) + contact.photoBytes = propertyNode.propValue_bytes; + String type = propertyNode.paramMap.getAsString("TYPE"); + if (type != null) { + contact.photoType = type; + } + } + } else if (name.equals("LOGO")) { + // When PHOTO is not available this is not URL, + // we use this instead of PHOTO. + String valueType = propertyNode.paramMap.getAsString("VALUE"); + if (valueType != null && valueType.equals("URL")) { + // TODO: do something. + } else if (contact.photoBytes == null) { + contact.photoBytes = propertyNode.propValue_bytes; + String type = propertyNode.paramMap.getAsString("TYPE"); + if (type != null) { + contact.photoType = type; + } + } + } else if (name.equals("EMAIL")) { + int type = -1; + String label = null; + boolean isPrimary = false; + for (String typeString : propertyNode.paramMap_TYPE) { + if (typeString.equals("PREF") && !prefIsSetEmail) { + // Only first "PREF" is considered. + prefIsSetEmail = true; + isPrimary = true; + } else if (typeString.equalsIgnoreCase("HOME")) { + type = Contacts.ContactMethodsColumns.TYPE_HOME; + } else if (typeString.equalsIgnoreCase("WORK")) { + type = Contacts.ContactMethodsColumns.TYPE_WORK; + } else if (typeString.equalsIgnoreCase("CELL")) { + // We do not have Contacts.ContactMethodsColumns.TYPE_MOBILE yet. + type = Contacts.ContactMethodsColumns.TYPE_CUSTOM; + label = Contacts.ContactMethodsColumns.MOBILE_EMAIL_TYPE_NAME; + } else if (typeString.toUpperCase().startsWith("X-") && + type < 0) { + type = Contacts.ContactMethodsColumns.TYPE_CUSTOM; + label = typeString.substring(2); + } else if (type < 0) { + // vCard 3.0 allows iana-token. + // We may have INTERNET (specified in vCard spec), + // SCHOOL, etc. + type = Contacts.ContactMethodsColumns.TYPE_CUSTOM; + label = typeString; + } + } + // We use "OTHER" as default. + if (type < 0) { + type = Contacts.ContactMethodsColumns.TYPE_OTHER; + } + contact.addContactmethod(Contacts.KIND_EMAIL, + type, propertyNode.propValue,label, isPrimary); + } else if (name.equals("TEL")) { + int type = -1; + String label = null; + boolean isPrimary = false; + boolean isFax = false; + for (String typeString : propertyNode.paramMap_TYPE) { + if (typeString.equals("PREF") && !prefIsSetPhone) { + // Only first "PREF" is considered. + prefIsSetPhone = true; + isPrimary = true; + } else if (typeString.equalsIgnoreCase("HOME")) { + type = Contacts.PhonesColumns.TYPE_HOME; + } else if (typeString.equalsIgnoreCase("WORK")) { + type = Contacts.PhonesColumns.TYPE_WORK; + } else if (typeString.equalsIgnoreCase("CELL")) { + type = Contacts.PhonesColumns.TYPE_MOBILE; + } else if (typeString.equalsIgnoreCase("PAGER")) { + type = Contacts.PhonesColumns.TYPE_PAGER; + } else if (typeString.equalsIgnoreCase("FAX")) { + isFax = true; + } else if (typeString.equalsIgnoreCase("VOICE") || + typeString.equalsIgnoreCase("MSG")) { + // Defined in vCard 3.0. Ignore these because they + // conflict with "HOME", "WORK", etc. + // XXX: do something? + } else if (typeString.toUpperCase().startsWith("X-") && + type < 0) { + type = Contacts.PhonesColumns.TYPE_CUSTOM; + label = typeString.substring(2); + } else if (type < 0){ + // We may have MODEM, CAR, ISDN, etc... + type = Contacts.PhonesColumns.TYPE_CUSTOM; + label = typeString; + } + } + // We use "HOME" as default + if (type < 0) { + type = Contacts.PhonesColumns.TYPE_HOME; + } + if (isFax) { + if (type == Contacts.PhonesColumns.TYPE_HOME) { + type = Contacts.PhonesColumns.TYPE_FAX_HOME; + } else if (type == Contacts.PhonesColumns.TYPE_WORK) { + type = Contacts.PhonesColumns.TYPE_FAX_WORK; + } + } + + contact.addPhone(type, propertyNode.propValue, label, isPrimary); + } else if (name.equals("NOTE")) { + contact.notes.add(propertyNode.propValue); + } else if (name.equals("BDAY")) { + contact.addExtension(propertyNode); + } else if (name.equals("URL")) { + contact.addExtension(propertyNode); + } else if (name.equals("REV")) { + // Revision of this VCard entry. I think we can ignore this. + contact.addExtension(propertyNode); + } else if (name.equals("UID")) { + contact.addExtension(propertyNode); + } else if (name.equals("KEY")) { + // Type is X509 or PGP? I don't know how to handle this... + contact.addExtension(propertyNode); + } else if (name.equals("MAILER")) { + contact.addExtension(propertyNode); + } else if (name.equals("TZ")) { + contact.addExtension(propertyNode); + } else if (name.equals("GEO")) { + contact.addExtension(propertyNode); + } else if (name.equals("NICKNAME")) { + // vCard 3.0 only. + contact.addExtension(propertyNode); + } else if (name.equals("CLASS")) { + // vCard 3.0 only. + // e.g. CLASS:CONFIDENTIAL + contact.addExtension(propertyNode); + } else if (name.equals("PROFILE")) { + // VCard 3.0 only. Must be "VCARD". I think we can ignore this. + contact.addExtension(propertyNode); + } else if (name.equals("CATEGORIES")) { + // VCard 3.0 only. + // e.g. CATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY + contact.addExtension(propertyNode); + } else if (name.equals("SOURCE")) { + // VCard 3.0 only. + contact.addExtension(propertyNode); + } else if (name.equals("PRODID")) { + // VCard 3.0 only. + // To specify the identifier for the product that created + // the vCard object. + contact.addExtension(propertyNode); + } else if (name.equals("X-PHONETIC-FIRST-NAME")) { + xPhoneticFirstName = propertyNode.propValue; + } else if (name.equals("X-PHONETIC-MIDDLE-NAME")) { + xPhoneticMiddleName = propertyNode.propValue; + } else if (name.equals("X-PHONETIC-LAST-NAME")) { + xPhoneticLastName = propertyNode.propValue; + } else { + // Unknown X- words and IANA token. + contact.addExtension(propertyNode); + } + } + + if (fullName != null) { + contact.name = fullName; + } else if(nameFromNProperty != null) { + contact.name = nameFromNProperty; + } else { + contact.name = ""; + } + + if (contact.phoneticName == null && + (xPhoneticFirstName != null || xPhoneticMiddleName != null || + xPhoneticLastName != null)) { + // Note: In Europe, this order should be "LAST FIRST MIDDLE". See the comment around + // NAME_ORDER_TYPE_* for more detail. + String first; + String second; + if (nameOrderType == NAME_ORDER_TYPE_JAPANESE) { + first = xPhoneticLastName; + second = xPhoneticFirstName; + } else { + first = xPhoneticFirstName; + second = xPhoneticLastName; + } + StringBuilder builder = new StringBuilder(); + if (first != null) { + builder.append(first); + } + if (xPhoneticMiddleName != null) { + builder.append(xPhoneticMiddleName); + } + if (second != null) { + builder.append(second); + } + contact.phoneticName = builder.toString(); + } + + // Remove unnecessary white spaces. + // It is found that some mobile phone emits phonetic name with just one white space + // when a user does not specify one. + // This logic is effective toward such kind of weird data. + if (contact.phoneticName != null) { + contact.phoneticName = contact.phoneticName.trim(); + } + + // If there is no "PREF", we choose the first entries as primary. + if (!prefIsSetPhone && + contact.phoneList != null && + contact.phoneList.size() > 0) { + contact.phoneList.get(0).isPrimary = true; + } + + if (!prefIsSetAddress && contact.contactmethodList != null) { + for (ContactMethod contactMethod : contact.contactmethodList) { + if (contactMethod.kind == Contacts.KIND_POSTAL) { + contactMethod.isPrimary = true; + break; + } + } + } + if (!prefIsSetEmail && contact.contactmethodList != null) { + for (ContactMethod contactMethod : contact.contactmethodList) { + if (contactMethod.kind == Contacts.KIND_EMAIL) { + contactMethod.isPrimary = true; + break; + } + } + } + if (!prefIsSetOrganization && + contact.organizationList != null && + contact.organizationList.size() > 0) { + contact.organizationList.get(0).isPrimary = true; + } + + return contact; + } + + public String displayString() { + if (name.length() > 0) { + return name; + } + if (contactmethodList != null && contactmethodList.size() > 0) { + for (ContactMethod contactMethod : contactmethodList) { + if (contactMethod.kind == Contacts.KIND_EMAIL && contactMethod.isPrimary) { + return contactMethod.data; + } + } + } + if (phoneList != null && phoneList.size() > 0) { + for (PhoneData phoneData : phoneList) { + if (phoneData.isPrimary) { + return phoneData.data; + } + } + } + return ""; + } + + private void pushIntoContentProviderOrResolver(Object contentSomething, + long myContactsGroupId) { + ContentResolver resolver = null; + AbstractSyncableContentProvider provider = null; + if (contentSomething instanceof ContentResolver) { + resolver = (ContentResolver)contentSomething; + } else if (contentSomething instanceof AbstractSyncableContentProvider) { + provider = (AbstractSyncableContentProvider)contentSomething; + } else { + Log.e(LOG_TAG, "Unsupported object came."); + return; + } + + ContentValues contentValues = new ContentValues(); + contentValues.put(People.NAME, name); + contentValues.put(People.PHONETIC_NAME, phoneticName); + + if (notes.size() > 1) { + StringBuilder builder = new StringBuilder(); + for (String note : notes) { + builder.append(note); + builder.append("\n"); + } + contentValues.put(People.NOTES, builder.toString()); + } else if (notes.size() == 1){ + contentValues.put(People.NOTES, notes.get(0)); + } + + Uri personUri; + long personId = 0; + if (resolver != null) { + personUri = Contacts.People.createPersonInMyContactsGroup( + resolver, contentValues); + if (personUri != null) { + personId = ContentUris.parseId(personUri); + } + } else { + personUri = provider.nonTransactionalInsert(People.CONTENT_URI, contentValues); + if (personUri != null) { + personId = ContentUris.parseId(personUri); + ContentValues values = new ContentValues(); + values.put(GroupMembership.PERSON_ID, personId); + values.put(GroupMembership.GROUP_ID, myContactsGroupId); + Uri resultUri = provider.nonTransactionalInsert( + GroupMembership.CONTENT_URI, values); + if (resultUri == null) { + Log.e(LOG_TAG, "Faild to insert the person to MyContact."); + provider.nonTransactionalDelete(personUri, null, null); + personUri = null; + } + } + } + + if (personUri == null) { + Log.e(LOG_TAG, "Failed to create the contact."); + return; + } + + if (photoBytes != null) { + if (resolver != null) { + People.setPhotoData(resolver, personUri, photoBytes); + } else { + Uri photoUri = Uri.withAppendedPath(personUri, Contacts.Photos.CONTENT_DIRECTORY); + ContentValues values = new ContentValues(); + values.put(Photos.DATA, photoBytes); + provider.update(photoUri, values, null, null); + } + } + + long primaryPhoneId = -1; + if (phoneList != null && phoneList.size() > 0) { + for (PhoneData phoneData : phoneList) { + ContentValues values = new ContentValues(); + values.put(Contacts.PhonesColumns.TYPE, phoneData.type); + if (phoneData.type == Contacts.PhonesColumns.TYPE_CUSTOM) { + values.put(Contacts.PhonesColumns.LABEL, phoneData.label); + } + // Already formatted. + values.put(Contacts.PhonesColumns.NUMBER, phoneData.data); + + // Not sure about Contacts.PhonesColumns.NUMBER_KEY ... + values.put(Contacts.PhonesColumns.ISPRIMARY, 1); + values.put(Contacts.Phones.PERSON_ID, personId); + Uri phoneUri; + if (resolver != null) { + phoneUri = resolver.insert(Phones.CONTENT_URI, values); + } else { + phoneUri = provider.nonTransactionalInsert(Phones.CONTENT_URI, values); + } + if (phoneData.isPrimary) { + primaryPhoneId = Long.parseLong(phoneUri.getLastPathSegment()); + } + } + } + + long primaryOrganizationId = -1; + if (organizationList != null && organizationList.size() > 0) { + for (OrganizationData organizationData : organizationList) { + ContentValues values = new ContentValues(); + // Currently, we do not use TYPE_CUSTOM. + values.put(Contacts.OrganizationColumns.TYPE, + organizationData.type); + values.put(Contacts.OrganizationColumns.COMPANY, + organizationData.companyName); + values.put(Contacts.OrganizationColumns.TITLE, + organizationData.positionName); + values.put(Contacts.OrganizationColumns.ISPRIMARY, 1); + values.put(Contacts.OrganizationColumns.PERSON_ID, personId); + + Uri organizationUri; + if (resolver != null) { + organizationUri = resolver.insert(Organizations.CONTENT_URI, values); + } else { + organizationUri = provider.nonTransactionalInsert( + Organizations.CONTENT_URI, values); + } + if (organizationData.isPrimary) { + primaryOrganizationId = Long.parseLong(organizationUri.getLastPathSegment()); + } + } + } + + long primaryEmailId = -1; + if (contactmethodList != null && contactmethodList.size() > 0) { + for (ContactMethod contactMethod : contactmethodList) { + ContentValues values = new ContentValues(); + values.put(Contacts.ContactMethodsColumns.KIND, contactMethod.kind); + values.put(Contacts.ContactMethodsColumns.TYPE, contactMethod.type); + if (contactMethod.type == Contacts.ContactMethodsColumns.TYPE_CUSTOM) { + values.put(Contacts.ContactMethodsColumns.LABEL, contactMethod.label); + } + values.put(Contacts.ContactMethodsColumns.DATA, contactMethod.data); + values.put(Contacts.ContactMethodsColumns.ISPRIMARY, 1); + values.put(Contacts.ContactMethods.PERSON_ID, personId); + + if (contactMethod.kind == Contacts.KIND_EMAIL) { + Uri emailUri; + if (resolver != null) { + emailUri = resolver.insert(ContactMethods.CONTENT_URI, values); + } else { + emailUri = provider.nonTransactionalInsert( + ContactMethods.CONTENT_URI, values); + } + if (contactMethod.isPrimary) { + primaryEmailId = Long.parseLong(emailUri.getLastPathSegment()); + } + } else { // probably KIND_POSTAL + if (resolver != null) { + resolver.insert(ContactMethods.CONTENT_URI, values); + } else { + provider.nonTransactionalInsert( + ContactMethods.CONTENT_URI, values); + } + } + } + } + + if (extensionMap != null && extensionMap.size() > 0) { + ArrayList contentValuesArray; + if (resolver != null) { + contentValuesArray = new ArrayList(); + } else { + contentValuesArray = null; + } + for (Entry> entry : extensionMap.entrySet()) { + String key = entry.getKey(); + List list = entry.getValue(); + for (String value : list) { + ContentValues values = new ContentValues(); + values.put(Extensions.NAME, key); + values.put(Extensions.VALUE, value); + values.put(Extensions.PERSON_ID, personId); + if (resolver != null) { + contentValuesArray.add(values); + } else { + provider.nonTransactionalInsert(Extensions.CONTENT_URI, values); + } + } + } + if (resolver != null) { + resolver.bulkInsert(Extensions.CONTENT_URI, + contentValuesArray.toArray(new ContentValues[0])); + } + } + + if (primaryPhoneId >= 0 || primaryOrganizationId >= 0 || primaryEmailId >= 0) { + ContentValues values = new ContentValues(); + if (primaryPhoneId >= 0) { + values.put(People.PRIMARY_PHONE_ID, primaryPhoneId); + } + if (primaryOrganizationId >= 0) { + values.put(People.PRIMARY_ORGANIZATION_ID, primaryOrganizationId); + } + if (primaryEmailId >= 0) { + values.put(People.PRIMARY_EMAIL_ID, primaryEmailId); + } + if (resolver != null) { + resolver.update(personUri, values, null, null); + } else { + provider.nonTransactionalUpdate(personUri, values, null, null); + } + } + } + + /** + * Push this object into database in the resolver. + */ + public void pushIntoContentResolver(ContentResolver resolver) { + pushIntoContentProviderOrResolver(resolver, 0); + } + + /** + * Push this object into AbstractSyncableContentProvider object. + */ + public void pushIntoAbstractSyncableContentProvider( + AbstractSyncableContentProvider provider, long myContactsGroupId) { + boolean successful = false; + provider.beginTransaction(); + try { + pushIntoContentProviderOrResolver(provider, myContactsGroupId); + successful = true; + } finally { + provider.endTransaction(successful); + } + } + + public boolean isIgnorable() { + return TextUtils.isEmpty(name) && + TextUtils.isEmpty(phoneticName) && + (phoneList == null || phoneList.size() == 0) && + (contactmethodList == null || contactmethodList.size() == 0); } } diff --git a/core/java/android/syncml/pim/vcard/VCardComposer.java b/core/java/android/syncml/pim/vcard/VCardComposer.java index 05e8f407d0e6..192736ae59d9 100644 --- a/core/java/android/syncml/pim/vcard/VCardComposer.java +++ b/core/java/android/syncml/pim/vcard/VCardComposer.java @@ -124,9 +124,9 @@ public class VCardComposer { mResult.append("ORG:").append(struct.company).append(mNewline); } - if (!isNull(struct.notes)) { + if (struct.notes.size() > 0 && !isNull(struct.notes.get(0))) { mResult.append("NOTE:").append( - foldingString(struct.notes, vcardversion)).append(mNewline); + foldingString(struct.notes.get(0), vcardversion)).append(mNewline); } if (!isNull(struct.title)) { @@ -190,7 +190,7 @@ public class VCardComposer { */ private void appendPhotoStr(byte[] bytes, String type, int version) throws VCardException { - String value, apptype, encodingStr; + String value, encodingStr; try { value = foldingString(new String(Base64.encodeBase64(bytes, true)), version); @@ -198,20 +198,23 @@ public class VCardComposer { throw new VCardException(e.getMessage()); } - if (isNull(type)) { - type = "image/jpeg"; - } - if (type.indexOf("jpeg") > 0) { - apptype = "JPEG"; - } else if (type.indexOf("gif") > 0) { - apptype = "GIF"; - } else if (type.indexOf("bmp") > 0) { - apptype = "BMP"; + if (isNull(type) || type.toUpperCase().indexOf("JPEG") >= 0) { + type = "JPEG"; + } else if (type.toUpperCase().indexOf("GIF") >= 0) { + type = "GIF"; + } else if (type.toUpperCase().indexOf("BMP") >= 0) { + type = "BMP"; } else { - apptype = type.substring(type.indexOf("/")).toUpperCase(); + // Handle the string like "image/tiff". + int indexOfSlash = type.indexOf("/"); + if (indexOfSlash >= 0) { + type = type.substring(indexOfSlash + 1).toUpperCase(); + } else { + type = type.toUpperCase(); + } } - mResult.append("LOGO;TYPE=").append(apptype); + mResult.append("LOGO;TYPE=").append(type); if (version == VERSION_VCARD21_INT) { encodingStr = ";ENCODING=BASE64:"; value = value + mNewline; @@ -281,7 +284,7 @@ public class VCardComposer { private String getPhoneTypeStr(PhoneData phone) { - int phoneType = Integer.parseInt(phone.type); + int phoneType = phone.type; String typeStr, label; if (phoneTypeMap.containsKey(phoneType)) { @@ -308,7 +311,7 @@ public class VCardComposer { String joinMark = version == VERSION_VCARD21_INT ? ";" : ","; for (ContactStruct.ContactMethod contactMethod : contactMList) { // same with v2.1 and v3.0 - switch (Integer.parseInt(contactMethod.kind)) { + switch (contactMethod.kind) { case Contacts.KIND_EMAIL: String mailType = "INTERNET"; if (!isNull(contactMethod.data)) { diff --git a/core/java/android/syncml/pim/vcard/VCardDataBuilder.java b/core/java/android/syncml/pim/vcard/VCardDataBuilder.java new file mode 100644 index 000000000000..a0513f1654f8 --- /dev/null +++ b/core/java/android/syncml/pim/vcard/VCardDataBuilder.java @@ -0,0 +1,442 @@ +/* + * Copyright (C) 2007 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.syncml.pim.vcard; + +import android.app.ProgressDialog; +import android.content.AbstractSyncableContentProvider; +import android.content.ContentProvider; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.IContentProvider; +import android.os.Handler; +import android.provider.Contacts; +import android.syncml.pim.PropertyNode; +import android.syncml.pim.VBuilder; +import android.syncml.pim.VNode; +import android.syncml.pim.VParser; +import android.util.CharsetUtils; +import android.util.Log; + +import org.apache.commons.codec.DecoderException; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.codec.net.QuotedPrintableCodec; + +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; + +/** + * VBuilder for VCard. VCard may contain big photo images encoded by BASE64, + * If we store all VNode entries in memory like VDataBuilder.java, + * OutOfMemoryError may be thrown. Thus, this class push each VCard entry into + * ContentResolver immediately. + */ +public class VCardDataBuilder implements VBuilder { + static private String LOG_TAG = "VCardDataBuilder"; + + /** + * If there's no other information available, this class uses this charset for encoding + * byte arrays. + */ + static public String DEFAULT_CHARSET = "UTF-8"; + + private class ProgressShower implements Runnable { + private ContactStruct mContact; + + public ProgressShower(ContactStruct contact) { + mContact = contact; + } + + public void run () { + mProgressDialog.setMessage(mProgressMessage + "\n" + + mContact.displayString()); + } + } + + /** type=VNode */ + private VNode mCurrentVNode; + private PropertyNode mCurrentPropNode; + private String mCurrentParamType; + + /** + * The charset using which VParser parses the text. + */ + private String mSourceCharset; + + /** + * The charset with which byte array is encoded to String. + */ + private String mTargetCharset; + private boolean mStrictLineBreakParsing; + private ContentResolver mContentResolver; + + // For letting VCardDataBuilder show the display name of VCard while handling it. + private Handler mHandler; + private ProgressDialog mProgressDialog; + private String mProgressMessage; + private Runnable mOnProgressRunnable; + private boolean mLastNameComesBeforeFirstName; + + // Just for testing. + private long mTimeCreateContactStruct; + private long mTimePushIntoContentResolver; + + // Ideally, this should be ContactsProvider but it seems Class loader cannot find it, + // even when it is subclass of ContactsProvider... + private AbstractSyncableContentProvider mProvider; + private long mMyContactsGroupId; + + public VCardDataBuilder(ContentResolver resolver) { + mTargetCharset = DEFAULT_CHARSET; + mContentResolver = resolver; + } + + /** + * Constructor which requires minimum requiredvariables. + * + * @param resolver insert each data into this ContentResolver + * @param progressDialog + * @param progressMessage + * @param handler if this importer works on the different thread than main one, + * set appropriate handler object. If not, it is ok to set this null. + */ + public VCardDataBuilder(ContentResolver resolver, + ProgressDialog progressDialog, + String progressMessage, + Handler handler) { + this(resolver, progressDialog, progressMessage, handler, + null, null, false, false); + } + + public VCardDataBuilder(ContentResolver resolver, + ProgressDialog progressDialog, + String progressMessage, + Handler handler, + String charset, + boolean strictLineBreakParsing, + boolean lastNameComesBeforeFirstName) { + this(resolver, progressDialog, progressMessage, handler, + null, charset, strictLineBreakParsing, + lastNameComesBeforeFirstName); + } + + /** + * @hide + */ + public VCardDataBuilder(ContentResolver resolver, + ProgressDialog progressDialog, + String progressMessage, + Handler handler, + String sourceCharset, + String targetCharset, + boolean strictLineBreakParsing, + boolean lastNameComesBeforeFirstName) { + if (sourceCharset != null) { + mSourceCharset = sourceCharset; + } else { + mSourceCharset = VParser.DEFAULT_CHARSET; + } + if (targetCharset != null) { + mTargetCharset = targetCharset; + } else { + mTargetCharset = DEFAULT_CHARSET; + } + mContentResolver = resolver; + mStrictLineBreakParsing = strictLineBreakParsing; + mHandler = handler; + mProgressDialog = progressDialog; + mProgressMessage = progressMessage; + mLastNameComesBeforeFirstName = lastNameComesBeforeFirstName; + + tryGetOriginalProvider(); + } + + private void tryGetOriginalProvider() { + final ContentResolver resolver = mContentResolver; + + if ((mMyContactsGroupId = Contacts.People.tryGetMyContactsGroupId(resolver)) == 0) { + Log.e(LOG_TAG, "Could not get group id of MyContact"); + return; + } + + IContentProvider iProviderForName = resolver.acquireProvider(Contacts.CONTENT_URI); + ContentProvider contentProvider = + ContentProvider.coerceToLocalContentProvider(iProviderForName); + if (contentProvider == null) { + Log.e(LOG_TAG, "Fail to get ContentProvider object."); + return; + } + + if (!(contentProvider instanceof AbstractSyncableContentProvider)) { + Log.e(LOG_TAG, + "Acquired ContentProvider object is not AbstractSyncableContentProvider."); + return; + } + + mProvider = (AbstractSyncableContentProvider)contentProvider; + } + + public void setOnProgressRunnable(Runnable runnable) { + mOnProgressRunnable = runnable; + } + + public void start() { + } + + public void end() { + } + + /** + * Assume that VCard is not nested. In other words, this code does not accept + */ + public void startRecord(String type) { + if (mCurrentVNode != null) { + // This means startRecord() is called inside startRecord() - endRecord() block. + // TODO: should throw some Exception + Log.e(LOG_TAG, "Nested VCard code is not supported now."); + } + mCurrentVNode = new VNode(); + mCurrentVNode.parseStatus = 1; + mCurrentVNode.VName = type; + } + + public void endRecord() { + mCurrentVNode.parseStatus = 0; + long start = System.currentTimeMillis(); + ContactStruct contact = ContactStruct.constructContactFromVNode(mCurrentVNode, + mLastNameComesBeforeFirstName ? ContactStruct.NAME_ORDER_TYPE_JAPANESE : + ContactStruct.NAME_ORDER_TYPE_ENGLISH); + mTimeCreateContactStruct += System.currentTimeMillis() - start; + if (!contact.isIgnorable()) { + if (mProgressDialog != null && mProgressMessage != null) { + if (mHandler != null) { + mHandler.post(new ProgressShower(contact)); + } else { + mProgressDialog.setMessage(mProgressMessage + "\n" + + contact.displayString()); + } + } + start = System.currentTimeMillis(); + if (mProvider != null) { + contact.pushIntoAbstractSyncableContentProvider( + mProvider, mMyContactsGroupId); + } else { + contact.pushIntoContentResolver(mContentResolver); + } + mTimePushIntoContentResolver += System.currentTimeMillis() - start; + } + if (mOnProgressRunnable != null) { + mOnProgressRunnable.run(); + } + mCurrentVNode = null; + } + + public void startProperty() { + mCurrentPropNode = new PropertyNode(); + } + + public void endProperty() { + mCurrentVNode.propList.add(mCurrentPropNode); + mCurrentPropNode = null; + } + + public void propertyName(String name) { + mCurrentPropNode.propName = name; + } + + public void propertyGroup(String group) { + mCurrentPropNode.propGroupSet.add(group); + } + + public void propertyParamType(String type) { + mCurrentParamType = type; + } + + public void propertyParamValue(String value) { + if (mCurrentParamType == null || + mCurrentParamType.equalsIgnoreCase("TYPE")) { + mCurrentPropNode.paramMap_TYPE.add(value); + } else { + mCurrentPropNode.paramMap.put(mCurrentParamType, value); + } + + mCurrentParamType = null; + } + + private String encodeString(String originalString, String targetCharset) { + if (mSourceCharset.equalsIgnoreCase(targetCharset)) { + return originalString; + } + Charset charset = Charset.forName(mSourceCharset); + ByteBuffer byteBuffer = charset.encode(originalString); + // byteBuffer.array() "may" return byte array which is larger than + // byteBuffer.remaining(). Here, we keep on the safe side. + byte[] bytes = new byte[byteBuffer.remaining()]; + byteBuffer.get(bytes); + try { + return new String(bytes, targetCharset); + } catch (UnsupportedEncodingException e) { + Log.e(LOG_TAG, "Failed to encode: charset=" + targetCharset); + return new String(bytes); + } + } + + private String handleOneValue(String value, String targetCharset, String encoding) { + if (encoding != null) { + if (encoding.equals("BASE64") || encoding.equals("B")) { + mCurrentPropNode.propValue_bytes = + Base64.decodeBase64(value.getBytes()); + return value; + } else if (encoding.equals("QUOTED-PRINTABLE")) { + // "= " -> " ", "=\t" -> "\t". + // Previous code had done this replacement. Keep on the safe side. + StringBuilder builder = new StringBuilder(); + int length = value.length(); + for (int i = 0; i < length; i++) { + char ch = value.charAt(i); + if (ch == '=' && i < length - 1) { + char nextCh = value.charAt(i + 1); + if (nextCh == ' ' || nextCh == '\t') { + + builder.append(nextCh); + i++; + continue; + } + } + builder.append(ch); + } + String quotedPrintable = builder.toString(); + + String[] lines; + if (mStrictLineBreakParsing) { + lines = quotedPrintable.split("\r\n"); + } else { + builder = new StringBuilder(); + length = quotedPrintable.length(); + ArrayList list = new ArrayList(); + for (int i = 0; i < length; i++) { + char ch = quotedPrintable.charAt(i); + if (ch == '\n') { + list.add(builder.toString()); + builder = new StringBuilder(); + } else if (ch == '\r') { + list.add(builder.toString()); + builder = new StringBuilder(); + if (i < length - 1) { + char nextCh = quotedPrintable.charAt(i + 1); + if (nextCh == '\n') { + i++; + } + } + } else { + builder.append(ch); + } + } + String finalLine = builder.toString(); + if (finalLine.length() > 0) { + list.add(finalLine); + } + lines = list.toArray(new String[0]); + } + + builder = new StringBuilder(); + for (String line : lines) { + if (line.endsWith("=")) { + line = line.substring(0, line.length() - 1); + } + builder.append(line); + } + byte[] bytes; + try { + bytes = builder.toString().getBytes(mSourceCharset); + } catch (UnsupportedEncodingException e1) { + Log.e(LOG_TAG, "Failed to encode: charset=" + mSourceCharset); + bytes = builder.toString().getBytes(); + } + + try { + bytes = QuotedPrintableCodec.decodeQuotedPrintable(bytes); + } catch (DecoderException e) { + Log.e(LOG_TAG, "Failed to decode quoted-printable: " + e); + return ""; + } + + try { + return new String(bytes, targetCharset); + } catch (UnsupportedEncodingException e) { + Log.e(LOG_TAG, "Failed to encode: charset=" + targetCharset); + return new String(bytes); + } + } + // Unknown encoding. Fall back to default. + } + return encodeString(value, targetCharset); + } + + public void propertyValues(List values) { + if (values == null || values.size() == 0) { + mCurrentPropNode.propValue_bytes = null; + mCurrentPropNode.propValue_vector.clear(); + mCurrentPropNode.propValue_vector.add(""); + mCurrentPropNode.propValue = ""; + return; + } + + ContentValues paramMap = mCurrentPropNode.paramMap; + + String targetCharset = CharsetUtils.nameForDefaultVendor(paramMap.getAsString("CHARSET")); + String encoding = paramMap.getAsString("ENCODING"); + + if (targetCharset == null || targetCharset.length() == 0) { + targetCharset = mTargetCharset; + } + + for (String value : values) { + mCurrentPropNode.propValue_vector.add( + handleOneValue(value, targetCharset, encoding)); + } + + mCurrentPropNode.propValue = listToString(mCurrentPropNode.propValue_vector); + } + + public void showDebugInfo() { + Log.d(LOG_TAG, "time for creating ContactStruct: " + mTimeCreateContactStruct + " ms"); + Log.d(LOG_TAG, "time for insert ContactStruct to database: " + + mTimePushIntoContentResolver + " ms"); + } + + private String listToString(List list){ + int size = list.size(); + if (size > 1) { + StringBuilder builder = new StringBuilder(); + int i = 0; + for (String type : list) { + builder.append(type); + if (i < size - 1) { + builder.append(";"); + } + } + return builder.toString(); + } else if (size == 1) { + return list.get(0); + } else { + return ""; + } + } +} diff --git a/core/java/android/syncml/pim/vcard/VCardEntryCounter.java b/core/java/android/syncml/pim/vcard/VCardEntryCounter.java new file mode 100644 index 000000000000..03cd1d9439fd --- /dev/null +++ b/core/java/android/syncml/pim/vcard/VCardEntryCounter.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.syncml.pim.vcard; + +import java.util.List; + +import android.syncml.pim.VBuilder; + +public class VCardEntryCounter implements VBuilder { + private int mCount; + + public int getCount() { + return mCount; + } + + public void start() { + } + + public void end() { + } + + public void startRecord(String type) { + } + + public void endRecord() { + mCount++; + } + + public void startProperty() { + } + + public void endProperty() { + } + + public void propertyGroup(String group) { + } + + public void propertyName(String name) { + } + + public void propertyParamType(String type) { + } + + public void propertyParamValue(String value) { + } + + public void propertyValues(List values) { + } +} \ No newline at end of file diff --git a/core/java/android/syncml/pim/vcard/VCardNestedException.java b/core/java/android/syncml/pim/vcard/VCardNestedException.java new file mode 100644 index 000000000000..def6f3b785ff --- /dev/null +++ b/core/java/android/syncml/pim/vcard/VCardNestedException.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.syncml.pim.vcard; + +/** + * VCardException thrown when VCard is nested without VCardParser's being notified. + */ +public class VCardNestedException extends VCardException { + public VCardNestedException() {} + public VCardNestedException(String message) { + super(message); + } +} diff --git a/core/java/android/syncml/pim/vcard/VCardParser_V21.java b/core/java/android/syncml/pim/vcard/VCardParser_V21.java index f853c5e383fa..d86566811d85 100644 --- a/core/java/android/syncml/pim/vcard/VCardParser_V21.java +++ b/core/java/android/syncml/pim/vcard/VCardParser_V21.java @@ -17,21 +17,26 @@ package android.syncml.pim.vcard; import android.syncml.pim.VBuilder; +import android.syncml.pim.VParser; +import android.util.Log; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.Reader; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; -import java.util.regex.Pattern; /** - * This class is used to parse vcard. Please refer to vCard Specification 2.1 + * This class is used to parse vcard. Please refer to vCard Specification 2.1. */ public class VCardParser_V21 { - + private static final String LOG_TAG = "VCardParser_V21"; + + public static final String DEFAULT_CHARSET = VParser.DEFAULT_CHARSET; + /** Store the known-type */ private static final HashSet sKnownTypeSet = new HashSet( Arrays.asList("DOM", "INTL", "POSTAL", "PARCEL", "HOME", "WORK", @@ -42,19 +47,17 @@ public class VCardParser_V21 { "CGM", "WMF", "BMP", "MET", "PMB", "DIB", "PICT", "TIFF", "PDF", "PS", "JPEG", "QTIME", "MPEG", "MPEG2", "AVI", "WAVE", "AIFF", "PCM", "X509", "PGP")); - + /** Store the known-value */ private static final HashSet sKnownValueSet = new HashSet( Arrays.asList("INLINE", "URL", "CONTENT-ID", "CID")); - /** Store the property name available in vCard 2.1 */ - // NICKNAME is not supported in vCard 2.1, but some vCard may contain. + /** Store the property names available in vCard 2.1 */ private static final HashSet sAvailablePropertyNameV21 = new HashSet(Arrays.asList( - "LOGO", "PHOTO", "LABEL", "FN", "TITLE", "SOUND", + "BEGIN", "LOGO", "PHOTO", "LABEL", "FN", "TITLE", "SOUND", "VERSION", "TEL", "EMAIL", "TZ", "GEO", "NOTE", "URL", - "BDAY", "ROLE", "REV", "UID", "KEY", "MAILER", - "NICKNAME")); + "BDAY", "ROLE", "REV", "UID", "KEY", "MAILER")); // Though vCard 2.1 specification does not allow "B" encoding, some data may have it. // We allow it for safety... @@ -76,6 +79,30 @@ public class VCardParser_V21 { // Should not directly read a line from this. Use getLine() instead. protected BufferedReader mReader; + private boolean mCanceled; + + // In some cases, vCard is nested. Currently, we only consider the most interior vCard data. + // See v21_foma_1.vcf in test directory for more information. + private int mNestCount; + + // In order to reduce warning message as much as possible, we hold the value which made Logger + // emit a warning message. + protected HashSet mWarningValueMap = new HashSet(); + + // Just for debugging + private long mTimeTotal; + private long mTimeStartRecord; + private long mTimeEndRecord; + private long mTimeStartProperty; + private long mTimeEndProperty; + private long mTimeParseItems; + private long mTimeParseItem1; + private long mTimeParseItem2; + private long mTimeParseItem3; + private long mTimeHandlePropertyValue1; + private long mTimeHandlePropertyValue2; + private long mTimeHandlePropertyValue3; + /** * Create a new VCard parser. */ @@ -83,12 +110,35 @@ public class VCardParser_V21 { super(); } + public VCardParser_V21(VCardSourceDetector detector) { + super(); + if (detector != null && detector.getType() == VCardSourceDetector.TYPE_FOMA) { + mNestCount = 1; + } + } + /** * Parse the file at the given position * vcard_file = [wsls] vcard [wsls] */ protected void parseVCardFile() throws IOException, VCardException { - while (parseOneVCard()) { + boolean firstReading = true; + while (true) { + if (mCanceled) { + break; + } + if (!parseOneVCard(firstReading)) { + break; + } + firstReading = false; + } + + if (mNestCount > 0) { + boolean useCache = true; + for (int i = 0; i < mNestCount; i++) { + readEndVCard(useCache, true); + useCache = false; + } } } @@ -100,7 +150,13 @@ public class VCardParser_V21 { * @return true when the propertyName is a valid property name. */ protected boolean isValidPropertyName(String propertyName) { - return sAvailablePropertyNameV21.contains(propertyName.toUpperCase()); + if (!(sAvailablePropertyNameV21.contains(propertyName.toUpperCase()) || + propertyName.startsWith("X-")) && + !mWarningValueMap.contains(propertyName)) { + mWarningValueMap.add(propertyName); + Log.w(LOG_TAG, "Property name unsupported by vCard 2.1: " + propertyName); + } + return true; } /** @@ -129,7 +185,7 @@ public class VCardParser_V21 { line = getLine(); if (line == null) { throw new VCardException("Reached end of buffer."); - } else if (line.trim().length() > 0) { + } else if (line.trim().length() > 0) { return line; } } @@ -140,12 +196,37 @@ public class VCardParser_V21 { * items *CRLF * "END" [ws] ":" [ws] "VCARD" */ - private boolean parseOneVCard() throws IOException, VCardException { - if (!readBeginVCard()) { + private boolean parseOneVCard(boolean firstReading) throws IOException, VCardException { + boolean allowGarbage = false; + if (firstReading) { + if (mNestCount > 0) { + for (int i = 0; i < mNestCount; i++) { + if (!readBeginVCard(allowGarbage)) { + return false; + } + allowGarbage = true; + } + } + } + + if (!readBeginVCard(allowGarbage)) { return false; } + long start; + if (mBuilder != null) { + start = System.currentTimeMillis(); + mBuilder.startRecord("VCARD"); + mTimeStartRecord += System.currentTimeMillis() - start; + } + start = System.currentTimeMillis(); parseItems(); - readEndVCard(); + mTimeParseItems += System.currentTimeMillis() - start; + readEndVCard(true, false); + if (mBuilder != null) { + start = System.currentTimeMillis(); + mBuilder.endRecord(); + mTimeEndRecord += System.currentTimeMillis() - start; + } return true; } @@ -154,46 +235,102 @@ public class VCardParser_V21 { * @throws IOException * @throws VCardException */ - protected boolean readBeginVCard() throws IOException, VCardException { + protected boolean readBeginVCard(boolean allowGarbage) + throws IOException, VCardException { String line; - while (true) { - line = getLine(); - if (line == null) { - return false; - } else if (line.trim().length() > 0) { - break; + do { + while (true) { + line = getLine(); + if (line == null) { + return false; + } else if (line.trim().length() > 0) { + break; + } } - } - String[] strArray = line.split(":", 2); - - // Though vCard specification does not allow lower cases, - // some data may have them, so we allow it. - if (!(strArray.length == 2 && - strArray[0].trim().equalsIgnoreCase("BEGIN") && - strArray[1].trim().equalsIgnoreCase("VCARD"))) { - throw new VCardException("BEGIN:VCARD != \"" + line + "\""); - } - - if (mBuilder != null) { - mBuilder.startRecord("VCARD"); - } + String[] strArray = line.split(":", 2); + int length = strArray.length; - return true; + // Though vCard 2.1/3.0 specification does not allow lower cases, + // some data may have them, so we allow it (Actually, previous code + // had explicitly allowed "BEGIN:vCard" though there's no example). + // + // TODO: ignore non vCard entry (e.g. vcalendar). + // XXX: Not sure, but according to VDataBuilder.java, vcalendar + // entry + // may be nested. Just seeking "END:SOMETHING" may not be enough. + // e.g. + // BEGIN:VCARD + // ... (Valid. Must parse this) + // END:VCARD + // BEGIN:VSOMETHING + // ... (Must ignore this) + // BEGIN:VSOMETHING2 + // ... (Must ignore this) + // END:VSOMETHING2 + // ... (Must ignore this!) + // END:VSOMETHING + // BEGIN:VCARD + // ... (Valid. Must parse this) + // END:VCARD + // INVALID_STRING (VCardException should be thrown) + if (length == 2 && + strArray[0].trim().equalsIgnoreCase("BEGIN") && + strArray[1].trim().equalsIgnoreCase("VCARD")) { + return true; + } else if (!allowGarbage) { + if (mNestCount > 0) { + mPreviousLine = line; + return false; + } else { + throw new VCardException( + "Expected String \"BEGIN:VCARD\" did not come " + + "(Instead, \"" + line + "\" came)"); + } + } + } while(allowGarbage); + + throw new VCardException("Reached where must not be reached."); } - - protected void readEndVCard() throws VCardException { - // Though vCard specification does not allow lower cases, - // some data may have them, so we allow it. - String[] strArray = mPreviousLine.split(":", 2); - if (!(strArray.length == 2 && - strArray[0].trim().equalsIgnoreCase("END") && - strArray[1].trim().equalsIgnoreCase("VCARD"))) { - throw new VCardException("END:VCARD != \"" + mPreviousLine + "\""); - } - - if (mBuilder != null) { - mBuilder.endRecord(); - } + + /** + * The arguments useCache and allowGarbase are usually true and false accordingly when + * this function is called outside this function itself. + * + * @param useCache When true, line is obtained from mPreviousline. Otherwise, getLine() + * is used. + * @param allowGarbage When true, ignore non "END:VCARD" line. + * @throws IOException + * @throws VCardException + */ + protected void readEndVCard(boolean useCache, boolean allowGarbage) + throws IOException, VCardException { + String line; + do { + if (useCache) { + // Though vCard specification does not allow lower cases, + // some data may have them, so we allow it. + line = mPreviousLine; + } else { + while (true) { + line = getLine(); + if (line == null) { + throw new VCardException("Expected END:VCARD was not found."); + } else if (line.trim().length() > 0) { + break; + } + } + } + + String[] strArray = line.split(":", 2); + if (strArray.length == 2 && + strArray[0].trim().equalsIgnoreCase("END") && + strArray[1].trim().equalsIgnoreCase("VCARD")) { + return; + } else if (!allowGarbage) { + throw new VCardException("END:VCARD != \"" + mPreviousLine + "\""); + } + useCache = false; + } while (allowGarbage); } /** @@ -205,32 +342,33 @@ public class VCardParser_V21 { boolean ended = false; if (mBuilder != null) { + long start = System.currentTimeMillis(); mBuilder.startProperty(); + mTimeStartProperty += System.currentTimeMillis() - start; } - - try { - ended = parseItem(); - } finally { - if (mBuilder != null) { - mBuilder.endProperty(); - } + ended = parseItem(); + if (mBuilder != null && !ended) { + long start = System.currentTimeMillis(); + mBuilder.endProperty(); + mTimeEndProperty += System.currentTimeMillis() - start; } while (!ended) { // follow VCARD ,it wont reach endProperty if (mBuilder != null) { + long start = System.currentTimeMillis(); mBuilder.startProperty(); + mTimeStartProperty += System.currentTimeMillis() - start; } - try { - ended = parseItem(); - } finally { - if (mBuilder != null) { - mBuilder.endProperty(); - } + ended = parseItem(); + if (mBuilder != null && !ended) { + long start = System.currentTimeMillis(); + mBuilder.endProperty(); + mTimeEndProperty += System.currentTimeMillis() - start; } } } - + /** * item = [groups "."] name [params] ":" value CRLF * / [groups "."] "ADR" [params] ":" addressparts CRLF @@ -241,57 +379,134 @@ public class VCardParser_V21 { protected boolean parseItem() throws IOException, VCardException { mEncoding = sDefaultEncoding; - // params = ";" [ws] paramlist String line = getNonEmptyLine(); - String[] strArray = line.split(":", 2); - if (strArray.length < 2) { - throw new VCardException("Invalid line(\":\" does not exist): " + line); - } - String propertyValue = strArray[1]; - String[] groupNameParamsArray = strArray[0].split(";"); - String groupAndName = groupNameParamsArray[0].trim(); - String[] groupNameArray = groupAndName.split("\\."); - int length = groupNameArray.length; - String propertyName = groupNameArray[length - 1]; - if (mBuilder != null) { - mBuilder.propertyName(propertyName); - for (int i = 0; i < length - 1; i++) { - mBuilder.propertyGroup(groupNameArray[i]); - } - } - if (propertyName.equalsIgnoreCase("END")) { - mPreviousLine = line; + long start = System.currentTimeMillis(); + + String[] propertyNameAndValue = separateLineAndHandleGroup(line); + if (propertyNameAndValue == null) { return true; } - - length = groupNameParamsArray.length; - for (int i = 1; i < length; i++) { - handleParams(groupNameParamsArray[i]); + if (propertyNameAndValue.length != 2) { + throw new VCardException("Invalid line \"" + line + "\""); } - - if (isValidPropertyName(propertyName) || - propertyName.startsWith("X-")) { - if (propertyName.equals("VERSION") && - !propertyValue.equals(getVersion())) { - throw new VCardVersionException("Incompatible version: " + - propertyValue + " != " + getVersion()); - } - handlePropertyValue(propertyName, propertyValue); - return false; - } else if (propertyName.equals("ADR") || + String propertyName = propertyNameAndValue[0].toUpperCase(); + String propertyValue = propertyNameAndValue[1]; + + mTimeParseItem1 += System.currentTimeMillis() - start; + + if (propertyName.equals("ADR") || propertyName.equals("ORG") || propertyName.equals("N")) { + start = System.currentTimeMillis(); handleMultiplePropertyValue(propertyName, propertyValue); + mTimeParseItem3 += System.currentTimeMillis() - start; return false; } else if (propertyName.equals("AGENT")) { handleAgent(propertyValue); return false; + } else if (isValidPropertyName(propertyName)) { + if (propertyName.equals("BEGIN")) { + if (propertyValue.equals("VCARD")) { + throw new VCardNestedException("This vCard has nested vCard data in it."); + } else { + throw new VCardException("Unknown BEGIN type: " + propertyValue); + } + } else if (propertyName.equals("VERSION") && + !propertyValue.equals(getVersion())) { + throw new VCardVersionException("Incompatible version: " + + propertyValue + " != " + getVersion()); + } + start = System.currentTimeMillis(); + handlePropertyValue(propertyName, propertyValue); + mTimeParseItem2 += System.currentTimeMillis() - start; + return false; } throw new VCardException("Unknown property name: \"" + propertyName + "\""); } + static private final int STATE_GROUP_OR_PROPNAME = 0; + static private final int STATE_PARAMS = 1; + // vCard 3.1 specification allows double-quoted param-value, while vCard 2.1 does not. + // This is just for safety. + static private final int STATE_PARAMS_IN_DQUOTE = 2; + + protected String[] separateLineAndHandleGroup(String line) throws VCardException { + int length = line.length(); + int state = STATE_GROUP_OR_PROPNAME; + int nameIndex = 0; + + String[] propertyNameAndValue = new String[2]; + + for (int i = 0; i < length; i++) { + char ch = line.charAt(i); + switch (state) { + case STATE_GROUP_OR_PROPNAME: + if (ch == ':') { + String propertyName = line.substring(nameIndex, i); + if (propertyName.equalsIgnoreCase("END")) { + mPreviousLine = line; + return null; + } + if (mBuilder != null) { + mBuilder.propertyName(propertyName); + } + propertyNameAndValue[0] = propertyName; + if (i < length - 1) { + propertyNameAndValue[1] = line.substring(i + 1); + } else { + propertyNameAndValue[1] = ""; + } + return propertyNameAndValue; + } else if (ch == '.') { + String groupName = line.substring(nameIndex, i); + if (mBuilder != null) { + mBuilder.propertyGroup(groupName); + } + nameIndex = i + 1; + } else if (ch == ';') { + String propertyName = line.substring(nameIndex, i); + if (propertyName.equalsIgnoreCase("END")) { + mPreviousLine = line; + return null; + } + if (mBuilder != null) { + mBuilder.propertyName(propertyName); + } + propertyNameAndValue[0] = propertyName; + nameIndex = i + 1; + state = STATE_PARAMS; + } + break; + case STATE_PARAMS: + if (ch == '"') { + state = STATE_PARAMS_IN_DQUOTE; + } else if (ch == ';') { + handleParams(line.substring(nameIndex, i)); + nameIndex = i + 1; + } else if (ch == ':') { + handleParams(line.substring(nameIndex, i)); + if (i < length - 1) { + propertyNameAndValue[1] = line.substring(i + 1); + } else { + propertyNameAndValue[1] = ""; + } + return propertyNameAndValue; + } + break; + case STATE_PARAMS_IN_DQUOTE: + if (ch == '"') { + state = STATE_PARAMS; + } + break; + } + } + + throw new VCardException("Invalid line: \"" + line + "\""); + } + + /** * params = ";" [ws] paramlist * paramlist = paramlist [ws] ";" [ws] param @@ -330,18 +545,19 @@ public class VCardParser_V21 { } /** - * typeval = knowntype / "X-" word + * ptypeval = knowntype / "X-" word */ - protected void handleType(String ptypeval) throws VCardException { - if (sKnownTypeSet.contains(ptypeval.toUpperCase()) || - ptypeval.startsWith("X-")) { - if (mBuilder != null) { - mBuilder.propertyParamType("TYPE"); - mBuilder.propertyParamValue(ptypeval.toUpperCase()); - } - } else { - throw new VCardException("Unknown type: \"" + ptypeval + "\""); - } + protected void handleType(String ptypeval) { + String upperTypeValue = ptypeval; + if (!(sKnownTypeSet.contains(upperTypeValue) || upperTypeValue.startsWith("X-")) && + !mWarningValueMap.contains(ptypeval)) { + mWarningValueMap.add(ptypeval); + Log.w(LOG_TAG, "Type unsupported by vCard 2.1: " + ptypeval); + } + if (mBuilder != null) { + mBuilder.propertyParamType("TYPE"); + mBuilder.propertyParamValue(upperTypeValue); + } } /** @@ -427,31 +643,48 @@ public class VCardParser_V21 { protected void handlePropertyValue( String propertyName, String propertyValue) throws IOException, VCardException { - if (mEncoding == null || mEncoding.equalsIgnoreCase("7BIT") - || mEncoding.equalsIgnoreCase("8BIT") - || mEncoding.toUpperCase().startsWith("X-")) { - if (mBuilder != null) { - ArrayList v = new ArrayList(); - v.add(maybeUnescapeText(propertyValue)); - mBuilder.propertyValues(v); - } - } else if (mEncoding.equalsIgnoreCase("QUOTED-PRINTABLE")) { + if (mEncoding.equalsIgnoreCase("QUOTED-PRINTABLE")) { + long start = System.currentTimeMillis(); String result = getQuotedPrintable(propertyValue); if (mBuilder != null) { ArrayList v = new ArrayList(); v.add(result); mBuilder.propertyValues(v); } + mTimeHandlePropertyValue2 += System.currentTimeMillis() - start; } else if (mEncoding.equalsIgnoreCase("BASE64") || mEncoding.equalsIgnoreCase("B")) { - String result = getBase64(propertyValue); + long start = System.currentTimeMillis(); + // It is very rare, but some BASE64 data may be so big that + // OutOfMemoryError occurs. To ignore such cases, use try-catch. + try { + String result = getBase64(propertyValue); + if (mBuilder != null) { + ArrayList v = new ArrayList(); + v.add(result); + mBuilder.propertyValues(v); + } + } catch (OutOfMemoryError error) { + Log.e(LOG_TAG, "OutOfMemoryError happened during parsing BASE64 data!"); + if (mBuilder != null) { + mBuilder.propertyValues(null); + } + } + mTimeHandlePropertyValue3 += System.currentTimeMillis() - start; + } else { + if (!(mEncoding == null || mEncoding.equalsIgnoreCase("7BIT") + || mEncoding.equalsIgnoreCase("8BIT") + || mEncoding.toUpperCase().startsWith("X-"))) { + Log.w(LOG_TAG, "The encoding unsupported by vCard spec: \"" + mEncoding + "\"."); + } + + long start = System.currentTimeMillis(); if (mBuilder != null) { ArrayList v = new ArrayList(); - v.add(result); + v.add(maybeUnescapeText(propertyValue)); mBuilder.propertyValues(v); - } - } else { - throw new VCardException("Unknown encoding: \"" + mEncoding + "\""); + } + mTimeHandlePropertyValue1 += System.currentTimeMillis() - start; } } @@ -546,57 +779,51 @@ public class VCardParser_V21 { if (mEncoding.equalsIgnoreCase("QUOTED-PRINTABLE")) { propertyValue = getQuotedPrintable(propertyValue); } - - if (propertyValue.endsWith("\\")) { + + if (mBuilder != null) { + // TODO: limit should be set in accordance with propertyName? StringBuilder builder = new StringBuilder(); - // builder.append(propertyValue); - builder.append(propertyValue.substring(0, propertyValue.length() - 1)); - try { - String line; - while (true) { - line = getNonEmptyLine(); - // builder.append("\r\n"); - // builder.append(line); - if (!line.endsWith("\\")) { - builder.append(line); - break; + ArrayList list = new ArrayList(); + int length = propertyValue.length(); + for (int i = 0; i < length; i++) { + char ch = propertyValue.charAt(i); + if (ch == '\\' && i < length - 1) { + char nextCh = propertyValue.charAt(i + 1); + String unescapedString = maybeUnescape(nextCh); + if (unescapedString != null) { + builder.append(unescapedString); + i++; } else { - builder.append(line.substring(0, line.length() - 1)); + builder.append(ch); } + } else if (ch == ';') { + list.add(builder.toString()); + builder = new StringBuilder(); + } else { + builder.append(ch); } - } catch (IOException e) { - throw new VCardException( - "IOException is throw during reading propertyValue" + e); } - // Now, propertyValue may contain "\r\n" - propertyValue = builder.toString(); - } - - if (mBuilder != null) { - // In String#replaceAll() and Pattern class, "\\\\" means single slash. - - final String IMPOSSIBLE_STRING = "\0"; - // First replace two backslashes with impossible strings. - propertyValue = propertyValue.replaceAll("\\\\\\\\", IMPOSSIBLE_STRING); - - // Now, split propertyValue with ; whose previous char is not back slash. - Pattern pattern = Pattern.compile("(? arrayList = new ArrayList(); - for (String str : strArray) { - // Replace impossible strings with original two backslashes - arrayList.add( - unescapeText(str.replaceAll(IMPOSSIBLE_STRING, "\\\\\\\\"))); - } - mBuilder.propertyValues(arrayList); + list.add(builder.toString()); + mBuilder.propertyValues(list); } } /** * vCard 2.1 specifies AGENT allows one vcard entry. It is not encoded at all. + * + * item = ... + * / [groups "."] "AGENT" + * [params] ":" vcard CRLF + * vcard = "BEGIN" [ws] ":" [ws] "VCARD" [ws] 1*CRLF + * items *CRLF "END" [ws] ":" [ws] "VCARD" + * */ - protected void handleAgent(String propertyValue) throws IOException, VCardException { + protected void handleAgent(String propertyValue) throws VCardException { + throw new VCardException("AGENT Property is not supported."); + /* This is insufficient support. Also, AGENT Property is very rare. + Ignore it for now. + TODO: fix this. + String[] strArray = propertyValue.split(":", 2); if (!(strArray.length == 2 || strArray[0].trim().equalsIgnoreCase("BEGIN") && @@ -605,6 +832,7 @@ public class VCardParser_V21 { } parseItems(); readEndVCard(); + */ } /** @@ -615,17 +843,18 @@ public class VCardParser_V21 { } /** - * Convert escaped text into unescaped text. + * Returns unescaped String if the character should be unescaped. Return null otherwise. + * e.g. In vCard 2.1, "\;" should be unescaped into ";" while "\x" should not be. */ - protected String unescapeText(String text) { + protected String maybeUnescape(char ch) { // Original vCard 2.1 specification does not allow transformation // "\:" -> ":", "\," -> ",", and "\\" -> "\", but previous implementation of // this class allowed them, so keep it as is. - // In String#replaceAll(), "\\\\" means single slash. - return text.replaceAll("\\\\;", ";") - .replaceAll("\\\\:", ":") - .replaceAll("\\\\,", ",") - .replaceAll("\\\\\\\\", "\\\\"); + if (ch == '\\' || ch == ';' || ch == ':' || ch == ',') { + return String.valueOf(ch); + } else { + return null; + } } /** @@ -656,12 +885,15 @@ public class VCardParser_V21 { */ public boolean parse(InputStream is, String charset, VBuilder builder) throws IOException, VCardException { + // TODO: make this count error entries instead of just throwing VCardException. + // TODO: If we really need to allow only CRLF as line break, // we will have to develop our own BufferedReader(). - mReader = new BufferedReader(new InputStreamReader(is, charset)); + mReader = new CustomBufferedReader(new InputStreamReader(is, charset)); mBuilder = builder; + long start = System.currentTimeMillis(); if (mBuilder != null) { mBuilder.start(); } @@ -669,9 +901,50 @@ public class VCardParser_V21 { if (mBuilder != null) { mBuilder.end(); } + mTimeTotal += System.currentTimeMillis() - start; + return true; } + public boolean parse(InputStream is, VBuilder builder) throws IOException, VCardException { + return parse(is, DEFAULT_CHARSET, builder); + } + + /** + * Cancel parsing. + * Actual cancel is done after the end of the current one vcard entry parsing. + */ + public void cancel() { + mCanceled = true; + } + + /** + * It is very, very rare case, but there is a case where + * canceled may be already true outside this object. + * @hide + */ + public void parse(InputStream is, String charset, VBuilder builder, boolean canceled) + throws IOException, VCardException { + mCanceled = canceled; + parse(is, charset, builder); + } + + public void showDebugInfo() { + Log.d(LOG_TAG, "total parsing time: " + mTimeTotal + " ms"); + if (mReader instanceof CustomBufferedReader) { + Log.d(LOG_TAG, "total readLine time: " + + ((CustomBufferedReader)mReader).getTotalmillisecond() + " ms"); + } + Log.d(LOG_TAG, "mTimeStartRecord: " + mTimeStartRecord + " ms"); + Log.d(LOG_TAG, "mTimeEndRecord: " + mTimeEndRecord + " ms"); + Log.d(LOG_TAG, "mTimeParseItem1: " + mTimeParseItem1 + " ms"); + Log.d(LOG_TAG, "mTimeParseItem2: " + mTimeParseItem2 + " ms"); + Log.d(LOG_TAG, "mTimeParseItem3: " + mTimeParseItem3 + " ms"); + Log.d(LOG_TAG, "mTimeHandlePropertyValue1: " + mTimeHandlePropertyValue1 + " ms"); + Log.d(LOG_TAG, "mTimeHandlePropertyValue2: " + mTimeHandlePropertyValue2 + " ms"); + Log.d(LOG_TAG, "mTimeHandlePropertyValue3: " + mTimeHandlePropertyValue3 + " ms"); + } + private boolean isLetter(char ch) { if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) { return true; @@ -679,3 +952,24 @@ public class VCardParser_V21 { return false; } } + +class CustomBufferedReader extends BufferedReader { + private long mTime; + + public CustomBufferedReader(Reader in) { + super(in); + } + + @Override + public String readLine() throws IOException { + long start = System.currentTimeMillis(); + String ret = super.readLine(); + long end = System.currentTimeMillis(); + mTime += end - start; + return ret; + } + + public long getTotalmillisecond() { + return mTime; + } +} diff --git a/core/java/android/syncml/pim/vcard/VCardParser_V30.java b/core/java/android/syncml/pim/vcard/VCardParser_V30.java index 901bd49ef006..e67525eec332 100644 --- a/core/java/android/syncml/pim/vcard/VCardParser_V30.java +++ b/core/java/android/syncml/pim/vcard/VCardParser_V30.java @@ -16,8 +16,9 @@ package android.syncml.pim.vcard; +import android.util.Log; + import java.io.IOException; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -26,9 +27,11 @@ import java.util.HashSet; * Please refer to vCard Specification 3.0 (http://tools.ietf.org/html/rfc2426) */ public class VCardParser_V30 extends VCardParser_V21 { + private static final String LOG_TAG = "VCardParser_V30"; + private static final HashSet acceptablePropsWithParam = new HashSet( Arrays.asList( - "LOGO", "PHOTO", "LABEL", "FN", "TITLE", "SOUND", + "BEGIN", "LOGO", "PHOTO", "LABEL", "FN", "TITLE", "SOUND", "VERSION", "TEL", "EMAIL", "TZ", "GEO", "NOTE", "URL", "BDAY", "ROLE", "REV", "UID", "KEY", "MAILER", // 2.1 "NAME", "PROFILE", "SOURCE", "NICKNAME", "CLASS", @@ -51,8 +54,14 @@ public class VCardParser_V30 extends VCardParser_V21 { @Override protected boolean isValidPropertyName(String propertyName) { - return acceptablePropsWithParam.contains(propertyName) || - acceptablePropsWithoutParam.contains(propertyName); + if (!(acceptablePropsWithParam.contains(propertyName) || + acceptablePropsWithoutParam.contains(propertyName) || + propertyName.startsWith("X-")) && + !mWarningValueMap.contains(propertyName)) { + mWarningValueMap.add(propertyName); + Log.w(LOG_TAG, "Property name unsupported by vCard 3.0: " + propertyName); + } + return true; } @Override @@ -100,7 +109,21 @@ public class VCardParser_V30 extends VCardParser_V21 { } } else if (line.charAt(0) == ' ' || line.charAt(0) == '\t') { if (builder != null) { - // TODO: Check whether MIME requires only one whitespace. + // See Section 5.8.1 of RFC 2425 (MIME-DIR document). + // Following is the excerpts from it. + // + // DESCRIPTION:This is a long description that exists on a long line. + // + // Can be represented as: + // + // DESCRIPTION:This is a long description + // that exists on a long line. + // + // It could also be represented as: + // + // DESCRIPTION:This is a long descrip + // tion that exists o + // n a long line. builder.append(line.substring(1)); } else if (mPreviousLine != null) { builder = new StringBuilder(); @@ -113,10 +136,13 @@ public class VCardParser_V30 extends VCardParser_V21 { } else { if (mPreviousLine == null) { mPreviousLine = line; + if (builder != null) { + return builder.toString(); + } } else { String ret = mPreviousLine; mPreviousLine = line; - return ret; + return ret; } } } @@ -130,15 +156,16 @@ public class VCardParser_V30 extends VCardParser_V21 { * [group "."] "END" ":" "VCARD" 1*CRLF */ @Override - protected boolean readBeginVCard() throws IOException, VCardException { + protected boolean readBeginVCard(boolean allowGarbage) throws IOException, VCardException { // TODO: vCard 3.0 supports group. - return super.readBeginVCard(); + return super.readBeginVCard(allowGarbage); } @Override - protected void readEndVCard() throws VCardException { + protected void readEndVCard(boolean useCache, boolean allowGarbage) + throws IOException, VCardException { // TODO: vCard 3.0 supports group. - super.readEndVCard(); + super.readEndVCard(useCache, allowGarbage); } /** @@ -214,23 +241,6 @@ public class VCardParser_V30 extends VCardParser_V21 { throw new VCardException("AGENT in vCard 3.0 is not supported yet."); } - // vCard 3.0 supports "B" as BASE64 encoding. - @Override - protected void handlePropertyValue( - String propertyName, String propertyValue) throws - IOException, VCardException { - if (mEncoding != null && mEncoding.equalsIgnoreCase("B")) { - String result = getBase64(propertyValue); - if (mBuilder != null) { - ArrayList v = new ArrayList(); - v.add(result); - mBuilder.propertyValues(v); - } - } - - super.handlePropertyValue(propertyName, propertyValue); - } - /** * vCard 3.0 does not require two CRLF at the last of BASE64 data. * It only requires that data should be MIME-encoded. @@ -258,28 +268,39 @@ public class VCardParser_V30 extends VCardParser_V21 { return builder.toString(); } - /** - * Return unescapeText(text). - * In vCard 3.0, 8bit text is always encoded. - */ - @Override - protected String maybeUnescapeText(String text) { - return unescapeText(text); - } - /** * ESCAPED-CHAR = "\\" / "\;" / "\," / "\n" / "\N") * ; \\ encodes \, \n or \N encodes newline * ; \; encodes ;, \, encodes , - */ + * + * Note: Apple escape ':' into '\:' while does not escape '\' + */ @Override - protected String unescapeText(String text) { - // In String#replaceAll(), "\\\\" means single slash. - return text.replaceAll("\\\\;", ";") - .replaceAll("\\\\:", ":") - .replaceAll("\\\\,", ",") - .replaceAll("\\\\n", "\r\n") - .replaceAll("\\\\N", "\r\n") - .replaceAll("\\\\\\\\", "\\\\"); + protected String maybeUnescapeText(String text) { + StringBuilder builder = new StringBuilder(); + int length = text.length(); + for (int i = 0; i < length; i++) { + char ch = text.charAt(i); + if (ch == '\\' && i < length - 1) { + char next_ch = text.charAt(++i); + if (next_ch == 'n' || next_ch == 'N') { + builder.append("\r\n"); + } else { + builder.append(next_ch); + } + } else { + builder.append(ch); + } + } + return builder.toString(); + } + + @Override + protected String maybeUnescape(char ch) { + if (ch == 'n' || ch == 'N') { + return "\r\n"; + } else { + return String.valueOf(ch); + } } } diff --git a/core/java/android/syncml/pim/vcard/VCardSourceDetector.java b/core/java/android/syncml/pim/vcard/VCardSourceDetector.java new file mode 100644 index 000000000000..8c483912335b --- /dev/null +++ b/core/java/android/syncml/pim/vcard/VCardSourceDetector.java @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.syncml.pim.vcard; + +import android.syncml.pim.VBuilder; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * Class which tries to detects the source of the vCard from its properties. + * Currently this implementation is very premature. + * @hide + */ +public class VCardSourceDetector implements VBuilder { + // Should only be used in package. + static final int TYPE_UNKNOWN = 0; + static final int TYPE_APPLE = 1; + static final int TYPE_JAPANESE_MOBILE_PHONE = 2; // Used in Japanese mobile phones. + static final int TYPE_FOMA = 3; // Used in some Japanese FOMA mobile phones. + static final int TYPE_WINDOWS_MOBILE_JP = 4; + // TODO: Excel, etc. + + private static Set APPLE_SIGNS = new HashSet(Arrays.asList( + "X-PHONETIC-FIRST-NAME", "X-PHONETIC-MIDDLE-NAME", "X-PHONETIC-LAST-NAME", + "X-ABADR", "X-ABUID")); + + private static Set JAPANESE_MOBILE_PHONE_SIGNS = new HashSet(Arrays.asList( + "X-GNO", "X-GN", "X-REDUCTION")); + + private static Set WINDOWS_MOBILE_PHONE_SIGNS = new HashSet(Arrays.asList( + "X-MICROSOFT-ASST_TEL", "X-MICROSOFT-ASSISTANT", "X-MICROSOFT-OFFICELOC")); + + // Note: these signes appears before the signs of the other type (e.g. "X-GN"). + // In other words, Japanese FOMA mobile phones are detected as FOMA, not JAPANESE_MOBILE_PHONES. + private static Set FOMA_SIGNS = new HashSet(Arrays.asList( + "X-SD-VERN", "X-SD-FORMAT_VER", "X-SD-CATEGORIES", "X-SD-CLASS", "X-SD-DCREATED", + "X-SD-DESCRIPTION")); + private static String TYPE_FOMA_CHARSET_SIGN = "X-SD-CHAR_CODE"; + + private int mType = TYPE_UNKNOWN; + // Some mobile phones (like FOMA) tells us the charset of the data. + private boolean mNeedParseSpecifiedCharset; + private String mSpecifiedCharset; + + public void start() { + } + + public void end() { + } + + public void startRecord(String type) { + } + + public void startProperty() { + mNeedParseSpecifiedCharset = false; + } + + public void endProperty() { + } + + public void endRecord() { + } + + public void propertyGroup(String group) { + } + + public void propertyName(String name) { + if (name.equalsIgnoreCase(TYPE_FOMA_CHARSET_SIGN)) { + mType = TYPE_FOMA; + mNeedParseSpecifiedCharset = true; + return; + } + if (mType != TYPE_UNKNOWN) { + return; + } + if (WINDOWS_MOBILE_PHONE_SIGNS.contains(name)) { + mType = TYPE_WINDOWS_MOBILE_JP; + } else if (FOMA_SIGNS.contains(name)) { + mType = TYPE_FOMA; + } else if (JAPANESE_MOBILE_PHONE_SIGNS.contains(name)) { + mType = TYPE_JAPANESE_MOBILE_PHONE; + } else if (APPLE_SIGNS.contains(name)) { + mType = TYPE_APPLE; + } + } + + public void propertyParamType(String type) { + } + + public void propertyParamValue(String value) { + } + + public void propertyValues(List values) { + if (mNeedParseSpecifiedCharset && values.size() > 0) { + mSpecifiedCharset = values.get(0); + } + } + + int getType() { + return mType; + } + + /** + * Return charset String guessed from the source's properties. + * This method must be called after parsing target file(s). + * @return Charset String. Null is returned if guessing the source fails. + */ + public String getEstimatedCharset() { + if (mSpecifiedCharset != null) { + return mSpecifiedCharset; + } + switch (mType) { + case TYPE_WINDOWS_MOBILE_JP: + case TYPE_FOMA: + case TYPE_JAPANESE_MOBILE_PHONE: + return "SHIFT_JIS"; + case TYPE_APPLE: + return "UTF-8"; + default: + return null; + } + } +} diff --git a/core/java/android/test/AndroidTestCase.java b/core/java/android/test/AndroidTestCase.java index 9bafa32e42a9..de0587ab7366 100644 --- a/core/java/android/test/AndroidTestCase.java +++ b/core/java/android/test/AndroidTestCase.java @@ -16,12 +16,14 @@ package android.test; +import android.content.ContentValues; import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import junit.framework.TestCase; import java.lang.reflect.Field; -import junit.framework.TestCase; - /** * Extend this if you need to access Resources or other things that depend on Activity Context. */ @@ -52,6 +54,72 @@ public class AndroidTestCase extends TestCase { return mContext; } + /** + * Asserts that launching a given activity is protected by a particular permission by + * attempting to start the activity and validating that a {@link SecurityException} + * is thrown that mentions the permission in its error message. + * + * Note that an instrumentation isn't needed because all we are looking for is a security error + * and we don't need to wait for the activity to launch and get a handle to the activity. + * + * @param packageName The package name of the activity to launch. + * @param className The class of the activity to launch. + * @param permission The name of the permission. + */ + public void assertActivityRequiresPermission( + String packageName, String className, String permission) { + final Intent intent = new Intent(); + intent.setClassName(packageName, className); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + + try { + getContext().startActivity(intent); + fail("expected security exception for " + permission); + } catch (SecurityException expected) { + assertNotNull("security exception's error message.", expected.getMessage()); + assertTrue("error message should contain " + permission + ".", + expected.getMessage().contains(permission)); + } + } + + + /** + * Asserts that reading from the content uri requires a particular permission by querying the + * uri and ensuring a {@link SecurityException} is thrown mentioning the particular permission. + * + * @param uri The uri that requires a permission to query. + * @param permission The permission that should be required. + */ + public void assertReadingContentUriRequiresPermission(Uri uri, String permission) { + try { + getContext().getContentResolver().query(uri, null, null, null, null); + fail("expected SecurityException requiring " + permission); + } catch (SecurityException expected) { + assertNotNull("security exception's error message.", expected.getMessage()); + assertTrue("error message should contain " + permission + ".", + expected.getMessage().contains(permission)); + } + } + + /** + * Asserts that writing to the content uri requires a particular permission by inserting into + * the uri and ensuring a {@link SecurityException} is thrown mentioning the particular + * permission. + * + * @param uri The uri that requires a permission to query. + * @param permission The permission that should be required. + */ + public void assertWritingContentUriRequiresPermission(Uri uri, String permission) { + try { + getContext().getContentResolver().insert(uri, new ContentValues()); + fail("expected SecurityException requiring " + permission); + } catch (SecurityException expected) { + assertNotNull("security exception's error message.", expected.getMessage()); + assertTrue("error message should contain " + permission + ".", + expected.getMessage().contains(permission)); + } + } + /** * This function is called by various TestCase implementations, at tearDown() time, in order * to scrub out any class variables. This protects against memory leaks in the case where a diff --git a/core/java/android/test/InstrumentationTestCase.java b/core/java/android/test/InstrumentationTestCase.java index 470ab0d9a48e..2145d7cc7891 100644 --- a/core/java/android/test/InstrumentationTestCase.java +++ b/core/java/android/test/InstrumentationTestCase.java @@ -241,7 +241,13 @@ public class InstrumentationTestCase extends TestCase { try { final Field keyCodeField = KeyEvent.class.getField("KEYCODE_" + key); final int keyCode = keyCodeField.getInt(null); - instrumentation.sendKeyDownUpSync(keyCode); + try { + instrumentation.sendKeyDownUpSync(keyCode); + } catch (SecurityException e) { + // Ignore security exceptions that are now thrown + // when trying to send to another app, to retain + // compatibility with existing tests. + } } catch (NoSuchFieldException e) { Log.w("ActivityTestCase", "Unknown keycode: KEYCODE_" + key); break; @@ -266,7 +272,13 @@ public class InstrumentationTestCase extends TestCase { final Instrumentation instrumentation = getInstrumentation(); for (int i = 0; i < count; i++) { - instrumentation.sendKeyDownUpSync(keys[i]); + try { + instrumentation.sendKeyDownUpSync(keys[i]); + } catch (SecurityException e) { + // Ignore security exceptions that are now thrown + // when trying to send to another app, to retain + // compatibility with existing tests. + } } instrumentation.waitForIdleSync(); @@ -292,7 +304,13 @@ public class InstrumentationTestCase extends TestCase { final int keyCount = keys[i]; final int keyCode = keys[i + 1]; for (int j = 0; j < keyCount; j++) { - instrumentation.sendKeyDownUpSync(keyCode); + try { + instrumentation.sendKeyDownUpSync(keyCode); + } catch (SecurityException e) { + // Ignore security exceptions that are now thrown + // when trying to send to another app, to retain + // compatibility with existing tests. + } } } diff --git a/core/java/android/text/LoginFilter.java b/core/java/android/text/LoginFilter.java index 27c703f1f083..9045c09fb660 100644 --- a/core/java/android/text/LoginFilter.java +++ b/core/java/android/text/LoginFilter.java @@ -49,10 +49,6 @@ public abstract class LoginFilter implements InputFilter { */ public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { - char[] out = new char[end - start]; // reserve enough space for whole string - int outidx = 0; - boolean changed = false; - onStart(); // Scan through beginning characters in dest, calling onInvalidCharacter() @@ -63,14 +59,26 @@ public abstract class LoginFilter implements InputFilter { } // Scan through changed characters rejecting disallowed chars + SpannableStringBuilder modification = null; + int modoff = 0; + for (int i = start; i < end; i++) { char c = source.charAt(i); if (isAllowed(c)) { - // Character allowed. Add it to the sequence. - out[outidx++] = c; + // Character allowed. + modoff++; } else { - if (mAppendInvalid) out[outidx++] = c; - else changed = true; // we changed the original string + if (mAppendInvalid) { + modoff++; + } else { + if (modification == null) { + modification = new SpannableStringBuilder(source, start, end); + modoff = i - start; + } + + modification.delete(modoff, modoff + 1); + } + onInvalidCharacter(c); } } @@ -84,20 +92,9 @@ public abstract class LoginFilter implements InputFilter { onStop(); - if (!changed) { - return null; - } - - String s = new String(out, 0, outidx); - - if (source instanceof Spanned) { - SpannableString sp = new SpannableString(s); - TextUtils.copySpansFrom((Spanned) source, - start, end, null, sp, 0); - return sp; - } else { - return s; - } + // Either returns null if we made no changes, + // or what we wanted to change it to if there were changes. + return modification; } /** diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java index 5b4c3802b3ce..53096dddefb5 100644 --- a/core/java/android/text/TextUtils.java +++ b/core/java/android/text/TextUtils.java @@ -916,6 +916,17 @@ public class TextUtils { sp.setSpan(o, p.readInt(), p.readInt(), p.readInt()); } + /** + * Copies the spans from the region start...end in + * source to the region + * destoff...destoff+end-start in dest. + * Spans in source that begin before start + * or end after end but overlap this range are trimmed + * as if they began at start or ended at end. + * + * @throws IndexOutOfBoundsException if any of the copied spans + * are out of range in dest. + */ public static void copySpansFrom(Spanned source, int start, int end, Class kind, Spannable dest, int destoff) { diff --git a/core/java/android/text/format/DateFormat.java b/core/java/android/text/format/DateFormat.java index 0dc96c369b78..3d10f171538c 100644 --- a/core/java/android/text/format/DateFormat.java +++ b/core/java/android/text/format/DateFormat.java @@ -242,7 +242,7 @@ public class DateFormat { /** * Returns a {@link java.text.DateFormat} object that can format the time according - * to the current user preference. + * to the current locale and the user's 12-/24-hour clock preference. * @param context the application context * @return the {@link java.text.DateFormat} object that properly formats the time. */ @@ -260,46 +260,88 @@ public class DateFormat { } /** - * Returns a {@link java.text.DateFormat} object that can format the date according - * to the current user preference. + * 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 * @return the {@link java.text.DateFormat} object that properly formats the date. */ public static final java.text.DateFormat getDateFormat(Context context) { - String value = getDateFormatString(context); + String value = Settings.System.getString(context.getContentResolver(), + Settings.System.DATE_FORMAT); + + return getDateFormatForSetting(context, value); + } + + /** + * Returns a {@link java.text.DateFormat} object to format the date + * as if the date format setting were set to value, + * including null to use the locale's default format. + * @param context the application context + * @param value the date format setting string to interpret for + * the current locale + * @hide + */ + public static java.text.DateFormat getDateFormatForSetting(Context context, + String value) { + if (value != null) { + int month = value.indexOf('M'); + int day = value.indexOf('d'); + int year = value.indexOf('y'); + + if (month >= 0 && day >= 0 && year >= 0) { + String template = context.getString(R.string.numeric_date_template); + if (year < month) { + if (month < day) { + value = String.format(template, "yyyy", "MM", "dd"); + } else { + value = String.format(template, "yyyy", "dd", "MM"); + } + } else if (month < day) { + if (day < year) { + value = String.format(template, "MM", "dd", "yyyy"); + } else { // unlikely + value = String.format(template, "MM", "yyyy", "dd"); + } + } else { // day < month + if (month < year) { + value = String.format(template, "dd", "MM", "yyyy"); + } else { // unlikely + value = String.format(template, "dd", "yyyy", "MM"); + } + } + + return new java.text.SimpleDateFormat(value); + } + } + + /* + * The setting is not set; use the default. + * We use a resource string here instead of just DateFormat.SHORT + * so that we get a four-digit year instead a two-digit year. + */ + value = context.getString(R.string.numeric_date_format); return new java.text.SimpleDateFormat(value); } /** * Returns a {@link java.text.DateFormat} object that can format the date - * in long form (such as December 31, 1999) based on user preference. + * in long form (such as December 31, 1999) for the current locale. * @param context the application context * @return the {@link java.text.DateFormat} object that formats the date in long form. */ public static final java.text.DateFormat getLongDateFormat(Context context) { - String value = getDateFormatString(context); - if (value.indexOf('M') < value.indexOf('d')) { - value = context.getString(R.string.full_date_month_first); - } else { - value = context.getString(R.string.full_date_day_first); - } - return new java.text.SimpleDateFormat(value); + return java.text.DateFormat.getDateInstance(java.text.DateFormat.LONG); } /** * Returns a {@link java.text.DateFormat} object that can format the date - * in medium form (such as Dec. 31, 1999) based on user preference. + * in medium form (such as Dec. 31, 1999) for the current locale. * @param context the application context * @return the {@link java.text.DateFormat} object that formats the date in long form. */ public static final java.text.DateFormat getMediumDateFormat(Context context) { - String value = getDateFormatString(context); - if (value.indexOf('M') < value.indexOf('d')) { - value = context.getString(R.string.medium_date_month_first); - } else { - value = context.getString(R.string.medium_date_day_first); - } - return new java.text.SimpleDateFormat(value); + return java.text.DateFormat.getDateInstance(java.text.DateFormat.MEDIUM); } /** @@ -338,6 +380,12 @@ public class DateFormat { } private static String getDateFormatString(Context context) { + java.text.DateFormat df; + df = java.text.DateFormat.getDateInstance(java.text.DateFormat.SHORT); + if (df instanceof SimpleDateFormat) { + return ((SimpleDateFormat) df).toPattern(); + } + String value = Settings.System.getString(context.getContentResolver(), Settings.System.DATE_FORMAT); if (value == null || value.length() < 6) { diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java index 8a7cdd92950f..1a4eb699b56d 100644 --- a/core/java/android/text/format/DateUtils.java +++ b/core/java/android/text/format/DateUtils.java @@ -62,15 +62,6 @@ public class DateUtils com.android.internal.R.string.day_of_week_short_friday, com.android.internal.R.string.day_of_week_short_saturday, }; - private static final int[] sDaysShorter = new int[] { - com.android.internal.R.string.day_of_week_shorter_sunday, - com.android.internal.R.string.day_of_week_shorter_monday, - com.android.internal.R.string.day_of_week_shorter_tuesday, - com.android.internal.R.string.day_of_week_shorter_wednesday, - com.android.internal.R.string.day_of_week_shorter_thursday, - com.android.internal.R.string.day_of_week_shorter_friday, - com.android.internal.R.string.day_of_week_shorter_saturday, - }; private static final int[] sDaysShortest = new int[] { com.android.internal.R.string.day_of_week_shortest_sunday, com.android.internal.R.string.day_of_week_shortest_monday, @@ -80,6 +71,20 @@ public class DateUtils com.android.internal.R.string.day_of_week_shortest_friday, com.android.internal.R.string.day_of_week_shortest_saturday, }; + private static final int[] sMonthsStandaloneLong = new int [] { + com.android.internal.R.string.month_long_standalone_january, + com.android.internal.R.string.month_long_standalone_february, + com.android.internal.R.string.month_long_standalone_march, + com.android.internal.R.string.month_long_standalone_april, + com.android.internal.R.string.month_long_standalone_may, + com.android.internal.R.string.month_long_standalone_june, + com.android.internal.R.string.month_long_standalone_july, + com.android.internal.R.string.month_long_standalone_august, + com.android.internal.R.string.month_long_standalone_september, + com.android.internal.R.string.month_long_standalone_october, + com.android.internal.R.string.month_long_standalone_november, + com.android.internal.R.string.month_long_standalone_december, + }; private static final int[] sMonthsLong = new int [] { com.android.internal.R.string.month_long_january, com.android.internal.R.string.month_long_february, @@ -127,7 +132,7 @@ public class DateUtils com.android.internal.R.string.pm, }; private static Configuration sLastConfig; - private static String sStatusTimeFormat; + private static java.text.DateFormat sStatusTimeFormat; private static String sElapsedFormatMMSS; private static String sElapsedFormatHMMSS; @@ -142,6 +147,9 @@ public class DateUtils public static final long HOUR_IN_MILLIS = MINUTE_IN_MILLIS * 60; public static final long DAY_IN_MILLIS = HOUR_IN_MILLIS * 24; public static final long WEEK_IN_MILLIS = DAY_IN_MILLIS * 7; + /** + * This constant is actually the length of 364 days, not of a year! + */ public static final long YEAR_IN_MILLIS = WEEK_IN_MILLIS * 52; // The following FORMAT_* symbols are used for specifying the format of @@ -171,8 +179,14 @@ public class DateUtils // Date and time format strings that are constant and don't need to be // translated. + /** + * This is not actually the preferred 24-hour date format in all locales. + */ 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. + */ public static final String ABBREV_MONTH_FORMAT = "%b"; public static final String NUMERIC_MONTH_FORMAT = "%m"; public static final String MONTH_DAY_FORMAT = "%-d"; @@ -255,18 +269,15 @@ public class DateUtils * For use with the 'abbrev' parameter of {@link #getDayOfWeekString} and {@link #getMonthString}. * @more *

        e.g. "Su" or "Jan" - *

        In some languages, the results returned for LENGTH_SHORT may be the same as - * return for {@link #LENGTH_MEDIUM}. + *

        In most languages, the results returned for LENGTH_SHORT will be the same as + * the results returned for {@link #LENGTH_MEDIUM}. */ public static final int LENGTH_SHORT = 30; /** * Request an even shorter abbreviated version of the name. - * For use with the 'abbrev' parameter of {@link #getDayOfWeekString} and {@link #getMonthString}. - * @more - *

        e.g. "M", "Tu", "Th" or "J" - *

        In some languages, the results returned for LENGTH_SHORTEST may be the same as - * return for {@link #LENGTH_SHORTER}. + * Do not use this. Currently this will always return the same result + * as {@link #LENGTH_SHORT}. */ public static final int LENGTH_SHORTER = 40; @@ -275,8 +286,8 @@ public class DateUtils * For use with the 'abbrev' parameter of {@link #getDayOfWeekString} and {@link #getMonthString}. * @more *

        e.g. "S", "T", "T" or "J" - *

        In some languages, the results returned for LENGTH_SHORTEST may be the same as - * return for {@link #LENGTH_SHORTER}. + *

        In some languages, the results returned for LENGTH_SHORTEST will be the same as + * the results returned for {@link #LENGTH_SHORT}. */ public static final int LENGTH_SHORTEST = 50; @@ -284,9 +295,12 @@ public class DateUtils * Return a string for the day of the week. * @param dayOfWeek One of {@link Calendar#SUNDAY Calendar.SUNDAY}, * {@link Calendar#MONDAY Calendar.MONDAY}, etc. - * @param abbrev One of {@link #LENGTH_LONG}, {@link #LENGTH_SHORT}, {@link #LENGTH_SHORTER} - * or {@link #LENGTH_SHORTEST}. For forward compatibility, anything else - * will return the same as {#LENGTH_MEDIUM}. + * @param abbrev One of {@link #LENGTH_LONG}, {@link #LENGTH_SHORT}, + * {@link #LENGTH_MEDIUM}, or {@link #LENGTH_SHORTEST}. + * Note that in most languages, {@link #LENGTH_SHORT} + * will return the same as {@link #LENGTH_MEDIUM}. + * Undefined lengths will return {@link #LENGTH_MEDIUM} + * but may return something different in the future. * @throws IndexOutOfBoundsException if the dayOfWeek is out of bounds. */ public static String getDayOfWeekString(int dayOfWeek, int abbrev) { @@ -295,7 +309,7 @@ public class DateUtils case LENGTH_LONG: list = sDaysLong; break; case LENGTH_MEDIUM: list = sDaysMedium; break; case LENGTH_SHORT: list = sDaysShort; break; - case LENGTH_SHORTER: list = sDaysShorter; break; + case LENGTH_SHORTER: list = sDaysShort; break; case LENGTH_SHORTEST: list = sDaysShortest; break; default: list = sDaysMedium; break; } @@ -316,13 +330,14 @@ public class DateUtils } /** - * Return a localized string for the day of the week. + * Return a localized string for the month of the year. * @param month One of {@link Calendar#JANUARY Calendar.JANUARY}, * {@link Calendar#FEBRUARY Calendar.FEBRUARY}, etc. - * @param abbrev One of {@link #LENGTH_LONG}, {@link #LENGTH_SHORT}, {@link #LENGTH_SHORTER} - * or {@link #LENGTH_SHORTEST}. For forward compatibility, anything else - * will return the same as {#LENGTH_MEDIUM}. - * @return Localized day of the week. + * @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. */ public static String getMonthString(int month, int abbrev) { // Note that here we use sMonthsMedium for MEDIUM, SHORT and SHORTER. @@ -343,6 +358,40 @@ public class DateUtils return r.getString(list[month - Calendar.JANUARY]); } + /** + * 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 + */ + public static String getStandaloneMonthString(int month, int abbrev) { + // Note that here we use sMonthsMedium 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. + int[] list; + switch (abbrev) { + case LENGTH_LONG: list = sMonthsStandaloneLong; + break; + case LENGTH_MEDIUM: list = sMonthsMedium; break; + case LENGTH_SHORT: list = sMonthsMedium; break; + case LENGTH_SHORTER: list = sMonthsMedium; break; + case LENGTH_SHORTEST: list = sMonthsShortest; break; + default: list = sMonthsMedium; break; + } + + Resources r = Resources.getSystem(); + return r.getString(list[month - Calendar.JANUARY]); + } + /** * Returns a string describing the elapsed time since startTime. * @param startTime some time in the past. @@ -572,7 +621,7 @@ public class DateUtils Configuration cfg = r.getConfiguration(); if (sLastConfig == null || !sLastConfig.equals(cfg)) { sLastConfig = cfg; - sStatusTimeFormat = r.getString(com.android.internal.R.string.status_bar_time_format); + 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); } @@ -586,7 +635,7 @@ public class DateUtils */ public static final CharSequence timeString(long millis) { initFormatStrings(); - return DateFormat.format(sStatusTimeFormat, millis); + return sStatusTimeFormat.format(millis); } /** @@ -1066,7 +1115,9 @@ public class DateUtils * *

        * If FORMAT_CAP_AMPM is set and 12-hour time is used, then the "AM" - * and "PM" are capitalized. + * and "PM" are capitalized. You should not use this flag + * because in some locales these terms cannot be capitalized, and in + * many others it doesn't make sense to do so even though it is possible. * *

        * If FORMAT_NO_NOON is set and 12-hour time is used, then "12pm" is @@ -1074,15 +1125,19 @@ public class DateUtils * *

        * If FORMAT_CAP_NOON is set and 12-hour time is used, then "Noon" is - * shown instead of "noon". + * shown instead of "noon". You should probably not use this flag + * because in many locales it will not make sense to capitalize + * the term. * *

        * If FORMAT_NO_MIDNIGHT is set and 12-hour time is used, then "12am" is * shown instead of "midnight". * *

        - * If FORMAT_CAP_NOON is set and 12-hour time is used, then "Midnight" is - * shown instead of "midnight". + * If FORMAT_CAP_MIDNIGHT is set and 12-hour time is used, then "Midnight" + * is shown instead of "midnight". You should probably not use this + * flag because in many locales it will not make sense to capitalize + * the term. * *

        * If FORMAT_12HOUR is set and the time is shown, then the time is @@ -1224,8 +1279,8 @@ public class DateUtils use24Hour = DateFormat.is24HourFormat(context); } if (use24Hour) { - startTimeFormat = HOUR_MINUTE_24; - endTimeFormat = HOUR_MINUTE_24; + startTimeFormat = endTimeFormat = + res.getString(com.android.internal.R.string.hour_minute_24); } else { boolean abbrevTime = (flags & (FORMAT_ABBREV_TIME | FORMAT_ABBREV_ALL)) != 0; boolean capAMPM = (flags & FORMAT_CAP_AMPM) != 0; @@ -1392,7 +1447,8 @@ public class DateUtils if (numericDate) { monthFormat = NUMERIC_MONTH_FORMAT; } else if (abbrevMonth) { - monthFormat = ABBREV_MONTH_FORMAT; + monthFormat = + res.getString(com.android.internal.R.string.short_format_month); } else { monthFormat = MONTH_FORMAT; } diff --git a/core/java/android/text/format/Formatter.java b/core/java/android/text/format/Formatter.java index 1b30aa0a218c..367b26ce45d3 100644 --- a/core/java/android/text/format/Formatter.java +++ b/core/java/android/text/format/Formatter.java @@ -59,9 +59,15 @@ public final class Formatter { result = result / 1024; } if (result < 100) { - return String.format("%.2f%s", result, context.getText(suffix).toString()); + String value = String.format("%.2f", result); + return context.getResources(). + getString(com.android.internal.R.string.fileSizeSuffix, + value, context.getString(suffix)); } - return String.format("%.0f%s", result, context.getText(suffix).toString()); + String value = String.format("%.0f", result); + return context.getResources(). + getString(com.android.internal.R.string.fileSizeSuffix, + value, context.getString(suffix)); } /** diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java index daa99c250bfa..8eae111ee5d3 100644 --- a/core/java/android/text/format/Time.java +++ b/core/java/android/text/format/Time.java @@ -135,6 +135,7 @@ public class Time { private static Locale sLocale; private static String[] sShortMonths; private static String[] sLongMonths; + private static String[] sLongStandaloneMonths; private static String[] sShortWeekdays; private static String[] sLongWeekdays; private static String sTimeOnlyFormat; @@ -321,6 +322,20 @@ public class Time { r.getString(com.android.internal.R.string.month_long_november), r.getString(com.android.internal.R.string.month_long_december), }; + sLongStandaloneMonths = new String[] { + r.getString(com.android.internal.R.string.month_long_standalone_january), + r.getString(com.android.internal.R.string.month_long_standalone_february), + r.getString(com.android.internal.R.string.month_long_standalone_march), + r.getString(com.android.internal.R.string.month_long_standalone_april), + r.getString(com.android.internal.R.string.month_long_standalone_may), + r.getString(com.android.internal.R.string.month_long_standalone_june), + r.getString(com.android.internal.R.string.month_long_standalone_july), + r.getString(com.android.internal.R.string.month_long_standalone_august), + r.getString(com.android.internal.R.string.month_long_standalone_september), + r.getString(com.android.internal.R.string.month_long_standalone_october), + r.getString(com.android.internal.R.string.month_long_standalone_november), + r.getString(com.android.internal.R.string.month_long_standalone_december), + }; sShortWeekdays = new String[] { r.getString(com.android.internal.R.string.day_of_week_medium_sunday), r.getString(com.android.internal.R.string.day_of_week_medium_monday), @@ -438,6 +453,7 @@ public class Time { * * @param s the string to parse * @return true if the resulting time value is in UTC time + * @throws android.util.TimeFormatException if s cannot be parsed. */ public boolean parse3339(String s) { if (nativeParse3339(s)) { diff --git a/core/java/android/text/method/DialerKeyListener.java b/core/java/android/text/method/DialerKeyListener.java index b121e608b5b5..584e83f53e53 100644 --- a/core/java/android/text/method/DialerKeyListener.java +++ b/core/java/android/text/method/DialerKeyListener.java @@ -106,7 +106,7 @@ public class DialerKeyListener extends NumberKeyListener */ public static final char[] CHARACTERS = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '#', '*', - '+', '-', '(', ')', ',', '/', 'N', '.', ' ' + '+', '-', '(', ')', ',', '/', 'N', '.', ' ', ';' }; private static DialerKeyListener sInstance; diff --git a/core/java/android/text/method/Touch.java b/core/java/android/text/method/Touch.java index f2fb9cb68d7f..dfc16f5adf7f 100644 --- a/core/java/android/text/method/Touch.java +++ b/core/java/android/text/method/Touch.java @@ -81,6 +81,12 @@ public class Touch { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: + ds = buffer.getSpans(0, buffer.length(), DragState.class); + + for (int i = 0; i < ds.length; i++) { + buffer.removeSpan(ds[i]); + } + buffer.setSpan(new DragState(event.getX(), event.getY(), widget.getScrollX(), widget.getScrollY()), 0, 0, Spannable.SPAN_MARK_MARK); diff --git a/core/java/android/util/CharsetUtils.java b/core/java/android/util/CharsetUtils.java index 75530296d2d9..9d91acaa5f87 100644 --- a/core/java/android/util/CharsetUtils.java +++ b/core/java/android/util/CharsetUtils.java @@ -142,20 +142,25 @@ public final class CharsetUtils { /** * Returns whether the given character set name indicates the Shift-JIS - * encoding. + * encoding. Returns false if the name is null. * * @param charsetName the character set name * @return {@code true} if the name corresponds to Shift-JIS or * {@code false} if not */ private static boolean isShiftJis(String charsetName) { - if (charsetName.length() != 9) { - // Bail quickly if the length doesn't match. + // Bail quickly if the length doesn't match. + if (charsetName == null) { + return false; + } + int length = charsetName.length(); + if (length != 4 && length != 9) { return false; } return charsetName.equalsIgnoreCase("shift_jis") - || charsetName.equalsIgnoreCase("shift-jis"); + || charsetName.equalsIgnoreCase("shift-jis") + || charsetName.equalsIgnoreCase("sjis"); } /** diff --git a/core/java/android/util/DisplayMetrics.java b/core/java/android/util/DisplayMetrics.java index e4dd020e1a81..4179edbe7f9c 100644 --- a/core/java/android/util/DisplayMetrics.java +++ b/core/java/android/util/DisplayMetrics.java @@ -16,6 +16,8 @@ package android.util; +import android.content.res.CompatibilityInfo; +import android.content.res.Configuration; import android.os.*; @@ -35,8 +37,7 @@ public class DisplayMetrics { * The device's density. * @hide */ - public static final int DEVICE_DENSITY = SystemProperties.getInt("ro.sf.lcd_density", - DEFAULT_DENSITY); + public static final int DEVICE_DENSITY = getDeviceDensity(); /** * The absolute width of the display in pixels. @@ -101,22 +102,83 @@ public class DisplayMetrics { } /** - * Set the display metrics' density and update parameters depend on it. - * @hide + * Update the display metrics based on the compatibility info and orientation + * NOTE: DO NOT EXPOSE THIS API! It is introducing a circular dependency + * with the higher-level android.res package. + * {@hide} */ - public void updateDensity(float newDensity) { - float ratio = newDensity / density; - density = newDensity; - scaledDensity = density; - widthPixels *= ratio; - heightPixels *= ratio; - xdpi *= ratio; - ydpi *= ratio; + public void updateMetrics(CompatibilityInfo compatibilityInfo, int orientation, + int screenLayout) { + int xOffset = 0; + if (!compatibilityInfo.isConfiguredExpandable()) { + // Note: this assume that configuration is updated before calling + // updateMetrics method. + if (screenLayout == Configuration.SCREENLAYOUT_LARGE) { + // This is a large screen device and the app is not + // compatible with large screens, to diddle it. + + compatibilityInfo.setExpandable(false); + // Figure out the compatibility width and height of the screen. + int defaultWidth; + int defaultHeight; + switch (orientation) { + case Configuration.ORIENTATION_LANDSCAPE: { + defaultWidth = (int)(CompatibilityInfo.DEFAULT_PORTRAIT_HEIGHT * density); + defaultHeight = (int)(CompatibilityInfo.DEFAULT_PORTRAIT_WIDTH * density); + break; + } + case Configuration.ORIENTATION_PORTRAIT: + case Configuration.ORIENTATION_SQUARE: + default: { + defaultWidth = (int)(CompatibilityInfo.DEFAULT_PORTRAIT_WIDTH * density); + defaultHeight = (int)(CompatibilityInfo.DEFAULT_PORTRAIT_HEIGHT * density); + break; + } + case Configuration.ORIENTATION_UNDEFINED: { + // don't change + return; + } + } + + if (defaultWidth < widthPixels) { + // content/window's x offset in original pixels + xOffset = ((widthPixels - defaultWidth) / 2); + widthPixels = defaultWidth; + } + if (defaultHeight < heightPixels) { + heightPixels = defaultHeight; + } + + } else { + // the screen size is same as expected size. make it expandable + compatibilityInfo.setExpandable(true); + } + } + compatibilityInfo.setVisibleRect(xOffset, widthPixels, heightPixels); + if (compatibilityInfo.isScalingRequired()) { + float invertedRatio = compatibilityInfo.applicationInvertedScale; + density *= invertedRatio; + scaledDensity *= invertedRatio; + xdpi *= invertedRatio; + ydpi *= invertedRatio; + widthPixels *= invertedRatio; + heightPixels *= invertedRatio; + } } + @Override public String toString() { return "DisplayMetrics{density=" + density + ", width=" + widthPixels + ", height=" + heightPixels + ", scaledDensity=" + scaledDensity + ", xdpi=" + xdpi + ", ydpi=" + ydpi + "}"; } + + private static int getDeviceDensity() { + // qemu.sf.lcd_density can be used to override ro.sf.lcd_density + // when running in the emulator, allowing for dynamic configurations. + // The reason for this is that ro.sf.lcd_density is write-once and is + // set by the init process when it parses build.prop before anything else. + return SystemProperties.getInt("qemu.sf.lcd_density", + SystemProperties.getInt("ro.sf.lcd_density", DEFAULT_DENSITY)); + } } diff --git a/core/java/android/util/LongSparseArray.java b/core/java/android/util/LongSparseArray.java new file mode 100644 index 000000000000..d90045f8625c --- /dev/null +++ b/core/java/android/util/LongSparseArray.java @@ -0,0 +1,342 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.util; + +import com.android.internal.util.ArrayUtils; + +/** + * SparseArrays map longs to Objects. Unlike a normal array of Objects, + * there can be gaps in the indices. It is intended to be more efficient + * than using a HashMap to map Longs to Objects. + * + * @hide + */ +public class LongSparseArray { + private static final Object DELETED = new Object(); + private boolean mGarbage = false; + + /** + * Creates a new SparseArray containing no mappings. + */ + public LongSparseArray() { + this(10); + } + + /** + * Creates a new SparseArray containing no mappings that will not + * require any additional memory allocation to store the specified + * number of mappings. + */ + public LongSparseArray(int initialCapacity) { + initialCapacity = ArrayUtils.idealIntArraySize(initialCapacity); + + mKeys = new long[initialCapacity]; + mValues = new Object[initialCapacity]; + mSize = 0; + } + + /** + * Gets the Object mapped from the specified key, or null + * if no such mapping has been made. + */ + public E get(long key) { + return get(key, null); + } + + /** + * Gets the Object mapped from the specified key, or the specified Object + * if no such mapping has been made. + */ + public E get(long key, E valueIfKeyNotFound) { + int i = binarySearch(mKeys, 0, mSize, key); + + if (i < 0 || mValues[i] == DELETED) { + return valueIfKeyNotFound; + } else { + return (E) mValues[i]; + } + } + + /** + * Removes the mapping from the specified key, if there was any. + */ + public void delete(long key) { + int i = binarySearch(mKeys, 0, mSize, key); + + if (i >= 0) { + if (mValues[i] != DELETED) { + mValues[i] = DELETED; + mGarbage = true; + } + } + } + + /** + * Alias for {@link #delete(long)}. + */ + public void remove(long key) { + delete(key); + } + + private void gc() { + // Log.e("SparseArray", "gc start with " + mSize); + + int n = mSize; + int o = 0; + long[] keys = mKeys; + Object[] values = mValues; + + for (int i = 0; i < n; i++) { + Object val = values[i]; + + if (val != DELETED) { + if (i != o) { + keys[o] = keys[i]; + values[o] = val; + } + + o++; + } + } + + mGarbage = false; + mSize = o; + + // Log.e("SparseArray", "gc end with " + mSize); + } + + /** + * Adds a mapping from the specified key to the specified value, + * replacing the previous mapping from the specified key if there + * was one. + */ + public void put(long key, E value) { + int i = binarySearch(mKeys, 0, mSize, key); + + if (i >= 0) { + mValues[i] = value; + } else { + i = ~i; + + if (i < mSize && mValues[i] == DELETED) { + mKeys[i] = key; + mValues[i] = value; + return; + } + + if (mGarbage && mSize >= mKeys.length) { + gc(); + + // Search again because indices may have changed. + i = ~binarySearch(mKeys, 0, mSize, key); + } + + if (mSize >= mKeys.length) { + int n = ArrayUtils.idealIntArraySize(mSize + 1); + + long[] nkeys = new long[n]; + Object[] nvalues = new Object[n]; + + // Log.e("SparseArray", "grow " + mKeys.length + " to " + n); + System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length); + System.arraycopy(mValues, 0, nvalues, 0, mValues.length); + + mKeys = nkeys; + mValues = nvalues; + } + + if (mSize - i != 0) { + // Log.e("SparseArray", "move " + (mSize - i)); + System.arraycopy(mKeys, i, mKeys, i + 1, mSize - i); + System.arraycopy(mValues, i, mValues, i + 1, mSize - i); + } + + mKeys[i] = key; + mValues[i] = value; + mSize++; + } + } + + /** + * Returns the number of key-value mappings that this SparseArray + * currently stores. + */ + public int size() { + if (mGarbage) { + gc(); + } + + return mSize; + } + + /** + * Given an index in the range 0...size()-1, returns + * the key from the indexth key-value mapping that this + * SparseArray stores. + */ + public long keyAt(int index) { + if (mGarbage) { + gc(); + } + + return mKeys[index]; + } + + /** + * Given an index in the range 0...size()-1, returns + * the value from the indexth key-value mapping that this + * SparseArray stores. + */ + public E valueAt(int index) { + if (mGarbage) { + gc(); + } + + return (E) mValues[index]; + } + + /** + * Given an index in the range 0...size()-1, sets a new + * value for the indexth key-value mapping that this + * SparseArray stores. + */ + public void setValueAt(int index, E value) { + if (mGarbage) { + gc(); + } + + mValues[index] = value; + } + + /** + * Returns the index for which {@link #keyAt} would return the + * specified key, or a negative number if the specified + * key is not mapped. + */ + public int indexOfKey(long key) { + if (mGarbage) { + gc(); + } + + return binarySearch(mKeys, 0, mSize, key); + } + + /** + * Returns an index for which {@link #valueAt} would return the + * specified key, or a negative number if no keys map to the + * specified value. + * Beware that this is a linear search, unlike lookups by key, + * and that multiple keys can map to the same value and this will + * find only one of them. + */ + public int indexOfValue(E value) { + if (mGarbage) { + gc(); + } + + for (int i = 0; i < mSize; i++) + if (mValues[i] == value) + return i; + + return -1; + } + + /** + * Removes all key-value mappings from this SparseArray. + */ + public void clear() { + int n = mSize; + Object[] values = mValues; + + for (int i = 0; i < n; i++) { + values[i] = null; + } + + mSize = 0; + mGarbage = false; + } + + /** + * Puts a key/value pair into the array, optimizing for the case where + * the key is greater than all existing keys in the array. + */ + public void append(long key, E value) { + if (mSize != 0 && key <= mKeys[mSize - 1]) { + put(key, value); + return; + } + + if (mGarbage && mSize >= mKeys.length) { + gc(); + } + + int pos = mSize; + if (pos >= mKeys.length) { + int n = ArrayUtils.idealIntArraySize(pos + 1); + + long[] nkeys = new long[n]; + Object[] nvalues = new Object[n]; + + // Log.e("SparseArray", "grow " + mKeys.length + " to " + n); + System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length); + System.arraycopy(mValues, 0, nvalues, 0, mValues.length); + + mKeys = nkeys; + mValues = nvalues; + } + + mKeys[pos] = key; + mValues[pos] = value; + mSize = pos + 1; + } + + private static int binarySearch(long[] a, int start, int len, long key) { + int high = start + len, low = start - 1, guess; + + while (high - low > 1) { + guess = (high + low) / 2; + + if (a[guess] < key) + low = guess; + else + high = guess; + } + + if (high == start + len) + return ~(start + len); + else if (a[high] == key) + return high; + else + return ~high; + } + + private void checkIntegrity() { + for (int i = 1; i < mSize; i++) { + if (mKeys[i] <= mKeys[i - 1]) { + for (int j = 0; j < mSize; j++) { + Log.e("FAIL", j + ": " + mKeys[j] + " -> " + mValues[j]); + } + + throw new RuntimeException(); + } + } + } + + private long[] mKeys; + private Object[] mValues; + private int mSize; +} \ No newline at end of file diff --git a/core/java/android/view/GestureDetector.java b/core/java/android/view/GestureDetector.java index 23f3e3c3ece9..1e558be1ccc7 100644 --- a/core/java/android/view/GestureDetector.java +++ b/core/java/android/view/GestureDetector.java @@ -198,6 +198,7 @@ public class GestureDetector { private int mTouchSlopSquare; private int mDoubleTapSlopSquare; private int mMinimumFlingVelocity; + private int mMaximumFlingVelocity; private static final int LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout(); private static final int TAP_TIMEOUT = ViewConfiguration.getTapTimeout(); @@ -361,11 +362,13 @@ public class GestureDetector { doubleTapSlop = ViewConfiguration.getDoubleTapSlop(); //noinspection deprecation mMinimumFlingVelocity = ViewConfiguration.getMinimumFlingVelocity(); + mMaximumFlingVelocity = ViewConfiguration.getMaximumFlingVelocity(); } else { final ViewConfiguration configuration = ViewConfiguration.get(context); touchSlop = configuration.getScaledTouchSlop(); doubleTapSlop = configuration.getScaledDoubleTapSlop(); mMinimumFlingVelocity = configuration.getScaledMinimumFlingVelocity(); + mMaximumFlingVelocity = configuration.getScaledMaximumFlingVelocity(); } mTouchSlopSquare = touchSlop * touchSlop; mDoubleTapSlopSquare = doubleTapSlop * doubleTapSlop; @@ -505,7 +508,7 @@ public class GestureDetector { // A fling must travel the minimum tap distance final VelocityTracker velocityTracker = mVelocityTracker; - velocityTracker.computeCurrentVelocity(1000); + velocityTracker.computeCurrentVelocity(1000, mMaximumFlingVelocity); final float velocityY = velocityTracker.getYVelocity(); final float velocityX = velocityTracker.getXVelocity(); diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java index 86261c4a7edb..a224ed306b0a 100644 --- a/core/java/android/view/MotionEvent.java +++ b/core/java/android/view/MotionEvent.java @@ -59,32 +59,32 @@ public final class MotionEvent implements Parcelable { public static final int ACTION_OUTSIDE = 4; private static final boolean TRACK_RECYCLED_LOCATION = false; - + /** * Flag indicating the motion event intersected the top edge of the screen. */ public static final int EDGE_TOP = 0x00000001; - + /** * Flag indicating the motion event intersected the bottom edge of the screen. */ public static final int EDGE_BOTTOM = 0x00000002; - + /** * Flag indicating the motion event intersected the left edge of the screen. */ public static final int EDGE_LEFT = 0x00000004; - + /** * Flag indicating the motion event intersected the right edge of the screen. */ public static final int EDGE_RIGHT = 0x00000008; - + static private final int MAX_RECYCLED = 10; static private Object gRecyclerLock = new Object(); static private int gRecyclerUsed = 0; static private MotionEvent gRecyclerTop = null; - + private long mDownTime; private long mEventTime; private int mAction; @@ -109,7 +109,7 @@ public final class MotionEvent implements Parcelable { private MotionEvent() { } - + static private MotionEvent obtain() { synchronized (gRecyclerLock) { if (gRecyclerTop == null) { @@ -123,26 +123,26 @@ public final class MotionEvent implements Parcelable { return ev; } } - + /** * Create a new MotionEvent, filling in all of the basic values that * define the motion. - * - * @param downTime The time (in ms) when the user originally pressed down to start + * + * @param downTime The time (in ms) when the user originally pressed down to start * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. - * @param eventTime The the time (in ms) when this specific event was generated. This + * @param eventTime The the time (in ms) when this specific event was generated. This * must be obtained from {@link SystemClock#uptimeMillis()}. * @param action The kind of action being performed -- one of either * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or * {@link #ACTION_CANCEL}. * @param x The X coordinate of this event. * @param y The Y coordinate of this event. - * @param pressure The current pressure of this event. The pressure generally - * ranges from 0 (no pressure at all) to 1 (normal pressure), however - * values higher than 1 may be generated depending on the calibration of + * @param pressure The current pressure of this event. The pressure generally + * ranges from 0 (no pressure at all) to 1 (normal pressure), however + * values higher than 1 may be generated depending on the calibration of * the input device. * @param size A scaled value of the approximate size of the area being pressed when - * touched with the finger. The actual value in pixels corresponding to the finger + * touched with the finger. The actual value in pixels corresponding to the finger * touch is normalized with a device specific range of values * and scaled to a value between 0 and 1. * @param metaState The state of any meta / modifier keys that were in effect when @@ -174,15 +174,15 @@ public final class MotionEvent implements Parcelable { return ev; } - + /** * Create a new MotionEvent, filling in a subset of the basic motion * values. Those not specified here are: device id (always 0), pressure * and size (always 1), x and y precision (always 1), and edgeFlags (always 0). - * - * @param downTime The time (in ms) when the user originally pressed down to start + * + * @param downTime The time (in ms) when the user originally pressed down to start * a stream of position events. This must be obtained from {@link SystemClock#uptimeMillis()}. - * @param eventTime The the time (in ms) when this specific event was generated. This + * @param eventTime The the time (in ms) when this specific event was generated. This * must be obtained from {@link SystemClock#uptimeMillis()}. * @param action The kind of action being performed -- one of either * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or @@ -212,27 +212,47 @@ public final class MotionEvent implements Parcelable { } /** - * Scales down the cood of this event by the given scale. + * Scales down the coordination of this event by the given scale. * * @hide */ public void scale(float scale) { - if (scale != 1.0f) { - mX *= scale; - mY *= scale; - mRawX *= scale; - mRawY *= scale; - mSize *= scale; - mXPrecision *= scale; - mYPrecision *= scale; - if (mHistory != null) { - float[] history = mHistory; - int length = history.length; - for (int i = 0; i < length; i += 4) { - history[i] *= scale; - history[i + 2] *= scale; - history[i + 3] *= scale; - } + mX *= scale; + mY *= scale; + mRawX *= scale; + mRawY *= scale; + mSize *= scale; + mXPrecision *= scale; + mYPrecision *= scale; + if (mHistory != null) { + float[] history = mHistory; + int length = history.length; + for (int i = 0; i < length; i += 4) { + history[i] *= scale; // X + history[i + 1] *= scale; // Y + // no need to scale pressure ([i+2]) + history[i + 3] *= scale; // Size, TODO: square this? + } + } + } + + /** + * Translate the coordination of the event by given x and y. + * + * @hide + */ + public void translate(float dx, float dy) { + mX += dx; + mY += dy; + mRawX += dx; + mRawY += dx; + if (mHistory != null) { + float[] history = mHistory; + int length = history.length; + for (int i = 0; i < length; i += 4) { + history[i] += dx; // X + history[i + 1] += dy; // Y + // no need to translate pressure (i+2) and size (i+3) } } } @@ -265,7 +285,7 @@ public final class MotionEvent implements Parcelable { } return ev; } - + /** * Recycle the MotionEvent, to be re-used by a later caller. After calling * this function you must not ever touch the event again. @@ -291,7 +311,7 @@ public final class MotionEvent implements Parcelable { } } } - + /** * Return the kind of action being performed -- one of either * {@link #ACTION_DOWN}, {@link #ACTION_MOVE}, {@link #ACTION_UP}, or @@ -302,8 +322,8 @@ public final class MotionEvent implements Parcelable { } /** - * Returns the time (in ms) when the user originally pressed down to start - * a stream of position events. + * Returns the time (in ms) when the user originally pressed down to start + * a stream of position events. */ public final long getDownTime() { return mDownTime; @@ -317,25 +337,25 @@ public final class MotionEvent implements Parcelable { } /** - * Returns the X coordinate of this event. Whole numbers are pixels; the - * value may have a fraction for input devices that are sub-pixel precise. + * Returns the X coordinate of this event. Whole numbers are pixels; the + * value may have a fraction for input devices that are sub-pixel precise. */ public final float getX() { return mX; } /** - * Returns the Y coordinate of this event. Whole numbers are pixels; the - * value may have a fraction for input devices that are sub-pixel precise. + * Returns the Y coordinate of this event. Whole numbers are pixels; the + * value may have a fraction for input devices that are sub-pixel precise. */ public final float getY() { return mY; } /** - * Returns the current pressure of this event. The pressure generally - * ranges from 0 (no pressure at all) to 1 (normal pressure), however - * values higher than 1 may be generated depending on the calibration of + * Returns the current pressure of this event. The pressure generally + * ranges from 0 (no pressure at all) to 1 (normal pressure), however + * values higher than 1 may be generated depending on the calibration of * the input device. */ public final float getPressure() { @@ -344,9 +364,9 @@ public final class MotionEvent implements Parcelable { /** * Returns a scaled value of the approximate size, of the area being pressed when - * touched with the finger. The actual value in pixels corresponding to the finger + * touched with the finger. The actual value in pixels corresponding to the finger * touch is normalized with the device specific range of values - * and scaled to a value between 0 and 1. The value of size can be used to + * and scaled to a value between 0 and 1. The value of size can be used to * determine fat touch events. */ public final float getSize() { @@ -396,7 +416,7 @@ public final class MotionEvent implements Parcelable { public final float getXPrecision() { return mXPrecision; } - + /** * Return the precision of the Y coordinates being reported. You can * multiple this number with {@link #getY} to find the actual hardware @@ -406,89 +426,89 @@ public final class MotionEvent implements Parcelable { public final float getYPrecision() { return mYPrecision; } - + /** * Returns the number of historical points in this event. These are * movements that have occurred between this event and the previous event. * This only applies to ACTION_MOVE events -- all other actions will have * a size of 0. - * + * * @return Returns the number of historical points in the event. */ public final int getHistorySize() { return mNumHistory; } - + /** * Returns the time that a historical movement occurred between this event * and the previous event. Only applies to ACTION_MOVE events. - * + * * @param pos Which historical value to return; must be less than * {@link #getHistorySize} - * + * * @see #getHistorySize * @see #getEventTime */ public final long getHistoricalEventTime(int pos) { return mHistoryTimes[pos]; } - + /** * Returns a historical X coordinate that occurred between this event * and the previous event. Only applies to ACTION_MOVE events. - * + * * @param pos Which historical value to return; must be less than * {@link #getHistorySize} - * + * * @see #getHistorySize * @see #getX */ public final float getHistoricalX(int pos) { return mHistory[pos*4]; } - + /** * Returns a historical Y coordinate that occurred between this event * and the previous event. Only applies to ACTION_MOVE events. - * + * * @param pos Which historical value to return; must be less than * {@link #getHistorySize} - * + * * @see #getHistorySize * @see #getY */ public final float getHistoricalY(int pos) { return mHistory[pos*4 + 1]; } - + /** * Returns a historical pressure coordinate that occurred between this event * and the previous event. Only applies to ACTION_MOVE events. - * + * * @param pos Which historical value to return; must be less than * {@link #getHistorySize} - * + * * @see #getHistorySize * @see #getPressure */ public final float getHistoricalPressure(int pos) { return mHistory[pos*4 + 2]; } - + /** * Returns a historical size coordinate that occurred between this event * and the previous event. Only applies to ACTION_MOVE events. - * + * * @param pos Which historical value to return; must be less than * {@link #getHistorySize} - * + * * @see #getHistorySize * @see #getSize */ public final float getHistoricalSize(int pos) { return mHistory[pos*4 + 3]; } - + /** * Return the id for the device that this event came from. An id of * zero indicates that the event didn't come from a physical device; other @@ -497,12 +517,12 @@ public final class MotionEvent implements Parcelable { public final int getDeviceId() { return mDeviceId; } - + /** * Returns a bitfield indicating which edges, if any, where touched by this - * MotionEvent. For touch events, clients can use this to determine if the - * user's finger was touching the edge of the display. - * + * MotionEvent. For touch events, clients can use this to determine if the + * user's finger was touching the edge of the display. + * * @see #EDGE_LEFT * @see #EDGE_TOP * @see #EDGE_RIGHT @@ -511,12 +531,12 @@ public final class MotionEvent implements Parcelable { public final int getEdgeFlags() { return mEdgeFlags; } - + /** * Sets the bitfield indicating which edges, if any, where touched by this - * MotionEvent. - * + * MotionEvent. + * * @see #getEdgeFlags() */ public final void setEdgeFlags(int flags) { @@ -548,11 +568,11 @@ public final class MotionEvent implements Parcelable { pos[i+1] += deltaY; } } - + /** * Set this event's location. Applies {@link #offsetLocation} with a * delta from the current location to the given new location. - * + * * @param x New absolute X location. * @param y New absolute Y location. */ @@ -563,13 +583,13 @@ public final class MotionEvent implements Parcelable { offsetLocation(deltaX, deltaY); } } - + /** * Add a new movement to the batch of movements in this event. The event's * current location, position and size is updated to the new values. In * the future, the current values in the event will be added to a list of * historic values. - * + * * @param x The new X position. * @param y The new Y position. * @param pressure The new pressure. @@ -599,16 +619,16 @@ public final class MotionEvent implements Parcelable { mHistoryTimes = historyTimes = newHistoryTimes; } } - + historyTimes[N] = mEventTime; - + final int pos = N*4; history[pos] = mX; history[pos+1] = mY; history[pos+2] = mPressure; history[pos+3] = mSize; mNumHistory = N+1; - + mEventTime = eventTime; mX = mRawX = x; mY = mRawY = y; @@ -616,7 +636,7 @@ public final class MotionEvent implements Parcelable { mSize = size; mMetaState |= metaState; } - + @Override public String toString() { return "MotionEvent{" + Integer.toHexString(System.identityHashCode(this)) diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 3d023f7a9691..45b0f0a79082 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -17,6 +17,8 @@ package android.view; import android.content.Context; +import android.content.res.CompatibilityInfo; +import android.content.res.CompatibilityInfo.Translator; import android.graphics.Canvas; import android.graphics.PixelFormat; import android.graphics.PorterDuff; @@ -100,6 +102,8 @@ public class SurfaceView extends View { static final int KEEP_SCREEN_ON_MSG = 1; static final int GET_NEW_SURFACE_MSG = 2; + int mWindowType = WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA; + boolean mIsCreating = false; final Handler mHandler = new Handler() { @@ -135,28 +139,21 @@ public class SurfaceView extends View { int mFormat = -1; int mType = -1; final Rect mSurfaceFrame = new Rect(); - private final float mAppScale; - private final float mAppScaleInverted; + private Translator mTranslator; public SurfaceView(Context context) { super(context); setWillNotDraw(true); - mAppScale = context.getApplicationScale(); - mAppScaleInverted = 1.0f / mAppScale; } public SurfaceView(Context context, AttributeSet attrs) { super(context, attrs); setWillNotDraw(true); - mAppScale = context.getApplicationScale(); - mAppScaleInverted = 1.0f / mAppScale; } public SurfaceView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setWillNotDraw(true); - mAppScale = context.getApplicationScale(); - mAppScaleInverted = 1.0f / mAppScale; } /** @@ -259,9 +256,9 @@ public class SurfaceView extends View { public boolean dispatchTouchEvent(MotionEvent event) { // SurfaceView uses pre-scaled size unless fixed size is requested. This hook // scales the event back to the pre-scaled coordinates for such surface. - if (mRequestedWidth < 0 && mAppScale != 1.0f) { + if (mRequestedWidth < 0 && mTranslator != null) { MotionEvent scaledBack = MotionEvent.obtain(event); - scaledBack.scale(mAppScale); + scaledBack.scale(mTranslator.applicationScale); try { return super.dispatchTouchEvent(scaledBack); } finally { @@ -285,20 +282,33 @@ public class SurfaceView extends View { super.dispatchDraw(canvas); } + /** + * Hack to allow special layering of windows. The type is one of the + * types in WindowManager.LayoutParams. This is a hack so: + * @hide + */ + public void setWindowType(int type) { + mWindowType = type; + } + private void updateWindow(boolean force) { if (!mHaveFrame) { return; } + mTranslator = ((ViewRoot)getRootView().getParent()).mTranslator; + + float appScale = mTranslator == null ? 1.0f : mTranslator.applicationScale; int myWidth = mRequestedWidth; if (myWidth <= 0) myWidth = getWidth(); int myHeight = mRequestedHeight; if (myHeight <= 0) myHeight = getHeight(); - // Use original size for surface unless fixed size is requested. - if (mRequestedWidth <= 0) { - myWidth *= mAppScale; - myHeight *= mAppScale; + // Use original size if the app specified the size of the view, + // and let the flinger to scale up. + if (mRequestedWidth <= 0 && mTranslator != null && mTranslator.scalingRequired) { + myWidth *= appScale; + myHeight *= appScale; } getLocationInWindow(mLocation); @@ -316,7 +326,7 @@ public class SurfaceView extends View { + " visible=" + visibleChanged + " left=" + (mLeft != mLocation[0]) + " top=" + (mTop != mLocation[1])); - + try { final boolean visible = mVisible = mRequestedVisible; mLeft = mLocation[0]; @@ -326,23 +336,30 @@ public class SurfaceView extends View { mFormat = mRequestedFormat; mType = mRequestedType; - // Scaling window's layout here beause mLayout is not used elsewhere. - mLayout.x = (int) (mLeft * mAppScale); - mLayout.y = (int) (mTop * mAppScale); - mLayout.width = (int) (getWidth() * mAppScale); - mLayout.height = (int) (getHeight() * mAppScale); + // Scaling/Translate window's layout here because mLayout is not used elsewhere. + + // Places the window relative + mLayout.x = mLeft; + mLayout.y = mTop; + mLayout.width = getWidth(); + mLayout.height = getHeight(); + if (mTranslator != null) { + mTranslator.translateLayoutParamsInAppWindowToScreen(mLayout); + } + mLayout.format = mRequestedFormat; mLayout.flags |=WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | WindowManager.LayoutParams.FLAG_SCALED | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE + | WindowManager.LayoutParams.FLAG_NO_COMPATIBILITY_SCALING ; mLayout.memoryType = mRequestedType; if (mWindow == null) { mWindow = new MyWindow(this); - mLayout.type = WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA; + mLayout.type = mWindowType; mLayout.gravity = Gravity.LEFT|Gravity.TOP; mSession.add(mWindow, mLayout, mVisible ? VISIBLE : GONE, mContentInsets); @@ -356,15 +373,12 @@ public class SurfaceView extends View { mSurfaceLock.lock(); mDrawingStopped = !visible; + final int relayoutResult = mSession.relayout( mWindow, mLayout, mWidth, mHeight, visible ? VISIBLE : GONE, false, mWinFrame, mContentInsets, mVisibleInsets, mSurface); - mContentInsets.scale(mAppScaleInverted); - mVisibleInsets.scale(mAppScaleInverted); - mWinFrame.scale(mAppScaleInverted); - if (localLOGV) Log.i(TAG, "New surface: " + mSurface + ", vis=" + visible + ", frame=" + mWinFrame); mSurfaceFrame.left = 0; @@ -433,24 +447,14 @@ public class SurfaceView extends View { private static class MyWindow extends IWindow.Stub { private final WeakReference mSurfaceView; - private final float mAppScale; - private final float mAppScaleInverted; public MyWindow(SurfaceView surfaceView) { mSurfaceView = new WeakReference(surfaceView); - mAppScale = surfaceView.getContext().getApplicationScale(); - mAppScaleInverted = 1.0f / mAppScale; } public void resized(int w, int h, Rect coveredInsets, Rect visibleInsets, boolean reportDraw) { SurfaceView surfaceView = mSurfaceView.get(); - float scale = mAppScaleInverted; - w *= scale; - h *= scale; - coveredInsets.scale(scale); - visibleInsets.scale(scale); - if (surfaceView != null) { if (localLOGV) Log.v( "SurfaceView", surfaceView + " got resized: w=" + @@ -613,7 +617,6 @@ public class SurfaceView extends View { Canvas c = null; if (!mDrawingStopped && mWindow != null) { Rect frame = dirty != null ? dirty : mSurfaceFrame; - frame.scale(mAppScale); try { c = mSurface.lockCanvas(frame); } catch (Exception e) { diff --git a/core/java/android/view/VelocityTracker.java b/core/java/android/view/VelocityTracker.java index c708f547642a..5d89c46a3db1 100644 --- a/core/java/android/view/VelocityTracker.java +++ b/core/java/android/view/VelocityTracker.java @@ -165,7 +165,17 @@ public final class VelocityTracker implements Poolable { pastTime[i] = 0; } } - + + /** + * Equivalent to invoking {@link #computeCurrentVelocity(int, float)} with a maximum + * velocity of Float.MAX_VALUE. + * + * @see #computeCurrentVelocity(int, float) + */ + public void computeCurrentVelocity(int units) { + computeCurrentVelocity(units, Float.MAX_VALUE); + } + /** * Compute the current velocity based on the points that have been * collected. Only call this when you actually want to retrieve velocity @@ -175,8 +185,11 @@ public final class VelocityTracker implements Poolable { * * @param units The units you would like the velocity in. A value of 1 * provides pixels per millisecond, 1000 provides pixels per second, etc. + * @param maxVelocity The maximum velocity that can be computed by this method. + * This value must be declared in the same unit as the units parameter. This value + * must be positive. */ - public void computeCurrentVelocity(int units) { + public void computeCurrentVelocity(int units, float maxVelocity) { final float[] pastX = mPastX; final float[] pastY = mPastY; final long[] pastTime = mPastTime; @@ -210,8 +223,8 @@ public final class VelocityTracker implements Poolable { if (accumY == 0) accumY = vel; else accumY = (accumY + vel) * .5f; } - mXVelocity = accumX; - mYVelocity = accumY; + mXVelocity = accumX < 0.0f ? Math.max(accumX, -maxVelocity) : Math.min(accumX, maxVelocity); + mYVelocity = accumY < 0.0f ? Math.max(accumY, -maxVelocity) : Math.min(accumY, maxVelocity); if (localLOGV) Log.v(TAG, "Y velocity=" + mYVelocity +" X velocity=" + mXVelocity + " N=" + N); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 9e709cfd1f47..ff8868bb0f2f 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -16,6 +16,9 @@ package android.view; +import com.android.internal.R; +import com.android.internal.view.menu.MenuBuilder; + import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; @@ -25,12 +28,12 @@ import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PixelFormat; +import android.graphics.Point; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.Region; import android.graphics.Shader; -import android.graphics.Point; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Handler; @@ -42,47 +45,47 @@ import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemProperties; import android.util.AttributeSet; +import android.util.Config; import android.util.EventLog; import android.util.Log; -import android.util.SparseArray; -import android.util.Poolable; import android.util.Pool; -import android.util.Pools; +import android.util.Poolable; import android.util.PoolableManager; -import android.util.Config; +import android.util.Pools; +import android.util.SparseArray; import android.view.ContextMenu.ContextMenuInfo; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityEventSource; +import android.view.accessibility.AccessibilityManager; import android.view.animation.Animation; +import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; -import android.view.inputmethod.EditorInfo; import android.widget.ScrollBarDrawable; -import com.android.internal.R; -import com.android.internal.view.menu.MenuBuilder; - +import java.lang.ref.SoftReference; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.WeakHashMap; -import java.lang.ref.SoftReference; -import java.lang.reflect.Method; -import java.lang.reflect.InvocationTargetException; /** *

        * This class represents the basic building block for user interface components. A View * occupies a rectangular area on the screen and is responsible for drawing and * event handling. View is the base class for widgets, which are - * used to create interactive UI components (buttons, text fields, etc.). The + * used to create interactive UI components (buttons, text fields, etc.). The * {@link android.view.ViewGroup} subclass is the base class for layouts, which * are invisible containers that hold other Views (or other ViewGroups) and define * their layout properties. *

        * *
        - *

        For an introduction to using this class to develop your - * application's user interface, read the Developer Guide documentation on + *

        For an introduction to using this class to develop your + * application's user interface, read the Developer Guide documentation on * User Interface. Special topics - * include: + * include: *
        Declaring Layout *
        Creating Menus *
        Common Layout Objects @@ -93,7 +96,7 @@ import java.lang.reflect.InvocationTargetException; *
        How Android Draws Views. *

        *
        - * + * * *

        Using Views

        *

        @@ -419,7 +422,7 @@ import java.lang.reflect.InvocationTargetException; *

        * *

        - * Note that the framework will not draw views that are not in the invalid region. + * Note that the framework will not draw views that are not in the invalid region. *

        * *

        @@ -535,25 +538,52 @@ import java.lang.reflect.InvocationTargetException; * take care of redrawing the appropriate views until the animation completes. *

        * + * @attr ref android.R.styleable#View_background + * @attr ref android.R.styleable#View_clickable + * @attr ref android.R.styleable#View_contentDescription + * @attr ref android.R.styleable#View_drawingCacheQuality + * @attr ref android.R.styleable#View_duplicateParentState + * @attr ref android.R.styleable#View_id + * @attr ref android.R.styleable#View_fadingEdge + * @attr ref android.R.styleable#View_fadingEdgeLength * @attr ref android.R.styleable#View_fitsSystemWindows + * @attr ref android.R.styleable#View_isScrollContainer + * @attr ref android.R.styleable#View_focusable + * @attr ref android.R.styleable#View_focusableInTouchMode + * @attr ref android.R.styleable#View_hapticFeedbackEnabled + * @attr ref android.R.styleable#View_keepScreenOn + * @attr ref android.R.styleable#View_longClickable + * @attr ref android.R.styleable#View_minHeight + * @attr ref android.R.styleable#View_minWidth * @attr ref android.R.styleable#View_nextFocusDown * @attr ref android.R.styleable#View_nextFocusLeft * @attr ref android.R.styleable#View_nextFocusRight * @attr ref android.R.styleable#View_nextFocusUp + * @attr ref android.R.styleable#View_onClick + * @attr ref android.R.styleable#View_padding + * @attr ref android.R.styleable#View_paddingBottom + * @attr ref android.R.styleable#View_paddingLeft + * @attr ref android.R.styleable#View_paddingRight + * @attr ref android.R.styleable#View_paddingTop + * @attr ref android.R.styleable#View_saveEnabled * @attr ref android.R.styleable#View_scrollX * @attr ref android.R.styleable#View_scrollY - * @attr ref android.R.styleable#View_scrollbarTrackHorizontal - * @attr ref android.R.styleable#View_scrollbarThumbHorizontal * @attr ref android.R.styleable#View_scrollbarSize + * @attr ref android.R.styleable#View_scrollbarStyle * @attr ref android.R.styleable#View_scrollbars + * @attr ref android.R.styleable#View_scrollbarTrackHorizontal + * @attr ref android.R.styleable#View_scrollbarThumbHorizontal * @attr ref android.R.styleable#View_scrollbarThumbVertical * @attr ref android.R.styleable#View_scrollbarTrackVertical * @attr ref android.R.styleable#View_scrollbarAlwaysDrawHorizontalTrack * @attr ref android.R.styleable#View_scrollbarAlwaysDrawVerticalTrack + * @attr ref android.R.styleable#View_soundEffectsEnabled + * @attr ref android.R.styleable#View_tag + * @attr ref android.R.styleable#View_visibility * * @see android.view.ViewGroup */ -public class View implements Drawable.Callback, KeyEvent.Callback { +public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource { private static final boolean DBG = false; /** @@ -850,6 +880,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback { */ public static final int HAPTIC_FEEDBACK_ENABLED = 0x10000000; + /** + * View flag indicating whether {@link #addFocusables(ArrayList, int, int)} + * should add all focusable Views regardless if they are focusable in touch mode. + */ + public static final int FOCUSABLES_ALL = 0x00000000; + + /** + * View flag indicating whether {@link #addFocusables(ArrayList, int, int)} + * should add only Views focusable in touch mode. + */ + public static final int FOCUSABLES_TOUCH_MODE = 0x00000001; + /** * Use with {@link #focusSearch}. Move focus to the previous selectable * item. @@ -1427,6 +1469,27 @@ public class View implements Drawable.Callback, KeyEvent.Callback { */ static final int DIRTY_MASK = 0x00600000; + /** + * Indicates whether the background is opaque. + * + * @hide + */ + static final int OPAQUE_BACKGROUND = 0x00800000; + + /** + * Indicates whether the scrollbars are opaque. + * + * @hide + */ + static final int OPAQUE_SCROLLBARS = 0x01000000; + + /** + * Indicates whether the view is opaque. + * + * @hide + */ + static final int OPAQUE_MASK = 0x01800000; + /** * The parent this view is attached to. * {@hide} @@ -1449,7 +1512,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { @ViewDebug.FlagToString(mask = LAYOUT_REQUIRED, equals = LAYOUT_REQUIRED, name = "LAYOUT_REQUIRED"), @ViewDebug.FlagToString(mask = DRAWING_CACHE_VALID, equals = DRAWING_CACHE_VALID, - name = "DRAWING_CACHE_VALID", outputIf = false), + name = "DRAWING_CACHE_INVALID", outputIf = false), @ViewDebug.FlagToString(mask = DRAWN, equals = DRAWN, name = "DRAWN", outputIf = true), @ViewDebug.FlagToString(mask = DRAWN, equals = DRAWN, name = "NOT_DRAWN", outputIf = false), @ViewDebug.FlagToString(mask = DIRTY_MASK, equals = DIRTY_OPAQUE, name = "DIRTY_OPAQUE"), @@ -1550,6 +1613,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback { @ViewDebug.ExportedProperty protected int mPaddingBottom; + /** + * Briefly describes the view and is primarily used for accessibility support. + */ + private CharSequence mContentDescription; + /** * Cache the paddingRight set by the user to append to the scrollbar's size. */ @@ -1622,6 +1690,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { private int[] mDrawableState = null; private SoftReference mDrawingCache; + private SoftReference mUnscaledDrawingCache; /** * When this view has focus and the next focus is {@link #FOCUS_LEFT}, @@ -1701,7 +1770,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { public View(Context context) { mContext = context; mResources = context != null ? context.getResources() : null; - mViewFlags = SOUND_EFFECTS_ENABLED|HAPTIC_FEEDBACK_ENABLED; + mViewFlags = SOUND_EFFECTS_ENABLED | HAPTIC_FEEDBACK_ENABLED; ++sInstanceCount; } @@ -1762,7 +1831,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { int viewFlagMasks = 0; boolean setScrollContainer = false; - + int x = 0; int y = 0; @@ -1858,16 +1927,21 @@ public class View implements Drawable.Callback, KeyEvent.Callback { viewFlagMasks |= DRAWING_CACHE_QUALITY_MASK; } break; + case com.android.internal.R.styleable.View_contentDescription: + mContentDescription = a.getString(attr); + break; case com.android.internal.R.styleable.View_soundEffectsEnabled: if (!a.getBoolean(attr, true)) { viewFlagValues &= ~SOUND_EFFECTS_ENABLED; viewFlagMasks |= SOUND_EFFECTS_ENABLED; } + break; case com.android.internal.R.styleable.View_hapticFeedbackEnabled: if (!a.getBoolean(attr, true)) { viewFlagValues &= ~HAPTIC_FEEDBACK_ENABLED; viewFlagMasks |= HAPTIC_FEEDBACK_ENABLED; } + break; case R.styleable.View_scrollbars: final int scrollbars = a.getInt(attr, SCROLLBARS_NONE); if (scrollbars != SCROLLBARS_NONE) { @@ -1922,6 +1996,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback { mMinHeight = a.getDimensionPixelSize(attr, 0); break; case R.styleable.View_onClick: + if (context.isRestricted()) { + throw new IllegalStateException("The android:onClick attribute cannot " + + "be used within a restricted context"); + } + final String handlerName = a.getString(attr); if (handlerName != null) { setOnClickListener(new OnClickListener() { @@ -1990,7 +2069,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback { if (!setScrollContainer && (viewFlagValues&SCROLLBARS_VERTICAL) != 0) { setScrollContainer(true); } - + + computeOpaqueFlags(); + a.recycle(); } @@ -2255,6 +2336,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback { * otherwise is returned. */ public boolean performClick() { + sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); + if (mOnClickListener != null) { playSoundEffect(SoundEffectConstants.CLICK); mOnClickListener.onClick(this); @@ -2272,6 +2355,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback { * otherwise is returned. */ public boolean performLongClick() { + sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_LONG_CLICKED); + boolean handled = false; if (mOnLongClickListener != null) { handled = mOnLongClickListener.onLongClick(View.this); @@ -2387,7 +2472,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { if (!(parent instanceof View)) { break; } - + child = (View) parent; parent = child.getParent(); } @@ -2479,7 +2564,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { * and previouslyFocusedRect provide insight into where the focus is coming from. * When overriding, be sure to call up through to the super class so that * the standard focus handling will occur. - * + * * @param gainFocus True if the View has focus; false otherwise. * @param direction The direction focus has moved when requestFocus() * is called to give this view focus. Values are @@ -2492,6 +2577,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback { * from (in addition to direction). Will be null otherwise. */ protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) { + if (gainFocus) { + sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED); + } + InputMethodManager imm = InputMethodManager.peekInstance(); if (!gainFocus) { if (isPressed()) { @@ -2506,13 +2595,86 @@ public class View implements Drawable.Callback, KeyEvent.Callback { && mAttachInfo.mHasWindowFocus) { imm.focusIn(this); } - + invalidate(); if (mOnFocusChangeListener != null) { mOnFocusChangeListener.onFocusChange(this, gainFocus); } } + /** + * {@inheritDoc} + */ + public void sendAccessibilityEvent(int eventType) { + if (AccessibilityManager.getInstance(mContext).isEnabled()) { + sendAccessibilityEventUnchecked(AccessibilityEvent.obtain(eventType)); + } + } + + /** + * {@inheritDoc} + */ + public void sendAccessibilityEventUnchecked(AccessibilityEvent event) { + event.setClassName(getClass().getName()); + event.setPackageName(getContext().getPackageName()); + event.setEnabled(isEnabled()); + event.setContentDescription(mContentDescription); + + if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED && mAttachInfo != null) { + ArrayList focusablesTempList = mAttachInfo.mFocusablesTempList; + getRootView().addFocusables(focusablesTempList, View.FOCUS_FORWARD, FOCUSABLES_ALL); + event.setItemCount(focusablesTempList.size()); + event.setCurrentItemIndex(focusablesTempList.indexOf(this)); + focusablesTempList.clear(); + } + + dispatchPopulateAccessibilityEvent(event); + + AccessibilityManager.getInstance(mContext).sendAccessibilityEvent(event); + } + + /** + * Dispatches an {@link AccessibilityEvent} to the {@link View} children + * to be populated. + * + * @param event The event. + * + * @return True if the event population was completed. + */ + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + return false; + } + + /** + * Gets the {@link View} description. It briefly describes the view and is + * primarily used for accessibility support. Set this property to enable + * better accessibility support for your application. This is especially + * true for views that do not have textual representation (For example, + * ImageButton). + * + * @return The content descriptiopn. + * + * @attr ref android.R.styleable#View_contentDescription + */ + public CharSequence getContentDescription() { + return mContentDescription; + } + + /** + * Sets the {@link View} description. It briefly describes the view and is + * primarily used for accessibility support. Set this property to enable + * better accessibility support for your application. This is especially + * true for views that do not have textual representation (For example, + * ImageButton). + * + * @param contentDescription The content description. + * + * @attr ref android.R.styleable#View_contentDescription + */ + public void setContentDescription(CharSequence contentDescription) { + mContentDescription = contentDescription; + } + /** * Invoked whenever this view loses focus, either by losing window focus or by losing * focus within its window. This method can be used to clear any state tied to the @@ -2522,7 +2684,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { * Subclasses of View overriding this method should always call super.onFocusLost(). * * @see #onFocusChanged(boolean, int, android.graphics.Rect) - * @see #onWindowFocusChanged(boolean) + * @see #onWindowFocusChanged(boolean) * * @hide pending API council approval */ @@ -3222,11 +3384,37 @@ public class View implements Drawable.Callback, KeyEvent.Callback { * @param direction The direction of the focus */ public void addFocusables(ArrayList views, int direction) { - if (!isFocusable()) return; + addFocusables(views, direction, FOCUSABLES_TOUCH_MODE); + } - if (isInTouchMode() && !isFocusableInTouchMode()) return; + /** + * Adds any focusable views that are descendants of this view (possibly + * including this view if it is focusable itself) to views. This method + * adds all focusable views regardless if we are in touch mode or + * only views focusable in touch mode if we are in touch mode depending on + * the focusable mode paramater. + * + * @param views Focusable views found so far or null if all we are interested is + * the number of focusables. + * @param direction The direction of the focus. + * @param focusableMode The type of focusables to be added. + * + * @see #FOCUSABLES_ALL + * @see #FOCUSABLES_TOUCH_MODE + */ + public void addFocusables(ArrayList views, int direction, int focusableMode) { + if (!isFocusable()) { + return; + } - views.add(this); + if ((focusableMode & FOCUSABLES_TOUCH_MODE) == FOCUSABLES_TOUCH_MODE && + isInTouchMode() && !isFocusableInTouchMode()) { + return; + } + + if (views != null) { + views.add(this); + } } /** @@ -3398,14 +3586,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback { */ public void onStartTemporaryDetach() { } - + /** * Called after {@link #onStartTemporaryDetach} when the container is done * changing the view. */ public void onFinishTemporaryDetach() { } - + /** * capture information of this view for later analysis: developement only * check dynamic switch to make sure we only dump view @@ -3790,25 +3978,25 @@ public class View implements Drawable.Callback, KeyEvent.Callback { * a call on that method would return a non-null InputConnection, and * they are really a first-class editor that the user would normally * start typing on when the go into a window containing your view. - * + * *

        The default implementation always returns false. This does * not mean that its {@link #onCreateInputConnection(EditorInfo)} * will not be called or the user can not otherwise perform edits on your * view; it is just a hint to the system that this is not the primary * purpose of this view. - * + * * @return Returns true if this view is a text editor, else false. */ public boolean onCheckIsTextEditor() { return false; } - + /** * Create a new InputConnection for an InputMethod to interact * with the view. The default implementation returns null, since it doesn't * support input methods. You can override this to implement such support. * This is only needed for views that take focus and text input. - * + * *

        When implementing this, you probably also want to implement * {@link #onCheckIsTextEditor()} to indicate you will return a * non-null InputConnection. @@ -3832,7 +4020,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { public boolean checkInputConnectionProxy(View view) { return false; } - + /** * Show the context menu for this view. It is not safe to hold on to the * menu after returning from this method. @@ -4563,14 +4751,42 @@ public class View implements Drawable.Callback, KeyEvent.Callback { * whether an instance is opaque. Opaque Views are treated in a special way by * the View hierarchy, possibly allowing it to perform optimizations during * invalidate/draw passes. - * + * * @return True if this View is guaranteed to be fully opaque, false otherwise. * * @hide Pending API council approval */ @ViewDebug.ExportedProperty public boolean isOpaque() { - return mBGDrawable != null && mBGDrawable.getOpacity() == PixelFormat.OPAQUE; + return (mPrivateFlags & OPAQUE_MASK) == OPAQUE_MASK; + } + + private void computeOpaqueFlags() { + // Opaque if: + // - Has a background + // - Background is opaque + // - Doesn't have scrollbars or scrollbars are inside overlay + + if (mBGDrawable != null && mBGDrawable.getOpacity() == PixelFormat.OPAQUE) { + mPrivateFlags |= OPAQUE_BACKGROUND; + } else { + mPrivateFlags &= ~OPAQUE_BACKGROUND; + } + + final int flags = mViewFlags; + if (((flags & SCROLLBARS_VERTICAL) == 0 && (flags & SCROLLBARS_HORIZONTAL) == 0) || + (flags & SCROLLBARS_STYLE_MASK) == SCROLLBARS_INSIDE_OVERLAY) { + mPrivateFlags |= OPAQUE_SCROLLBARS; + } else { + mPrivateFlags &= ~OPAQUE_SCROLLBARS; + } + } + + /** + * @hide + */ + protected boolean hasOpaqueScrollbars() { + return (mPrivateFlags & OPAQUE_SCROLLBARS) == OPAQUE_SCROLLBARS; } /** @@ -4897,6 +5113,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { public void setHorizontalScrollBarEnabled(boolean horizontalScrollBarEnabled) { if (isHorizontalScrollBarEnabled() != horizontalScrollBarEnabled) { mViewFlags ^= SCROLLBARS_HORIZONTAL; + computeOpaqueFlags(); recomputePadding(); } } @@ -4926,6 +5143,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { public void setVerticalScrollBarEnabled(boolean verticalScrollBarEnabled) { if (isVerticalScrollBarEnabled() != verticalScrollBarEnabled) { mViewFlags ^= SCROLLBARS_VERTICAL; + computeOpaqueFlags(); recomputePadding(); } } @@ -4954,6 +5172,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { public void setScrollBarStyle(int style) { if (style != (mViewFlags & SCROLLBARS_STYLE_MASK)) { mViewFlags = (mViewFlags & ~SCROLLBARS_STYLE_MASK) | (style & SCROLLBARS_STYLE_MASK); + computeOpaqueFlags(); recomputePadding(); } } @@ -5132,9 +5351,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback { } } } - + /** - * Override this if the vertical scrollbar needs to be hidden in a subclass, like when + * Override this if the vertical scrollbar needs to be hidden in a subclass, like when * FastScroller is visible. * @return whether to temporarily hide the vertical scrollbar * @hide @@ -5569,6 +5788,17 @@ public class View implements Drawable.Callback, KeyEvent.Callback { return (mViewFlags & DRAWING_CACHE_ENABLED) == DRAWING_CACHE_ENABLED; } + /** + *

        Calling this method is equivalent to calling getDrawingCache(false).

        + * + * @return A non-scaled bitmap representing this view or null if cache is disabled. + * + * @see #getDrawingCache(boolean) + */ + public Bitmap getDrawingCache() { + return getDrawingCache(false); + } + /** *

        Returns the bitmap in which this view drawing is cached. The returned bitmap * is null when caching is disabled. If caching is enabled and the cache is not ready, @@ -5576,22 +5806,35 @@ public class View implements Drawable.Callback, KeyEvent.Callback { * draw from the cache when the cache is enabled. To benefit from the cache, you must * request the drawing cache by calling this method and draw it on screen if the * returned bitmap is not null.

        + * + *

        Note about auto scaling in compatibility mode: When auto scaling is not enabled, + * this method will create a bitmap of the same size as this view. Because this bitmap + * will be drawn scaled by the parent ViewGroup, the result on screen might show + * scaling artifacts. To avoid such artifacts, you should call this method by setting + * the auto scaling to true. Doing so, however, will generate a bitmap of a different + * size than the view. This implies that your application must be able to handle this + * size.

        + * + * @param autoScale Indicates whether the generated bitmap should be scaled based on + * the current density of the screen when the application is in compatibility + * mode. * - * @return a bitmap representing this view or null if cache is disabled - * + * @return A bitmap representing this view or null if cache is disabled. + * * @see #setDrawingCacheEnabled(boolean) * @see #isDrawingCacheEnabled() - * @see #buildDrawingCache() + * @see #buildDrawingCache(boolean) * @see #destroyDrawingCache() */ - public Bitmap getDrawingCache() { + public Bitmap getDrawingCache(boolean autoScale) { if ((mViewFlags & WILL_NOT_CACHE_DRAWING) == WILL_NOT_CACHE_DRAWING) { return null; } if ((mViewFlags & DRAWING_CACHE_ENABLED) == DRAWING_CACHE_ENABLED) { - buildDrawingCache(); + buildDrawingCache(autoScale); } - return mDrawingCache == null ? null : mDrawingCache.get(); + return autoScale ? (mDrawingCache == null ? null : mDrawingCache.get()) : + (mUnscaledDrawingCache == null ? null : mUnscaledDrawingCache.get()); } /** @@ -5610,6 +5853,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback { if (bitmap != null) bitmap.recycle(); mDrawingCache = null; } + if (mUnscaledDrawingCache != null) { + final Bitmap bitmap = mUnscaledDrawingCache.get(); + if (bitmap != null) bitmap.recycle(); + mUnscaledDrawingCache = null; + } } /** @@ -5636,19 +5884,37 @@ public class View implements Drawable.Callback, KeyEvent.Callback { return mDrawingCacheBackgroundColor; } + /** + *

        Calling this method is equivalent to calling buildDrawingCache(false).

        + * + * @see #buildDrawingCache(boolean) + */ + public void buildDrawingCache() { + buildDrawingCache(false); + } + /** *

        Forces the drawing cache to be built if the drawing cache is invalid.

        * *

        If you call {@link #buildDrawingCache()} manually without calling * {@link #setDrawingCacheEnabled(boolean) setDrawingCacheEnabled(true)}, you * should cleanup the cache by calling {@link #destroyDrawingCache()} afterwards.

        + * + *

        Note about auto scaling in compatibility mode: When auto scaling is not enabled, + * this method will create a bitmap of the same size as this view. Because this bitmap + * will be drawn scaled by the parent ViewGroup, the result on screen might show + * scaling artifacts. To avoid such artifacts, you should call this method by setting + * the auto scaling to true. Doing so, however, will generate a bitmap of a different + * size than the view. This implies that your application must be able to handle this + * size.

        * * @see #getDrawingCache() * @see #destroyDrawingCache() */ - public void buildDrawingCache() { - if ((mPrivateFlags & DRAWING_CACHE_VALID) == 0 || mDrawingCache == null || - mDrawingCache.get() == null) { + public void buildDrawingCache(boolean autoScale) { + if ((mPrivateFlags & DRAWING_CACHE_VALID) == 0 || (autoScale ? + (mDrawingCache == null || mDrawingCache.get() == null) : + (mUnscaledDrawingCache == null || mUnscaledDrawingCache.get() == null))) { if (ViewDebug.TRACE_HIERARCHY) { ViewDebug.trace(this, ViewDebug.HierarchyTraceType.BUILD_CACHE); @@ -5657,8 +5923,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback { EventLog.writeEvent(60002, hashCode()); } - final int width = mRight - mLeft; - final int height = mBottom - mTop; + int width = mRight - mLeft; + int height = mBottom - mTop; + + final AttachInfo attachInfo = mAttachInfo; + final boolean scalingRequired = attachInfo != null && attachInfo.mScalingRequired; + + if (autoScale && scalingRequired) { + width = (int) ((width * attachInfo.mApplicationScale) + 0.5f); + height = (int) ((height * attachInfo.mApplicationScale) + 0.5f); + } final int drawingCacheBackgroundColor = mDrawingCacheBackgroundColor; final boolean opaque = drawingCacheBackgroundColor != 0 || @@ -5672,7 +5946,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback { } boolean clear = true; - Bitmap bitmap = mDrawingCache == null ? null : mDrawingCache.get(); + Bitmap bitmap = autoScale ? (mDrawingCache == null ? null : mDrawingCache.get()) : + (mUnscaledDrawingCache == null ? null : mUnscaledDrawingCache.get()); if (bitmap == null || bitmap.getWidth() != width || bitmap.getHeight() != height) { @@ -5701,12 +5976,20 @@ public class View implements Drawable.Callback, KeyEvent.Callback { try { bitmap = Bitmap.createBitmap(width, height, quality); - mDrawingCache = new SoftReference(bitmap); + if (autoScale) { + mDrawingCache = new SoftReference(bitmap); + } else { + mUnscaledDrawingCache = new SoftReference(bitmap); + } } catch (OutOfMemoryError e) { // If there is not enough memory to create the bitmap cache, just // ignore the issue as bitmap caches are not required to draw the // view hierarchy - mDrawingCache = null; + if (autoScale) { + mDrawingCache = null; + } else { + mUnscaledDrawingCache = null; + } return; } @@ -5714,7 +5997,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback { } Canvas canvas; - final AttachInfo attachInfo = mAttachInfo; if (attachInfo != null) { canvas = attachInfo.mCanvas; if (canvas == null) { @@ -5737,15 +6019,22 @@ public class View implements Drawable.Callback, KeyEvent.Callback { computeScroll(); final int restoreCount = canvas.save(); + + if (autoScale && scalingRequired) { + final float scale = attachInfo.mApplicationScale; + canvas.scale(scale, scale); + } + canvas.translate(-mScrollX, -mScrollY); - mPrivateFlags = (mPrivateFlags & ~DIRTY_MASK) | DRAWN; + mPrivateFlags |= DRAWN; // Fast path for layouts with no backgrounds if ((mPrivateFlags & SKIP_DRAW) == SKIP_DRAW) { if (ViewDebug.TRACE_HIERARCHY) { ViewDebug.trace(this, ViewDebug.HierarchyTraceType.DRAW); } + mPrivateFlags &= ~DIRTY_MASK; dispatchDraw(canvas); } else { draw(canvas); @@ -5792,7 +6081,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { canvas = new Canvas(bitmap); } - if ((backgroundColor&0xff000000) != 0) { + if ((backgroundColor & 0xff000000) != 0) { bitmap.eraseColor(backgroundColor); } @@ -5800,6 +6089,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback { final int restoreCount = canvas.save(); canvas.translate(-mScrollX, -mScrollY); + // Temporarily remove the dirty mask + int flags = mPrivateFlags; + mPrivateFlags &= ~DIRTY_MASK; + // Fast path for layouts with no backgrounds if ((mPrivateFlags & SKIP_DRAW) == SKIP_DRAW) { dispatchDraw(canvas); @@ -5807,13 +6100,15 @@ public class View implements Drawable.Callback, KeyEvent.Callback { draw(canvas); } + mPrivateFlags = flags; + canvas.restoreToCount(restoreCount); if (attachInfo != null) { // Restore the cached Canvas for our siblings attachInfo.mCanvas = canvas; } - + return bitmap; } @@ -5927,8 +6222,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback { ViewDebug.trace(this, ViewDebug.HierarchyTraceType.DRAW); } - final boolean dirtyOpaque = (mPrivateFlags & DIRTY_MASK) == DIRTY_OPAQUE; - mPrivateFlags = (mPrivateFlags & ~DIRTY_MASK) | DRAWN; + final int privateFlags = mPrivateFlags; + final boolean dirtyOpaque = (privateFlags & DIRTY_MASK) == DIRTY_OPAQUE && + (mAttachInfo == null || !mAttachInfo.mIgnoreDirtyState); + mPrivateFlags = (privateFlags & ~DIRTY_MASK) | DRAWN; /* * Draw traversal performs several drawing steps which must be executed @@ -6306,7 +6603,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { boolean changed = false; if (DBG) { - System.out.println(this + " View.setFrame(" + left + "," + top + "," + Log.d("View", this + " View.setFrame(" + left + "," + top + "," + right + "," + bottom + ")"); } @@ -6709,6 +7006,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback { requestLayout = true; } + computeOpaqueFlags(); + if (requestLayout) { requestLayout(); } @@ -6749,7 +7048,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { mUserPaddingBottom = bottom; final int viewFlags = mViewFlags; - + // Common case is there are no scroll bars. if ((viewFlags & (SCROLLBARS_VERTICAL|SCROLLBARS_HORIZONTAL)) != 0) { // TODO: Deal with RTL languages to adjust left padding instead of right. @@ -6762,7 +7061,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { ? 0 : getHorizontalScrollbarHeight(); } } - + if (mPaddingLeft != left) { changed = true; mPaddingLeft = left; @@ -6899,7 +7198,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { return v; } } - + View parent = this; while (parent.mParent != null && parent.mParent instanceof View) { @@ -6920,8 +7219,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback { getLocationInWindow(location); final AttachInfo info = mAttachInfo; - location[0] += info.mWindowLeft; - location[1] += info.mWindowTop; + if (info != null) { + location[0] += info.mWindowLeft; + location[1] += info.mWindowTop; + } } /** @@ -6947,7 +7248,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { location[1] += view.mTop - view.mScrollY; viewParent = view.mParent; } - + if (viewParent instanceof ViewRoot) { // *cough* final ViewRoot vr = (ViewRoot)viewParent; @@ -7098,7 +7399,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { * @return the Object stored in this view as a tag * * @see #setTag(int, Object) - * @see #getTag() + * @see #getTag() */ public Object getTag(int key) { SparseArray tags = null; @@ -7154,7 +7455,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { + "resource id."); } - setTagInternal(this, key, tag); + setTagInternal(this, key, tag); } private static void setTagInternal(View view, int key, Object tag) { @@ -7189,7 +7490,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { /** * Method that subclasses should implement to check their consistency. The type of * consistency check is indicated by the bit field passed as a parameter. - * + * * @param consistency The type of consistency. See ViewDebug for more information. * * @throws IllegalStateException if the view is in an inconsistent state. @@ -7744,7 +8045,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { /** * BZZZTT!!1! - * + * *

        Provide haptic feedback to the user for this view. * *

        The framework will provide haptic feedback for some built in actions, @@ -7763,7 +8064,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback { /** * BZZZTT!!1! - * + * *

        Like {@link #performHapticFeedback(int)}, with additional options. * * @param feedbackConstant One of the constants defined in @@ -8158,7 +8459,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback { * window. */ static class AttachInfo { - interface Callbacks { void playSoundEffect(int effectId); boolean performHapticFeedback(int effectId, boolean always); @@ -8227,10 +8527,20 @@ public class View implements Drawable.Callback, KeyEvent.Callback { * The top view of the hierarchy. */ View mRootView; - + IBinder mPanelParentWindowToken; Surface mSurface; + /** + * Scale factor used by the compatibility mode + */ + float mApplicationScale; + + /** + * Indicates whether the application is in compatibility mode + */ + boolean mScalingRequired; + /** * Left position of this view's window */ @@ -8287,6 +8597,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback { */ long mDrawingTime; + /** + * Indicates whether or not ignoring the DIRTY_MASK flags. + */ + boolean mIgnoreDirtyState; + /** * Indicates whether the view's window is currently in touch mode. */ @@ -8365,7 +8680,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback { * calling up the hierarchy. */ final Rect mTmpInvalRect = new Rect(); - + + /** + * Temporary list for use in collecting focusable descendents of a view. + */ + final ArrayList mFocusablesTempList = new ArrayList(24); + /** * Creates a new set of attachment information with the specified * events handler and thread. @@ -8408,18 +8728,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback { // use use a height of 1, and then wack the matrix each time we // actually use it. shader = new LinearGradient(0, 0, 0, 1, 0xFF000000, 0, Shader.TileMode.CLAMP); - + paint.setShader(shader); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); } - + public void setFadeColor(int color) { if (color != 0 && color != mLastColor) { mLastColor = color; color |= 0xFF000000; - + shader = new LinearGradient(0, 0, 0, 1, color, 0, Shader.TileMode.CLAMP); - + paint.setShader(shader); // Restore the default transfer mode (src_over) paint.setXfermode(null); diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java index 8e1524bd839d..0e36ec296d9c 100644 --- a/core/java/android/view/ViewConfiguration.java +++ b/core/java/android/view/ViewConfiguration.java @@ -106,6 +106,11 @@ public class ViewConfiguration { * Minimum velocity to initiate a fling, as measured in pixels per second */ private static final int MINIMUM_FLING_VELOCITY = 50; + + /** + * Maximum velocity to initiate a fling, as measured in pixels per second + */ + private static final int MAXIMUM_FLING_VELOCITY = 4000; /** * The maximum size of View's drawing cache, expressed in bytes. This size @@ -122,6 +127,7 @@ public class ViewConfiguration { private final int mEdgeSlop; private final int mFadingEdgeLength; private final int mMinimumFlingVelocity; + private final int mMaximumFlingVelocity; private final int mScrollbarSize; private final int mTouchSlop; private final int mDoubleTapSlop; @@ -139,6 +145,7 @@ public class ViewConfiguration { mEdgeSlop = EDGE_SLOP; mFadingEdgeLength = FADING_EDGE_LENGTH; mMinimumFlingVelocity = MINIMUM_FLING_VELOCITY; + mMaximumFlingVelocity = MAXIMUM_FLING_VELOCITY; mScrollbarSize = SCROLL_BAR_SIZE; mTouchSlop = TOUCH_SLOP; mDoubleTapSlop = DOUBLE_TAP_SLOP; @@ -164,6 +171,7 @@ public class ViewConfiguration { mEdgeSlop = (int) (density * EDGE_SLOP + 0.5f); mFadingEdgeLength = (int) (density * FADING_EDGE_LENGTH + 0.5f); mMinimumFlingVelocity = (int) (density * MINIMUM_FLING_VELOCITY + 0.5f); + mMaximumFlingVelocity = (int) (density * MAXIMUM_FLING_VELOCITY + 0.5f); mScrollbarSize = (int) (density * SCROLL_BAR_SIZE + 0.5f); mTouchSlop = (int) (density * TOUCH_SLOP + 0.5f); mDoubleTapSlop = (int) (density * DOUBLE_TAP_SLOP + 0.5f); @@ -366,6 +374,23 @@ public class ViewConfiguration { return mMinimumFlingVelocity; } + /** + * @return Maximum velocity to initiate a fling, as measured in pixels per second. + * + * @deprecated Use {@link #getScaledMaximumFlingVelocity()} instead. + */ + @Deprecated + public static int getMaximumFlingVelocity() { + return MAXIMUM_FLING_VELOCITY; + } + + /** + * @return Maximum velocity to initiate a fling, as measured in pixels per second. + */ + public int getScaledMaximumFlingVelocity() { + return mMaximumFlingVelocity; + } + /** * The maximum drawing cache size expressed in bytes. * diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java index 74a248f65834..46aea022912b 100644 --- a/core/java/android/view/ViewDebug.java +++ b/core/java/android/view/ViewDebug.java @@ -87,17 +87,17 @@ public class ViewDebug { * check that this value is set to true as not to affect performance. */ public static final boolean TRACE_RECYCLER = false; - + /** * The system property of dynamic switch for capturing view information * when it is set, we dump interested fields and methods for the view on focus - */ + */ static final String SYSTEM_PROPERTY_CAPTURE_VIEW = "debug.captureview"; - + /** * The system property of dynamic switch for capturing event information * when it is set, we log key events, touch/motion and trackball events - */ + */ static final String SYSTEM_PROPERTY_CAPTURE_EVENT = "debug.captureevent"; /** @@ -216,7 +216,7 @@ public class ViewDebug { *

                  *
                  * A specified String is output when the following is true:
        -         * 
        +         *
                  * @return An array of int to String mappings
                  */
                 FlagToString[] flagMapping() default { };
        @@ -228,7 +228,7 @@ public class ViewDebug {
                  *
                  * @return true if the properties of this property should be dumped
                  *
        -         * @see #prefix() 
        +         * @see #prefix()
                  */
                 boolean deepExport() default false;
         
        @@ -313,15 +313,15 @@ public class ViewDebug {
             @Retention(RetentionPolicy.RUNTIME)
             public @interface CapturedViewProperty {
                 /**
        -         * When retrieveReturn is true, we need to retrieve second level methods 
        +         * When retrieveReturn is true, we need to retrieve second level methods
                  * e.g., we need myView.getFirstLevelMethod().getSecondLevelMethod()
        -         * we will set retrieveReturn = true on the annotation of 
        +         * we will set retrieveReturn = true on the annotation of
                  * myView.getFirstLevelMethod()
        -         * @return true if we need the second level methods 
        +         * @return true if we need the second level methods
                  */
        -        boolean retrieveReturn() default false;        
        +        boolean retrieveReturn() default false;
             }
        -        
        +
             private static HashMap, Method[]> mCapturedViewMethodsForClasses = null;
             private static HashMap, Field[]> mCapturedViewFieldsForClasses = null;
         
        @@ -401,7 +401,7 @@ public class ViewDebug {
              */
             public static long getViewRootInstanceCount() {
                 return ViewRoot.getInstanceCount();
        -    }    
        +    }
         
             /**
              * Outputs a trace to the currently opened recycler traces. The trace records the type of
        @@ -624,7 +624,7 @@ public class ViewDebug {
              *
              * This method will return immediately if TRACE_HIERARCHY is false.
              *
        -     * @see #startHierarchyTracing(String, View) 
        +     * @see #startHierarchyTracing(String, View)
              * @see #trace(View, android.view.ViewDebug.HierarchyTraceType)
              */
             public static void stopHierarchyTracing() {
        @@ -671,7 +671,7 @@ public class ViewDebug {
         
                 sHierarhcyRoot = null;
             }
        -    
        +
             static void dispatchCommand(View view, String command, String parameters,
                     OutputStream clientStream) throws IOException {
         
        @@ -1039,10 +1039,10 @@ public class ViewDebug {
         
                 final ArrayList foundMethods = new ArrayList();
                 methods = klass.getDeclaredMethods();
        -        
        +
                 int count = methods.length;
                 for (int i = 0; i < count; i++) {
        -            final Method method = methods[i];            
        +            final Method method = methods[i];
                     if (method.getParameterTypes().length == 0 &&
                             method.isAnnotationPresent(ExportedProperty.class) &&
                             method.getReturnType() != Void.class) {
        @@ -1075,7 +1075,7 @@ public class ViewDebug {
                     klass = klass.getSuperclass();
                 } while (klass != Object.class);
             }
        -    
        +
             private static void exportMethods(Context context, Object view, BufferedWriter out,
                     Class klass, String prefix) throws IOException {
         
        @@ -1235,10 +1235,11 @@ public class ViewDebug {
                 for (int j = 0; j < count; j++) {
                     final FlagToString flagMapping = mapping[j];
                     final boolean ifTrue = flagMapping.outputIf();
        -            final boolean test = (intValue & flagMapping.mask()) == flagMapping.equals();
        +            final int maskResult = intValue & flagMapping.mask();
        +            final boolean test = maskResult == flagMapping.equals();
                     if ((test && ifTrue) || (!test && !ifTrue)) {
                         final String name = flagMapping.name();
        -                final String value = ifTrue ? "true" : "false";
        +                final String value = "0x" + Integer.toHexString(maskResult);
                         writeEntry(out, prefix, name, "", value);
                     }
                 }
        @@ -1259,7 +1260,7 @@ public class ViewDebug {
         
                 for (int j = 0; j < valuesCount; j++) {
                     String name;
        -            String value;
        +            String value = null;
         
                     final int intValue = array[j];
         
        @@ -1275,7 +1276,6 @@ public class ViewDebug {
                         }
                     }
         
        -            value = String.valueOf(intValue);
                     if (hasMapping) {
                         int mappingCount = mapping.length;
                         for (int k = 0; k < mappingCount; k++) {
        @@ -1288,7 +1288,9 @@ public class ViewDebug {
                     }
         
                     if (resolveId) {
        -                value = (String) resolveId(context, intValue);
        +                if (value == null) value = (String) resolveId(context, intValue);
        +            } else {
        +                value = String.valueOf(intValue);
                     }
         
                     writeEntry(out, prefix, name, suffix, value);
        @@ -1396,10 +1398,10 @@ public class ViewDebug {
         
                 final ArrayList foundMethods = new ArrayList();
                 methods = klass.getMethods();
        -        
        +
                 int count = methods.length;
                 for (int i = 0; i < count; i++) {
        -            final Method method = methods[i];            
        +            final Method method = methods[i];
                     if (method.getParameterTypes().length == 0 &&
                             method.isAnnotationPresent(CapturedViewProperty.class) &&
                             method.getReturnType() != Void.class) {
        @@ -1413,14 +1415,14 @@ public class ViewDebug {
         
                 return methods;
             }
        -              
        -    private static String capturedViewExportMethods(Object obj, Class klass, 
        +
        +    private static String capturedViewExportMethods(Object obj, Class klass,
                     String prefix) {
         
                 if (obj == null) {
                     return "null";
                 }
        -        
        +
                 StringBuilder sb = new StringBuilder();
                 final Method[] methods = capturedViewGetPropertyMethods(klass);
         
        @@ -1430,41 +1432,41 @@ public class ViewDebug {
                     try {
                         Object methodValue = method.invoke(obj, (Object[]) null);
                         final Class returnType = method.getReturnType();
        -                
        +
                         CapturedViewProperty property = method.getAnnotation(CapturedViewProperty.class);
                         if (property.retrieveReturn()) {
                             //we are interested in the second level data only
                             sb.append(capturedViewExportMethods(methodValue, returnType, method.getName() + "#"));
        -                } else {                    
        +                } else {
                             sb.append(prefix);
                             sb.append(method.getName());
                             sb.append("()=");
        -                    
        +
                             if (methodValue != null) {
        -                        final String value = methodValue.toString().replace("\n", "\\n");                        
        -                        sb.append(value);                        
        +                        final String value = methodValue.toString().replace("\n", "\\n");
        +                        sb.append(value);
                             } else {
                                 sb.append("null");
                             }
                             sb.append("; ");
                         }
                       } catch (IllegalAccessException e) {
        -                  //Exception IllegalAccess, it is OK here 
        +                  //Exception IllegalAccess, it is OK here
                           //we simply ignore this method
                       } catch (InvocationTargetException e) {
        -                  //Exception InvocationTarget, it is OK here 
        +                  //Exception InvocationTarget, it is OK here
                           //we simply ignore this method
        -              }              
        -        }        
        +              }
        +        }
                 return sb.toString();
             }
         
             private static String capturedViewExportFields(Object obj, Class klass, String prefix) {
        -        
        +
                 if (obj == null) {
                     return "null";
                 }
        -        
        +
                 StringBuilder sb = new StringBuilder();
                 final Field[] fields = capturedViewGetPropertyFields(klass);
         
        @@ -1486,25 +1488,25 @@ public class ViewDebug {
                         }
                         sb.append(' ');
                     } catch (IllegalAccessException e) {
        -                //Exception IllegalAccess, it is OK here 
        +                //Exception IllegalAccess, it is OK here
                         //we simply ignore this field
                     }
                 }
                 return sb.toString();
             }
        -    
        +
             /**
        -     * Dump view info for id based instrument test generation 
        +     * Dump view info for id based instrument test generation
              * (and possibly further data analysis). The results are dumped
        -     * to the log. 
        +     * to the log.
              * @param tag for log
              * @param view for dump
              */
        -    public static void dumpCapturedView(String tag, Object view) {        
        +    public static void dumpCapturedView(String tag, Object view) {
                 Class klass = view.getClass();
                 StringBuilder sb = new StringBuilder(klass.getName() + ": ");
                 sb.append(capturedViewExportFields(view, klass, ""));
        -        sb.append(capturedViewExportMethods(view, klass, ""));        
        -        Log.d(tag, sb.toString());        
        +        sb.append(capturedViewExportMethods(view, klass, ""));
        +        Log.d(tag, sb.toString());
             }
         }
        diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
        index 26fe776ba350..f7b7f029df82 100644
        --- a/core/java/android/view/ViewGroup.java
        +++ b/core/java/android/view/ViewGroup.java
        @@ -24,15 +24,16 @@ import android.graphics.Bitmap;
         import android.graphics.Canvas;
         import android.graphics.Paint;
         import android.graphics.Rect;
        -import android.graphics.Region;
         import android.graphics.RectF;
        +import android.graphics.Region;
         import android.os.Parcelable;
         import android.os.SystemClock;
         import android.util.AttributeSet;
        +import android.util.Config;
         import android.util.EventLog;
         import android.util.Log;
         import android.util.SparseArray;
        -import android.util.Config;
        +import android.view.accessibility.AccessibilityEvent;
         import android.view.animation.Animation;
         import android.view.animation.AnimationUtils;
         import android.view.animation.LayoutAnimationController;
        @@ -52,6 +53,15 @@ import java.util.ArrayList;
          * 

        * Also see {@link LayoutParams} for layout attributes. *

        + * + * @attr ref android.R.styleable#ViewGroup_clipChildren + * @attr ref android.R.styleable#ViewGroup_clipToPadding + * @attr ref android.R.styleable#ViewGroup_layoutAnimation + * @attr ref android.R.styleable#ViewGroup_animationCache + * @attr ref android.R.styleable#ViewGroup_persistentDrawingCache + * @attr ref android.R.styleable#ViewGroup_alwaysDrawnWithCache + * @attr ref android.R.styleable#ViewGroup_addStatesFromChildren + * @attr ref android.R.styleable#ViewGroup_descendantFocusability */ public abstract class ViewGroup extends View implements ViewParent, ViewManager { private static final boolean DBG = false; @@ -89,7 +99,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * Internal flags. - * + * * This field should be made private, so it is hidden from the SDK. * {@hide} */ @@ -142,7 +152,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * to get the index of the child to draw for that iteration. */ protected static final int FLAG_USE_CHILD_DRAWING_ORDER = 0x400; - + /** * When set, this ViewGroup supports static transformations on children; this causes * {@link #getChildStaticTransformation(View, android.view.animation.Transformation)} to be @@ -151,7 +161,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * Any subclass overriding * {@link #getChildStaticTransformation(View, android.view.animation.Transformation)} should * set this flags in {@link #mGroupFlags}. - * + * * {@hide} */ protected static final int FLAG_SUPPORT_STATIC_TRANSFORMATIONS = 0x800; @@ -212,7 +222,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * When set, this ViewGroup should not intercept touch events. */ private static final int FLAG_DISALLOW_INTERCEPT = 0x80000; - + /** * Indicates which types of drawing caches are to be kept in memory. * This field should be made private, so it is hidden from the SDK. @@ -601,6 +611,14 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager */ @Override public void addFocusables(ArrayList views, int direction) { + addFocusables(views, direction, FOCUSABLES_TOUCH_MODE); + } + + /** + * {@inheritDoc} + */ + @Override + public void addFocusables(ArrayList views, int direction, int focusableMode) { final int focusableCount = views.size(); final int descendantFocusability = getDescendantFocusability(); @@ -612,7 +630,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager for (int i = 0; i < count; i++) { final View child = children[i]; if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE) { - child.addFocusables(views, direction); + child.addFocusables(views, direction, focusableMode); } } } @@ -625,7 +643,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager descendantFocusability != FOCUS_AFTER_DESCENDANTS || // No focusable descendants (focusableCount == views.size())) { - super.addFocusables(views, direction); + super.addFocusables(views, direction, focusableMode); } } @@ -680,7 +698,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager ViewParent parent = mParent; if (parent != null) parent.recomputeViewAttributes(this); } - + @Override void dispatchCollectViewAttributes(int visibility) { visibility |= mViewFlags&VISIBILITY_MASK; @@ -812,16 +830,16 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } } - + boolean isUpOrCancel = (action == MotionEvent.ACTION_UP) || - (action == MotionEvent.ACTION_CANCEL); + (action == MotionEvent.ACTION_CANCEL); if (isUpOrCancel) { // Note, we've already copied the previous state to our local // variable, so this takes effect on the next event mGroupFlags &= ~FLAG_DISALLOW_INTERCEPT; } - + // The event wasn't an ACTION_DOWN, dispatch it to our target if // we have one. final View target = mMotionTarget; @@ -868,18 +886,18 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * {@inheritDoc} */ public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) { - + if (disallowIntercept == ((mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0)) { // We're already in this state, assume our ancestors are too return; } - + if (disallowIntercept) { mGroupFlags |= FLAG_DISALLOW_INTERCEPT; } else { mGroupFlags &= ~FLAG_DISALLOW_INTERCEPT; } - + // Pass it up to our parent if (mParent != null) { mParent.requestDisallowInterceptTouchEvent(disallowIntercept); @@ -1020,6 +1038,15 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } + @Override + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + boolean populated = false; + for (int i = 0, count = getChildCount(); i < count; i++) { + populated |= getChildAt(i).dispatchPopulateAccessibilityEvent(event); + } + return populated; + } + /** * {@inheritDoc} */ @@ -1139,7 +1166,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager final View child = children[i]; if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE) { child.setDrawingCacheEnabled(true); - child.buildDrawingCache(); + child.buildDrawingCache(true); } } @@ -1181,7 +1208,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager bindLayoutAnimation(child); if (cache) { child.setDrawingCacheEnabled(true); - child.buildDrawingCache(); + child.buildDrawingCache(true); } } } @@ -1274,7 +1301,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager post(end); } } - + /** * Returns the index of the child to draw for this iteration. Override this * if you want to change the drawing order of children. By default, it @@ -1282,14 +1309,14 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager *

        * NOTE: In order for this method to be called, the * {@link #FLAG_USE_CHILD_DRAWING_ORDER} must be set. - * + * * @param i The current iteration. * @return The index of the child to draw this iteration. */ protected int getChildDrawingOrder(int childCount, int i) { return i; } - + private void notifyAnimationListener() { mGroupFlags &= ~FLAG_NOTIFY_ANIMATION_LISTENER; mGroupFlags |= FLAG_ANIMATION_DONE; @@ -1403,9 +1430,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } - // Clear the flag as early as possible to allow draw() implementations + // Sets the flag as early as possible to allow draw() implementations // to call invalidate() successfully when doing animations - child.mPrivateFlags = (child.mPrivateFlags & ~DIRTY_MASK) | DRAWN; + child.mPrivateFlags |= DRAWN; if (!concatMatrix && canvas.quickReject(cl, ct, cr, cb, Canvas.EdgeType.BW) && (child.mPrivateFlags & DRAW_ANIMATION) == 0) { @@ -1417,10 +1444,12 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager final int sx = child.mScrollX; final int sy = child.mScrollY; + boolean scalingRequired = false; Bitmap cache = null; if ((flags & FLAG_CHILDREN_DRAWN_WITH_CACHE) == FLAG_CHILDREN_DRAWN_WITH_CACHE || (flags & FLAG_ALWAYS_DRAWN_WITH_CACHE) == FLAG_ALWAYS_DRAWN_WITH_CACHE) { - cache = child.getDrawingCache(); + cache = child.getDrawingCache(true); + if (mAttachInfo != null) scalingRequired = mAttachInfo.mScalingRequired; } final boolean hasNoCache = cache == null; @@ -1430,6 +1459,11 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager canvas.translate(cl - sx, ct - sy); } else { canvas.translate(cl, ct); + if (scalingRequired) { + // mAttachInfo cannot be null, otherwise scalingRequired == false + final float scale = 1.0f / mAttachInfo.mApplicationScale; + canvas.scale(scale, scale); + } } float alpha = 1.0f; @@ -1472,7 +1506,11 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if (hasNoCache) { canvas.clipRect(sx, sy, sx + (cr - cl), sy + (cb - ct)); } else { - canvas.clipRect(0, 0, cr - cl, cb - ct); + if (!scalingRequired) { + canvas.clipRect(0, 0, cr - cl, cb - ct); + } else { + canvas.clipRect(0, 0, cache.getWidth(), cache.getHeight()); + } } } @@ -1482,6 +1520,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if (ViewDebug.TRACE_HIERARCHY) { ViewDebug.trace(this, ViewDebug.HierarchyTraceType.DRAW); } + child.mPrivateFlags &= ~DIRTY_MASK; child.dispatchDraw(canvas); } else { child.draw(canvas); @@ -1546,7 +1585,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager children[i].setSelected(selected); } } - + @Override protected void dispatchSetPressed(boolean pressed) { final View[] children = mChildren; @@ -1577,7 +1616,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * {@inheritDoc} * - * @see #setStaticTransformationsEnabled(boolean) + * @see #setStaticTransformationsEnabled(boolean) */ protected boolean getChildStaticTransformation(View child, Transformation t) { return false; @@ -1844,10 +1883,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if (child.hasFocus()) { requestChildFocus(child, child.findFocus()); } - + AttachInfo ai = mAttachInfo; if (ai != null) { - boolean lastKeepOn = ai.mKeepScreenOn; + boolean lastKeepOn = ai.mKeepScreenOn; ai.mKeepScreenOn = false; child.dispatchAttachedToWindow(mAttachInfo, (mViewFlags&VISIBILITY_MASK)); if (ai.mKeepScreenOn) { @@ -2047,7 +2086,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } needGlobalAttributesUpdate(false); - + removeFromArray(index); if (clearChildFocus) { @@ -2080,7 +2119,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } needGlobalAttributesUpdate(false); - + if (notifyListener) { onHierarchyChangeListener.onChildViewRemoved(this, view); } @@ -2128,7 +2167,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager View clearChildFocus = null; needGlobalAttributesUpdate(false); - + for (int i = count - 1; i >= 0; i--) { final View view = children[i]; @@ -2173,7 +2212,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if (child == mFocused) { child.clearFocus(); } - + if (animate && child.getAnimation() != null) { addDisappearingView(child); } else if (child.mAttachInfo != null) { @@ -2323,7 +2362,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager final boolean drawAnimation = (child.mPrivateFlags & DRAW_ANIMATION) == DRAW_ANIMATION; // Check whether the child that requests the invalidate is fully opaque - final boolean isOpaque = child.isOpaque(); + final boolean isOpaque = child.isOpaque() && !drawAnimation && + child.getAnimation() != null; // Mark the child as dirty, using the appropriate flag // Make sure we do not set both flags at the same time final int opaqueFlag = isOpaque ? DIRTY_OPAQUE : DIRTY; @@ -3135,7 +3175,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } } - + @Override protected boolean fitSystemWindows(Rect insets) { @@ -3269,7 +3309,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * laid out. See * {@link android.R.styleable#ViewGroup_Layout ViewGroup Layout Attributes} * for a list of all child view attributes that this class supports. - * + * *

        * The base LayoutParams class just describes how big the view wants to be * for both width and height. For each dimension, it can specify one of: @@ -3400,7 +3440,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * @param output the String to prepend to the internal representation * @return a String with the following format: output + * "ViewGroup.LayoutParams={ width=WIDTH, height=HEIGHT }" - * + * * @hide */ public String debug(String output) { @@ -3413,7 +3453,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * * @param size the size to convert * @return a String instance representing the supplied size - * + * * @hide */ protected static String sizeToString(int size) { diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java index 5090c56b5edc..6f6e22477d25 100644 --- a/core/java/android/view/ViewRoot.java +++ b/core/java/android/view/ViewRoot.java @@ -30,14 +30,18 @@ import android.os.Process; import android.os.SystemProperties; import android.util.AndroidRuntimeException; import android.util.Config; +import android.util.DisplayMetrics; import android.util.Log; import android.util.EventLog; import android.util.SparseArray; import android.view.View.MeasureSpec; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; import android.widget.Scroller; import android.content.pm.PackageManager; +import android.content.res.CompatibilityInfo; import android.content.Context; import android.app.ActivityManagerNative; import android.Manifest; @@ -90,18 +94,18 @@ public final class ViewRoot extends Handler implements ViewParent, static final ThreadLocal sRunQueues = new ThreadLocal(); - private static int sDrawTime; + private static int sDrawTime; long mLastTrackballTime = 0; final TrackballAxis mTrackballAxisX = new TrackballAxis(); final TrackballAxis mTrackballAxisY = new TrackballAxis(); final int[] mTmpLocation = new int[2]; - + final InputMethodCallback mInputMethodCallback; final SparseArray mPendingEvents = new SparseArray(); int mPendingEventSeq = 0; - + final Thread mThread; final WindowLeaked mLocation; @@ -123,16 +127,13 @@ public final class ViewRoot extends Handler implements ViewParent, int mHeight; Rect mDirty; // will be a graphics.Region soon boolean mIsAnimating; - // TODO: change these to scalar class. - private float mAppScale; - private float mAppScaleInverted; // = 1.0f / mAppScale - private int[] mWindowLayoutParamsBackup = null; + + CompatibilityInfo.Translator mTranslator; final View.AttachInfo mAttachInfo; final Rect mTempRect; // used in the transaction to not thrash the heap. final Rect mVisRect; // used to retrieve visible rect of focused view. - final Point mVisPoint; // used to retrieve global offset of focused view. boolean mTraversalScheduled; boolean mWillDrawSoon; @@ -168,7 +169,7 @@ public final class ViewRoot extends Handler implements ViewParent, int mScrollY; int mCurScrollY; Scroller mScroller; - + EGL10 mEgl; EGLDisplay mEglDisplay; EGLContext mEglContext; @@ -178,7 +179,7 @@ public final class ViewRoot extends Handler implements ViewParent, boolean mUseGL; boolean mGlWanted; - final ViewConfiguration mViewConfiguration; + final ViewConfiguration mViewConfiguration; /** * see {@link #playSoundEffect(int)} @@ -216,7 +217,6 @@ public final class ViewRoot extends Handler implements ViewParent, mDirty = new Rect(); mTempRect = new Rect(); mVisRect = new Rect(); - mVisPoint = new Point(); mWinFrame = new Rect(); mWindow = new W(this, context); mInputMethodCallback = new InputMethodCallback(this); @@ -384,29 +384,39 @@ public final class ViewRoot extends Handler implements ViewParent, synchronized (this) { if (mView == null) { mView = view; - mAppScale = mView.getContext().getApplicationScale(); - if (mAppScale != 1.0f) { - mWindowLayoutParamsBackup = new int[4]; - } - mAppScaleInverted = 1.0f / mAppScale; mWindowAttributes.copyFrom(attrs); + + CompatibilityInfo compatibilityInfo = + mView.getContext().getResources().getCompatibilityInfo(); + mTranslator = compatibilityInfo.getTranslator(attrs); + boolean restore = false; + if (attrs != null && mTranslator != null) { + restore = true; + attrs.backup(); + mTranslator.translateWindowLayout(attrs); + } + if (DEBUG_LAYOUT) Log.d(TAG, "WindowLayout in setView:" + attrs); + mSoftInputMode = attrs.softInputMode; mWindowAttributesChanged = true; mAttachInfo.mRootView = view; + mAttachInfo.mScalingRequired = + mTranslator == null ? false : mTranslator.scalingRequired; + mAttachInfo.mApplicationScale = + mTranslator == null ? 1.0f : mTranslator.applicationScale; if (panelParentView != null) { mAttachInfo.mPanelParentWindowToken = panelParentView.getApplicationWindowToken(); } mAdded = true; int res; /* = WindowManagerImpl.ADD_OKAY; */ - + // Schedule the first layout -before- adding to the window // manager, to make sure we do the relayout before receiving // any other events from the system. requestLayout(); - try { - res = sWindowSession.add(mWindow, attrs, + res = sWindowSession.add(mWindow, mWindowAttributes, getHostVisibility(), mAttachInfo.mContentInsets); } catch (RemoteException e) { mAdded = false; @@ -414,8 +424,15 @@ public final class ViewRoot extends Handler implements ViewParent, mAttachInfo.mRootView = null; unscheduleTraversals(); throw new RuntimeException("Adding window failed", e); + } finally { + if (restore) { + attrs.restore(); + } + } + + if (mTranslator != null) { + mTranslator.translateRectInScreenToAppWindow(mAttachInfo.mContentInsets); } - mAttachInfo.mContentInsets.scale(mAppScaleInverted); mPendingContentInsets.set(mAttachInfo.mContentInsets); mPendingVisibleInsets.set(0, 0, 0, 0); if (Config.LOGV) Log.v("ViewRoot", "Added window " + mWindow); @@ -526,18 +543,20 @@ public final class ViewRoot extends Handler implements ViewParent, public void invalidateChild(View child, Rect dirty) { checkThread(); - if (LOCAL_LOGV) Log.v(TAG, "Invalidate child: " + dirty); - if (mCurScrollY != 0 || mAppScale != 1.0f) { + if (DEBUG_DRAW) Log.v(TAG, "Invalidate child: " + dirty); + if (mCurScrollY != 0 || mTranslator != null) { mTempRect.set(dirty); + dirty = mTempRect; if (mCurScrollY != 0) { - mTempRect.offset(0, -mCurScrollY); + dirty.offset(0, -mCurScrollY); } - if (mAppScale != 1.0f) { - mTempRect.scale(mAppScale); + if (mTranslator != null) { + mTranslator.translateRectInAppWindowToScreen(dirty); + } + if (mAttachInfo.mScalingRequired) { + dirty.inset(-1, -1); } - dirty = mTempRect; } - // TODO: When doing a union with mDirty != empty, we must cancel all the DIRTY_OPAQUE flags mDirty.union(dirty); if (!mWillDrawSoon) { scheduleTraversals(); @@ -553,7 +572,7 @@ public final class ViewRoot extends Handler implements ViewParent, return null; } - public boolean getChildVisibleRect(View child, Rect r, android.graphics.Point offset) { + public boolean getChildVisibleRect(View child, Rect r, android.graphics.Point offset) { if (child != mView) { throw new RuntimeException("child is not mine, honest!"); } @@ -582,7 +601,7 @@ public final class ViewRoot extends Handler implements ViewParent, int getHostVisibility() { return mAppVisible ? mView.getVisibility() : View.GONE; } - + private void performTraversals() { // cache mView since it is used so much below... final View host = mView; @@ -614,19 +633,22 @@ public final class ViewRoot extends Handler implements ViewParent, boolean viewVisibilityChanged = mViewVisibility != viewVisibility || mNewSurfaceNeeded; + float appScale = mAttachInfo.mApplicationScale; + WindowManager.LayoutParams params = null; if (mWindowAttributesChanged) { mWindowAttributesChanged = false; params = lp; } - + Rect frame = mWinFrame; if (mFirst) { fullRedrawNeeded = true; mLayoutRequested = true; - Display d = new Display(0); - desiredWindowWidth = (int) (d.getWidth() * mAppScaleInverted); - desiredWindowHeight = (int) (d.getHeight() * mAppScaleInverted); + DisplayMetrics packageMetrics = + mView.getContext().getResources().getDisplayMetrics(); + desiredWindowWidth = packageMetrics.widthPixels; + desiredWindowHeight = packageMetrics.heightPixels; // For the very first time, tell the view hierarchy that it // is attached to the window. Note that at this point the surface @@ -641,12 +663,13 @@ public final class ViewRoot extends Handler implements ViewParent, host.dispatchAttachedToWindow(attachInfo, 0); getRunQueue().executeActions(attachInfo.mHandler); //Log.i(TAG, "Screen on initialized: " + attachInfo.mKeepScreenOn); + } else { - desiredWindowWidth = mWinFrame.width(); - desiredWindowHeight = mWinFrame.height(); + desiredWindowWidth = frame.width(); + desiredWindowHeight = frame.height(); if (desiredWindowWidth != mWidth || desiredWindowHeight != mHeight) { if (DEBUG_ORIENTATION) Log.v("ViewRoot", - "View " + host + " resized to: " + mWinFrame); + "View " + host + " resized to: " + frame); fullRedrawNeeded = true; mLayoutRequested = true; windowResizesToFitContent = true; @@ -669,7 +692,7 @@ public final class ViewRoot extends Handler implements ViewParent, } boolean insetsChanged = false; - + if (mLayoutRequested) { if (mFirst) { host.fitSystemWindows(mAttachInfo.mContentInsets); @@ -694,9 +717,10 @@ public final class ViewRoot extends Handler implements ViewParent, || lp.height == ViewGroup.LayoutParams.WRAP_CONTENT) { windowResizesToFitContent = true; - Display d = new Display(0); - desiredWindowWidth = (int) (d.getWidth() * mAppScaleInverted); - desiredWindowHeight = (int) (d.getHeight() * mAppScaleInverted); + DisplayMetrics packageMetrics = + mView.getContext().getResources().getDisplayMetrics(); + desiredWindowWidth = packageMetrics.widthPixels; + desiredWindowHeight = packageMetrics.heightPixels; } } @@ -753,7 +777,7 @@ public final class ViewRoot extends Handler implements ViewParent, } } } - + if (params != null && (host.mPrivateFlags & View.REQUEST_TRANSPARENT_REGIONS) != 0) { if (!PixelFormat.formatHasAlpha(params.format)) { params.format = PixelFormat.TRANSLUCENT; @@ -782,7 +806,7 @@ public final class ViewRoot extends Handler implements ViewParent, // computed insets. insetsPending = computesInternalInsets && (mFirst || viewVisibilityChanged); - + if (mWindowAttributes.memoryType == WindowManager.LayoutParams.MEMORY_TYPE_GPU) { if (params == null) { params = mWindowAttributes; @@ -791,7 +815,6 @@ public final class ViewRoot extends Handler implements ViewParent, } } - final Rect frame = mWinFrame; boolean initialized = false; boolean contentInsetsChanged = false; boolean visibleInsetsChanged; @@ -818,7 +841,7 @@ public final class ViewRoot extends Handler implements ViewParent, + " content=" + mPendingContentInsets.toShortString() + " visible=" + mPendingVisibleInsets.toShortString() + " surface=" + mSurface); - + contentInsetsChanged = !mPendingContentInsets.equals( mAttachInfo.mContentInsets); visibleInsetsChanged = !mPendingVisibleInsets.equals( @@ -846,7 +869,7 @@ public final class ViewRoot extends Handler implements ViewParent, // all at once. newSurface = true; fullRedrawNeeded = true; - + if (mGlWanted && !mUseGL) { initializeGL(); initialized = mGlCanvas != null; @@ -864,7 +887,7 @@ public final class ViewRoot extends Handler implements ViewParent, } catch (RemoteException e) { } if (DEBUG_ORIENTATION) Log.v( - "ViewRoot", "Relayout returned: frame=" + mWinFrame + ", surface=" + mSurface); + "ViewRoot", "Relayout returned: frame=" + frame + ", surface=" + mSurface); attachInfo.mWindowLeft = frame.left; attachInfo.mWindowTop = frame.top; @@ -876,7 +899,7 @@ public final class ViewRoot extends Handler implements ViewParent, mHeight = frame.height(); if (initialized) { - mGlCanvas.setViewport((int) (mWidth * mAppScale), (int) (mHeight * mAppScale)); + mGlCanvas.setViewport((int) (mWidth * appScale), (int) (mHeight * appScale)); } boolean focusChangedDueToTouchMode = ensureTouchModeLocally( @@ -891,7 +914,7 @@ public final class ViewRoot extends Handler implements ViewParent, + " mHeight=" + mHeight + " measuredHeight" + host.mMeasuredHeight + " coveredInsetsChanged=" + contentInsetsChanged); - + // Ask host how big it wants to be host.measure(childWidthMeasureSpec, childHeightMeasureSpec); @@ -939,7 +962,6 @@ public final class ViewRoot extends Handler implements ViewParent, if (Config.DEBUG && ViewDebug.profileLayout) { startTime = SystemClock.elapsedRealtime(); } - host.layout(0, 0, host.mMeasuredWidth, host.mMeasuredHeight); if (Config.DEBUG && ViewDebug.consistencyCheckEnabled) { @@ -966,11 +988,10 @@ public final class ViewRoot extends Handler implements ViewParent, mTmpLocation[1] + host.mBottom - host.mTop); host.gatherTransparentRegion(mTransparentRegion); + if (mTranslator != null) { + mTranslator.translateRegionInWindowToScreen(mTransparentRegion); + } - // TODO: scale the region, like: - // Region uses native methods. We probabl should have ScalableRegion class. - - // Region does not have equals method ? if (!mTransparentRegion.equals(mPreviousTransparentRegion)) { mPreviousTransparentRegion.set(mTransparentRegion); // reconfigure window manager @@ -981,7 +1002,6 @@ public final class ViewRoot extends Handler implements ViewParent, } } - if (DBG) { System.out.println("======================================"); System.out.println("performTraversals -- after setFrame"); @@ -1001,20 +1021,23 @@ public final class ViewRoot extends Handler implements ViewParent, givenContent.left = givenContent.top = givenContent.right = givenContent.bottom = givenVisible.left = givenVisible.top = givenVisible.right = givenVisible.bottom = 0; - insets.contentInsets.scale(mAppScale); - insets.visibleInsets.scale(mAppScale); - attachInfo.mTreeObserver.dispatchOnComputeInternalInsets(insets); + Rect contentInsets = insets.contentInsets; + Rect visibleInsets = insets.visibleInsets; + if (mTranslator != null) { + contentInsets = mTranslator.getTranslatedContentInsets(contentInsets); + visibleInsets = mTranslator.getTranslatedVisbileInsets(visibleInsets); + } if (insetsPending || !mLastGivenInsets.equals(insets)) { mLastGivenInsets.set(insets); try { sWindowSession.setInsets(mWindow, insets.mTouchableInsets, - insets.contentInsets, insets.visibleInsets); + contentInsets, visibleInsets); } catch (RemoteException e) { } } } - + if (mFirst) { // handle first focus request if (DEBUG_INPUT_RESIZE) Log.v(TAG, "First: mView.hasFocus()=" @@ -1052,7 +1075,7 @@ public final class ViewRoot extends Handler implements ViewParent, } } } - + boolean cancelDraw = attachInfo.mTreeObserver.dispatchOnPreDraw(); if (!cancelDraw && !newSurface) { @@ -1140,10 +1163,9 @@ public final class ViewRoot extends Handler implements ViewParent, mAttachInfo.mViewScrollChanged = false; mAttachInfo.mTreeObserver.dispatchOnScrollChanged(); } - + int yoff; - final boolean scrolling = mScroller != null - && mScroller.computeScrollOffset(); + final boolean scrolling = mScroller != null && mScroller.computeScrollOffset(); if (scrolling) { yoff = mScroller.getCurrY(); } else { @@ -1153,26 +1175,28 @@ public final class ViewRoot extends Handler implements ViewParent, mCurScrollY = yoff; fullRedrawNeeded = true; } + float appScale = mAttachInfo.mApplicationScale; + boolean scalingRequired = mAttachInfo.mScalingRequired; Rect dirty = mDirty; if (mUseGL) { if (!dirty.isEmpty()) { Canvas canvas = mGlCanvas; - if (mGL!=null && canvas != null) { + if (mGL != null && canvas != null) { mGL.glDisable(GL_SCISSOR_TEST); mGL.glClearColor(0, 0, 0, 0); mGL.glClear(GL_COLOR_BUFFER_BIT); mGL.glEnable(GL_SCISSOR_TEST); mAttachInfo.mDrawingTime = SystemClock.uptimeMillis(); + mAttachInfo.mIgnoreDirtyState = true; mView.mPrivateFlags |= View.DRAWN; - float scale = mAppScale; int saveCount = canvas.save(Canvas.MATRIX_SAVE_FLAG); try { canvas.translate(0, -yoff); - if (scale != 1.0f) { - canvas.scale(scale, scale); + if (mTranslator != null) { + mTranslator.translateCanvas(canvas); } mView.draw(canvas); if (Config.DEBUG && ViewDebug.consistencyCheckEnabled) { @@ -1182,6 +1206,8 @@ public final class ViewRoot extends Handler implements ViewParent, canvas.restoreToCount(saveCount); } + mAttachInfo.mIgnoreDirtyState = false; + mEgl.eglSwapBuffers(mEglDisplay, mEglSurface); checkEglErrors(); @@ -1201,20 +1227,33 @@ public final class ViewRoot extends Handler implements ViewParent, return; } - if (fullRedrawNeeded) - dirty.union(0, 0, (int) (mWidth * mAppScale), (int) (mHeight * mAppScale)); + if (fullRedrawNeeded) { + mAttachInfo.mIgnoreDirtyState = true; + dirty.union(0, 0, (int) (mWidth * appScale), (int) (mHeight * appScale)); + } if (DEBUG_ORIENTATION || DEBUG_DRAW) { Log.v("ViewRoot", "Draw " + mView + "/" + mWindowAttributes.getTitle() + ": dirty={" + dirty.left + "," + dirty.top + "," + dirty.right + "," + dirty.bottom + "} surface=" - + surface + " surface.isValid()=" + surface.isValid()); + + surface + " surface.isValid()=" + surface.isValid() + ", appScale:" + + appScale + ", width=" + mWidth + ", height=" + mHeight); } Canvas canvas; try { + int left = dirty.left; + int top = dirty.top; + int right = dirty.right; + int bottom = dirty.bottom; canvas = surface.lockCanvas(dirty); + + if (left != dirty.left || top != dirty.top || right != dirty.right || + bottom != dirty.bottom) { + mAttachInfo.mIgnoreDirtyState = true; + } + // TODO: Do this in native canvas.setDensityScale(mDensity); } catch (Surface.OutOfResourcesException e) { @@ -1242,12 +1281,11 @@ public final class ViewRoot extends Handler implements ViewParent, // need to clear it before drawing so that the child will // properly re-composite its drawing on a transparent // background. This automatically respects the clip/dirty region - if (!canvas.isOpaque()) { - canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR); - } else if (yoff != 0) { - // If we are applying an offset, we need to clear the area - // where the offset doesn't appear to avoid having garbage - // left in the blank areas. + // or + // If we are applying an offset, we need to clear the area + // where the offset doesn't appear to avoid having garbage + // left in the blank areas. + if (!canvas.isOpaque() || yoff != 0) { canvas.drawColor(0, PorterDuff.Mode.CLEAR); } @@ -1256,27 +1294,27 @@ public final class ViewRoot extends Handler implements ViewParent, mAttachInfo.mDrawingTime = SystemClock.uptimeMillis(); mView.mPrivateFlags |= View.DRAWN; - float scale = mAppScale; - Context cxt = mView.getContext(); if (DEBUG_DRAW) { - Log.i(TAG, "Drawing: package:" + cxt.getPackageName() + ", appScale=" + mAppScale); + Context cxt = mView.getContext(); + Log.i(TAG, "Drawing: package:" + cxt.getPackageName() + + ", metrics=" + mView.getContext().getResources().getDisplayMetrics()); } - int saveCount = canvas.save(Canvas.MATRIX_SAVE_FLAG); + int saveCount = canvas.save(Canvas.MATRIX_SAVE_FLAG); try { canvas.translate(0, -yoff); - if (scale != 1.0f) { - // re-scale this - canvas.scale(scale, scale); + if (mTranslator != null) { + mTranslator.translateCanvas(canvas); } mView.draw(canvas); - - if (Config.DEBUG && ViewDebug.consistencyCheckEnabled) { - mView.dispatchConsistencyCheck(ViewDebug.CONSISTENCY_DRAWING); - } } finally { + mAttachInfo.mIgnoreDirtyState = false; canvas.restoreToCount(saveCount); } + if (Config.DEBUG && ViewDebug.consistencyCheckEnabled) { + mView.dispatchConsistencyCheck(ViewDebug.CONSISTENCY_DRAWING); + } + if (Config.DEBUG && ViewDebug.showFps) { int now = (int)SystemClock.elapsedRealtime(); if (sDrawTime != 0) { @@ -1289,7 +1327,7 @@ public final class ViewRoot extends Handler implements ViewParent, EventLog.writeEvent(60000, SystemClock.elapsedRealtime() - startTime); } } - + } finally { surface.unlockCanvasAndPost(canvas); } @@ -1297,7 +1335,7 @@ public final class ViewRoot extends Handler implements ViewParent, if (LOCAL_LOGV) { Log.v("ViewRoot", "Surface " + surface + " unlockCanvasAndPost"); } - + if (scrolling) { mFullRedrawNeeded = true; scheduleTraversals(); @@ -1310,7 +1348,7 @@ public final class ViewRoot extends Handler implements ViewParent, final Rect vi = attachInfo.mVisibleInsets; int scrollY = 0; boolean handled = false; - + if (vi.left > ci.left || vi.top > ci.top || vi.right > ci.right || vi.bottom > ci.bottom) { // We'll assume that we aren't going to change the scroll @@ -1397,7 +1435,7 @@ public final class ViewRoot extends Handler implements ViewParent, } } } - + if (scrollY != mScrollY) { if (DEBUG_INPUT_RESIZE) Log.v(TAG, "Pan scroll changed: old=" + mScrollY + " , new=" + scrollY); @@ -1411,10 +1449,10 @@ public final class ViewRoot extends Handler implements ViewParent, } mScrollY = scrollY; } - + return handled; } - + public void requestChildFocus(View child, View focused) { checkThread(); if (mFocusedView != focused) { @@ -1494,7 +1532,7 @@ public final class ViewRoot extends Handler implements ViewParent, } catch (RemoteException e) { } } - + /** * Return true if child is an ancestor of parent, (or equal to the parent). */ @@ -1568,10 +1606,9 @@ public final class ViewRoot extends Handler implements ViewParent, } else { didFinish = event.getAction() == MotionEvent.ACTION_OUTSIDE; } - if (event != null) { - event.scale(mAppScaleInverted); + if (event != null && mTranslator != null) { + mTranslator.translateEventInScreenToAppWindow(event); } - try { boolean handled; if (mView != null && mAdded && event != null) { @@ -1657,6 +1694,7 @@ public final class ViewRoot extends Handler implements ViewParent, case RESIZED: Rect coveredInsets = ((Rect[])msg.obj)[0]; Rect visibleInsets = ((Rect[])msg.obj)[1]; + if (mWinFrame.width() == msg.arg1 && mWinFrame.height() == msg.arg2 && mPendingContentInsets.equals(coveredInsets) && mPendingVisibleInsets.equals(visibleInsets)) { @@ -1691,16 +1729,17 @@ public final class ViewRoot extends Handler implements ViewParent, if (mGlWanted && !mUseGL) { initializeGL(); if (mGlCanvas != null) { - mGlCanvas.setViewport((int) (mWidth * mAppScale), - (int) (mHeight * mAppScale)); + float appScale = mAttachInfo.mApplicationScale; + mGlCanvas.setViewport( + (int) (mWidth * appScale), (int) (mHeight * appScale)); } } } } - + mLastWasImTarget = WindowManager.LayoutParams .mayUseInputMethod(mWindowAttributes.flags); - + InputMethodManager imm = InputMethodManager.peekInstance(); if (mView != null) { if (hasWindowFocus && imm != null && mLastWasImTarget) { @@ -1708,7 +1747,7 @@ public final class ViewRoot extends Handler implements ViewParent, } mView.dispatchWindowFocusChanged(hasWindowFocus); } - + // Note: must be done after the focus change callbacks, // so all of the view state is set up correctly. if (hasWindowFocus) { @@ -1726,6 +1765,10 @@ public final class ViewRoot extends Handler implements ViewParent, ~WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION; mHasHadWindowFocus = true; } + + if (hasWindowFocus && mView != null) { + sendAccessibilityEvents(); + } } } break; case DIE: @@ -1892,9 +1935,6 @@ public final class ViewRoot extends Handler implements ViewParent, } else { didFinish = false; } - if (event != null) { - event.scale(mAppScaleInverted); - } if (DEBUG_TRACKBALL) Log.v(TAG, "Motion event:" + event); @@ -2120,50 +2160,50 @@ public final class ViewRoot extends Handler implements ViewParent, } /** - * log motion events + * log motion events */ private static void captureMotionLog(String subTag, MotionEvent ev) { - //check dynamic switch + //check dynamic switch if (ev == null || SystemProperties.getInt(ViewDebug.SYSTEM_PROPERTY_CAPTURE_EVENT, 0) == 0) { return; - } - - StringBuilder sb = new StringBuilder(subTag + ": "); - sb.append(ev.getDownTime()).append(','); - sb.append(ev.getEventTime()).append(','); - sb.append(ev.getAction()).append(','); - sb.append(ev.getX()).append(','); - sb.append(ev.getY()).append(','); - sb.append(ev.getPressure()).append(','); - sb.append(ev.getSize()).append(','); - sb.append(ev.getMetaState()).append(','); - sb.append(ev.getXPrecision()).append(','); - sb.append(ev.getYPrecision()).append(','); - sb.append(ev.getDeviceId()).append(','); + } + + StringBuilder sb = new StringBuilder(subTag + ": "); + sb.append(ev.getDownTime()).append(','); + sb.append(ev.getEventTime()).append(','); + sb.append(ev.getAction()).append(','); + sb.append(ev.getX()).append(','); + sb.append(ev.getY()).append(','); + sb.append(ev.getPressure()).append(','); + sb.append(ev.getSize()).append(','); + sb.append(ev.getMetaState()).append(','); + sb.append(ev.getXPrecision()).append(','); + sb.append(ev.getYPrecision()).append(','); + sb.append(ev.getDeviceId()).append(','); sb.append(ev.getEdgeFlags()); - Log.d(TAG, sb.toString()); + Log.d(TAG, sb.toString()); } /** - * log motion events + * log motion events */ private static void captureKeyLog(String subTag, KeyEvent ev) { - //check dynamic switch - if (ev == null || + //check dynamic switch + if (ev == null || SystemProperties.getInt(ViewDebug.SYSTEM_PROPERTY_CAPTURE_EVENT, 0) == 0) { return; } - StringBuilder sb = new StringBuilder(subTag + ": "); + StringBuilder sb = new StringBuilder(subTag + ": "); sb.append(ev.getDownTime()).append(','); sb.append(ev.getEventTime()).append(','); sb.append(ev.getAction()).append(','); - sb.append(ev.getKeyCode()).append(','); + sb.append(ev.getKeyCode()).append(','); sb.append(ev.getRepeatCount()).append(','); sb.append(ev.getMetaState()).append(','); sb.append(ev.getDeviceId()).append(','); sb.append(ev.getScanCode()); - Log.d(TAG, sb.toString()); - } + Log.d(TAG, sb.toString()); + } int enqueuePendingEvent(Object event, boolean sendDone) { int seq = mPendingEventSeq+1; @@ -2181,7 +2221,7 @@ public final class ViewRoot extends Handler implements ViewParent, } return event; } - + private void deliverKeyEvent(KeyEvent event, boolean sendDone) { // If mView is null, we just consume the key event because it doesn't // make sense to do anything else with it. @@ -2238,7 +2278,7 @@ public final class ViewRoot extends Handler implements ViewParent, } } } - + private void deliverKeyEventToViewHierarchy(KeyEvent event, boolean sendDone) { try { if (mView != null && mAdded) { @@ -2247,8 +2287,8 @@ public final class ViewRoot extends Handler implements ViewParent, if (checkForLeavingTouchModeAndConsume(event)) { return; - } - + } + if (Config.LOGV) { captureKeyLog("captureDispatchKeyEvent", event); } @@ -2324,24 +2364,31 @@ public final class ViewRoot extends Handler implements ViewParent, private int relayoutWindow(WindowManager.LayoutParams params, int viewVisibility, boolean insetsPending) throws RemoteException { + float appScale = mAttachInfo.mApplicationScale; boolean restore = false; - if (params != null && mAppScale != 1.0f) { + if (params != null && mTranslator != null) { restore = true; - params.scale(mAppScale, mWindowLayoutParamsBackup); + params.backup(); + mTranslator.translateWindowLayout(params); + } + if (params != null) { + if (DBG) Log.d(TAG, "WindowLayout in layoutWindow:" + params); } int relayoutResult = sWindowSession.relayout( mWindow, params, - (int) (mView.mMeasuredWidth * mAppScale), - (int) (mView.mMeasuredHeight * mAppScale), + (int) (mView.mMeasuredWidth * appScale), + (int) (mView.mMeasuredHeight * appScale), viewVisibility, insetsPending, mWinFrame, mPendingContentInsets, mPendingVisibleInsets, mSurface); if (restore) { - params.restore(mWindowLayoutParamsBackup); + params.restore(); + } + + if (mTranslator != null) { + mTranslator.translateRectInScreenToAppWinFrame(mWinFrame); + mTranslator.translateRectInScreenToAppWindow(mPendingContentInsets); + mTranslator.translateRectInScreenToAppWindow(mPendingVisibleInsets); } - - mPendingContentInsets.scale(mAppScaleInverted); - mPendingVisibleInsets.scale(mAppScaleInverted); - mWinFrame.scale(mAppScaleInverted); return relayoutResult; } @@ -2448,11 +2495,14 @@ public final class ViewRoot extends Handler implements ViewParent, + " visibleInsets=" + visibleInsets.toShortString() + " reportDraw=" + reportDraw); Message msg = obtainMessage(reportDraw ? RESIZED_REPORT :RESIZED); - - coveredInsets.scale(mAppScaleInverted); - visibleInsets.scale(mAppScaleInverted); - msg.arg1 = (int) (w * mAppScaleInverted); - msg.arg2 = (int) (h * mAppScaleInverted); + if (mTranslator != null) { + mTranslator.translateRectInScreenToAppWindow(coveredInsets); + mTranslator.translateRectInScreenToAppWindow(visibleInsets); + w *= mTranslator.applicationInvertedScale; + h *= mTranslator.applicationInvertedScale; + } + msg.arg1 = w; + msg.arg2 = h; msg.obj = new Rect[] { new Rect(coveredInsets), new Rect(visibleInsets) }; sendMessage(msg); } @@ -2511,6 +2561,21 @@ public final class ViewRoot extends Handler implements ViewParent, sendMessage(msg); } + /** + * The window is getting focus so if there is anything focused/selected + * send an {@link AccessibilityEvent} to announce that. + */ + private void sendAccessibilityEvents() { + if (!AccessibilityManager.getInstance(mView.getContext()).isEnabled()) { + return; + } + mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); + View focusedView = mView.findFocus(); + if (focusedView != null && focusedView != mView) { + focusedView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED); + } + } + public boolean showContextMenuForChild(View originalView) { return false; } @@ -2540,14 +2605,14 @@ public final class ViewRoot extends Handler implements ViewParent, boolean immediate) { return scrollToRectOrFocus(rectangle, immediate); } - + static class InputMethodCallback extends IInputMethodCallback.Stub { private WeakReference mViewRoot; public InputMethodCallback(ViewRoot viewRoot) { mViewRoot = new WeakReference(viewRoot); } - + public void finishedEvent(int seq, boolean handled) { final ViewRoot viewRoot = mViewRoot.get(); if (viewRoot != null) { @@ -2559,13 +2624,13 @@ public final class ViewRoot extends Handler implements ViewParent, // Stub -- not for use in the client. } } - + static class EventCompletion extends Handler { final IWindow mWindow; final KeyEvent mKeyEvent; final boolean mIsPointer; final MotionEvent mMotionEvent; - + EventCompletion(Looper looper, IWindow window, KeyEvent key, boolean isPointer, MotionEvent motion) { super(looper); @@ -2575,7 +2640,7 @@ public final class ViewRoot extends Handler implements ViewParent, mMotionEvent = motion; sendEmptyMessage(0); } - + @Override public void handleMessage(Message msg) { if (mKeyEvent != null) { @@ -2617,7 +2682,7 @@ public final class ViewRoot extends Handler implements ViewParent, } } } - + static class W extends IWindow.Stub { private final WeakReference mViewRoot; private final Looper mMainLooper; @@ -2739,14 +2804,14 @@ public final class ViewRoot extends Handler implements ViewParent, * The maximum amount of acceleration we will apply. */ static final float MAX_ACCELERATION = 20; - + /** * The maximum amount of time (in milliseconds) between events in order * for us to consider the user to be doing fast trackball movements, * and thus apply an acceleration. */ static final long FAST_MOVE_TIME = 150; - + /** * Scaling factor to the time (in milliseconds) between events to how * much to multiple/divide the current acceleration. When movement @@ -2754,7 +2819,7 @@ public final class ViewRoot extends Handler implements ViewParent, * FAST_MOVE_TIME it divides it. */ static final float ACCEL_MOVE_SCALING_FACTOR = (1.0f/40); - + float position; float absPosition; float acceleration = 1; @@ -2806,7 +2871,7 @@ public final class ViewRoot extends Handler implements ViewParent, } else { normTime = 0; } - + // The number of milliseconds between each movement that is // considered "normal" and will not result in any acceleration // or deceleration, scaled by the offset we have here. @@ -2964,7 +3029,7 @@ public final class ViewRoot extends Handler implements ViewParent, sRunQueues.set(rq); return rq; } - + /** * @hide */ diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java index 428de67ee80e..d7457a030468 100644 --- a/core/java/android/view/Window.java +++ b/core/java/android/view/Window.java @@ -24,7 +24,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.IBinder; -import android.util.Log; +import android.view.accessibility.AccessibilityEvent; /** * Abstract base class for a top-level window look and behavior policy. An @@ -153,7 +153,16 @@ public abstract class Window { * @return boolean Return true if this event was consumed. */ public boolean dispatchTrackballEvent(MotionEvent event); - + + /** + * Called to process population of {@link AccessibilityEvent}s. + * + * @param event The event. + * + * @return boolean Return true if event population was completed. + */ + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event); + /** * Instantiate the view to display in the panel for 'featureId'. * You can return null, in which case the default content (typically @@ -367,8 +376,14 @@ public abstract class Window { String title; if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA) { title="Media"; + } else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY) { + title="MediaOvr"; } else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_PANEL) { title="Panel"; + } else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL) { + title="SubPanel"; + } else if (wp.type == WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG) { + title="AtchDlg"; } else { title=Integer.toString(wp.type); } diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index c69c28154c2d..bdb86d703b3b 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -18,7 +18,6 @@ package android.view; import android.content.pm.ActivityInfo; import android.graphics.PixelFormat; -import android.graphics.Rect; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; @@ -209,6 +208,15 @@ public interface WindowManager extends ViewManager { */ public static final int TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW+3; + /** + * Window type: window for showing overlays on top of media windows. + * These windows are displayed between TYPE_APPLICATION_MEDIA and the + * application window. They should be translucent to be useful. This + * is a big ugly hack so: + * @hide + */ + public static final int TYPE_APPLICATION_MEDIA_OVERLAY = FIRST_SUB_WINDOW+4; + /** * End of types of sub-windows. */ @@ -466,6 +474,21 @@ public interface WindowManager extends ViewManager { */ public static final int FLAG_WATCH_OUTSIDE_TOUCH = 0x00040000; + /** Window flag: special flag to let windows be shown when the screen + * is locked. This will let application windows take precedence over + * key guard or any other lock screens. Can be used with + * {@link #FLAG_KEEP_SCREEN_ON} to turn screen on and display windows + * directly before showing the key guard window + * + * {@hide} */ + public static final int FLAG_SHOW_WHEN_LOCKED = 0x00080000; + + /** Window flag: special flag to let a window ignore the compatibility scaling. + * This is used by SurfaceView to create a window that does not scale the content. + * + * {@hide} */ + public static final int FLAG_NO_COMPATIBILITY_SCALING = 0x00100000; + /** Window flag: a special option intended for system dialogs. When * this flag is set, the window will demand focus unconditionally when * it is created. @@ -787,6 +810,7 @@ public interface WindowManager extends ViewManager { screenOrientation = in.readInt(); } + @SuppressWarnings({"PointlessBitwiseExpression"}) public static final int LAYOUT_CHANGED = 1<<0; public static final int TYPE_CHANGED = 1<<1; public static final int FLAGS_CHANGED = 1<<2; @@ -800,6 +824,9 @@ public interface WindowManager extends ViewManager { public static final int SCREEN_ORIENTATION_CHANGED = 1<<10; public static final int SCREEN_BRIGHTNESS_CHANGED = 1<<11; + // internal buffer to backup/restore parameters under compatibility mode. + private int[] mCompatibilityParamsBackup = null; + public final int copyFrom(LayoutParams o) { int changes = 0; @@ -957,36 +984,45 @@ public interface WindowManager extends ViewManager { /** * Scale the layout params' coordinates and size. - * Returns the original info as a backup so that the caller can - * restore the layout params; - */ - void scale(float scale, int[] backup) { - if (scale != 1.0f) { - backup[0] = x; - backup[1] = y; - x *= scale; - y *= scale; - if (width > 0) { - backup[2] = width; - width *= scale; - } - if (height > 0) { - backup[3] = height; - height *= scale; - } + * @hide + */ + public void scale(float scale) { + x *= scale; + y *= scale; + if (width > 0) { + width *= scale; + } + if (height > 0) { + height *= scale; } } /** - * Restore the layout params' coordinates and size. - */ - void restore(int[] backup) { - x = backup[0]; - y = backup[1]; - if (width > 0) { - width = backup[2]; + * Backup the layout parameters used in compatibility mode. + * @see LayoutParams#restore() + */ + void backup() { + int[] backup = mCompatibilityParamsBackup; + if (backup == null) { + // we backup 4 elements, x, y, width, height + backup = mCompatibilityParamsBackup = new int[4]; } - if (height > 0) { + backup[0] = x; + backup[1] = y; + backup[2] = width; + backup[3] = height; + } + + /** + * Restore the layout params' coordinates, size and gravity + * @see LayoutParams#backup() + */ + void restore() { + int[] backup = mCompatibilityParamsBackup; + if (backup != null) { + x = backup[0]; + y = backup[1]; + width = backup[2]; height = backup[3]; } } diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java index 755d7b8cf289..0973599509b1 100644 --- a/core/java/android/view/WindowManagerImpl.java +++ b/core/java/android/view/WindowManagerImpl.java @@ -173,7 +173,6 @@ public class WindowManagerImpl implements WindowManager { mRoots[index] = root; mParams[index] = wparams; } - // do this last because it fires off messages to start doing things root.setView(view, wparams, panelParentView); } diff --git a/core/java/android/view/accessibility/AccessibilityEvent.aidl b/core/java/android/view/accessibility/AccessibilityEvent.aidl new file mode 100644 index 000000000000..cee360475036 --- /dev/null +++ b/core/java/android/view/accessibility/AccessibilityEvent.aidl @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2009, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view.accessibility; + +parcelable AccessibilityEvent; diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java new file mode 100644 index 000000000000..c22f991183b0 --- /dev/null +++ b/core/java/android/view/accessibility/AccessibilityEvent.java @@ -0,0 +1,734 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view.accessibility; + +import android.os.Parcel; +import android.os.Parcelable; +import android.text.TextUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * This class represents accessibility events that are sent by the system when + * something notable happens in the user interface. For example, when a + * {@link android.widget.Button} is clicked, a {@link android.view.View} is focused, etc. + *

        + * This class represents various semantically different accessibility event + * types. Each event type has associated a set of related properties. In other + * words, each event type is characterized via a subset of the properties exposed + * by this class. For each event type there is a corresponding constant defined + * in this class. Since some event types are semantically close there are mask + * constants that group them together. Follows a specification of the event + * types and their associated properties: + *

        + * VIEW TYPES
        + *

        + * View clicked - represents the event of clicking on a {@link android.view.View} + * like {@link android.widget.Button}, {@link android.widget.CompoundButton}, etc.
        + * Type:{@link #TYPE_VIEW_CLICKED}
        + * Properties: + * {@link #getClassName()}, + * {@link #getPackageName()}, + * {@link #getEventTime()}, + * {@link #getText()}, + * {@link #isChecked()}, + * {@link #isEnabled()}, + * {@link #isPassword()}, + * {@link #getItemCount()}, + * {@link #getCurrentItemIndex()} + *

        + * View long clicked - represents the event of long clicking on a {@link android.view.View} + * like {@link android.widget.Button}, {@link android.widget.CompoundButton}, etc.
        + * Type:{@link #TYPE_VIEW_LONG_CLICKED}
        + * Properties: + * {@link #getClassName()}, + * {@link #getPackageName()}, + * {@link #getEventTime()}, + * {@link #getText()}, + * {@link #isChecked()}, + * {@link #isEnabled()}, + * {@link #isPassword()}, + * {@link #getItemCount()}, + * {@link #getCurrentItemIndex()} + *

        + * View selected - represents the event of selecting an item usually in + * the context of an {@link android.widget.AdapterView}.
        + * Type: {@link #TYPE_VIEW_SELECTED}
        + * Properties: + * {@link #getClassName()}, + * {@link #getPackageName()}, + * {@link #getEventTime()}, + * {@link #getText()}, + * {@link #isChecked()}, + * {@link #isEnabled()}, + * {@link #isPassword()}, + * {@link #getItemCount()}, + * {@link #getCurrentItemIndex()} + *

        + * View focused - represents the event of focusing a + * {@link android.view.View}.
        + * Type: {@link #TYPE_VIEW_FOCUSED}
        + * Properties: + * {@link #getClassName()}, + * {@link #getPackageName()}, + * {@link #getEventTime()}, + * {@link #getText()}, + * {@link #isChecked()}, + * {@link #isEnabled()}, + * {@link #isPassword()}, + * {@link #getItemCount()}, + * {@link #getCurrentItemIndex()} + *

        + * View text changed - represents the event of changing the text of an + * {@link android.widget.EditText}.
        + * Type: {@link #TYPE_VIEW_TEXT_CHANGED}
        + * Properties: + * {@link #getClassName()}, + * {@link #getPackageName()}, + * {@link #getEventTime()}, + * {@link #getText()}, + * {@link #isChecked()}, + * {@link #isEnabled()}, + * {@link #isPassword()}, + * {@link #getItemCount()}, + * {@link #getCurrentItemIndex()}, + * {@link #getFromIndex()}, + * {@link #getAddedCount()}, + * {@link #getRemovedCount()}, + * {@link #getBeforeText()} + *

        + * TRANSITION TYPES
        + *

        + * Window state changed - represents the event of opening/closing a + * {@link android.widget.PopupWindow}, {@link android.view.Menu}, + * {@link android.app.Dialog}, etc.
        + * Type: {@link #TYPE_WINDOW_STATE_CHANGED}
        + * Properties: + * {@link #getClassName()}, + * {@link #getPackageName()}, + * {@link #getEventTime()}, + * {@link #getText()} + *

        + * NOTIFICATION TYPES
        + *

        + * Notification state changed - represents the event showing/hiding + * {@link android.app.Notification}. + * Type: {@link #TYPE_NOTIFICATION_STATE_CHANGED}
        + * Properties: + * {@link #getClassName()}, + * {@link #getPackageName()}, + * {@link #getEventTime()}, + * {@link #getText()} + * {@link #getParcelableData()} + *

        + * Security note + *

        + * Since an event contains the text of its source privacy can be compromised by leaking of + * sensitive information such as passwords. To address this issue any event fired in response + * to manipulation of a PASSWORD field does NOT CONTAIN the text of the password. + * + * @see android.view.accessibility.AccessibilityManager + * @see android.accessibilityservice.AccessibilityService + */ +public final class AccessibilityEvent implements Parcelable { + + /** + * Invalid selection/focus position. + * + * @see #getCurrentItemIndex() + */ + public static final int INVALID_POSITION = -1; + + /** + * Maximum length of the text fields. + * + * @see #getBeforeText() + * @see #getText() + */ + public static final int MAX_TEXT_LENGTH = 500; + + /** + * Represents the event of clicking on a {@link android.view.View} like + * {@link android.widget.Button}, {@link android.widget.CompoundButton}, etc. + */ + public static final int TYPE_VIEW_CLICKED = 0x00000001; + + /** + * Represents the event of long clicking on a {@link android.view.View} like + * {@link android.widget.Button}, {@link android.widget.CompoundButton}, etc. + */ + public static final int TYPE_VIEW_LONG_CLICKED = 0x00000002; + + /** + * Represents the event of selecting an item usually in the context of an + * {@link android.widget.AdapterView}. + */ + public static final int TYPE_VIEW_SELECTED = 0x00000004; + + /** + * Represents the event of focusing a {@link android.view.View}. + */ + public static final int TYPE_VIEW_FOCUSED = 0x00000008; + + /** + * Represents the event of changing the text of an {@link android.widget.EditText}. + */ + public static final int TYPE_VIEW_TEXT_CHANGED = 0x00000010; + + /** + * Represents the event of opening/closing a {@link android.widget.PopupWindow}, + * {@link android.view.Menu}, {@link android.app.Dialog}, etc. + */ + public static final int TYPE_WINDOW_STATE_CHANGED = 0x00000020; + + /** + * Represents the event showing/hiding a {@link android.app.Notification}. + */ + public static final int TYPE_NOTIFICATION_STATE_CHANGED = 0x00000040; + + /** + * Mask for {@link AccessibilityEvent} all types. + * + * @see #TYPE_VIEW_CLICKED + * @see #TYPE_VIEW_LONG_CLICKED + * @see #TYPE_VIEW_SELECTED + * @see #TYPE_VIEW_FOCUSED + * @see #TYPE_VIEW_TEXT_CHANGED + * @see #TYPE_WINDOW_STATE_CHANGED + * @see #TYPE_NOTIFICATION_STATE_CHANGED + */ + public static final int TYPES_ALL_MASK = 0xFFFFFFFF; + + private static final int MAX_POOL_SIZE = 2; + private static final Object mPoolLock = new Object(); + private static AccessibilityEvent sPool; + private static int sPoolSize; + + private static final int CHECKED = 0x00000001; + private static final int ENABLED = 0x00000002; + private static final int PASSWORD = 0x00000004; + private static final int FULL_SCREEN = 0x00000080; + + private AccessibilityEvent mNext; + + private int mEventType; + private int mBooleanProperties; + private int mCurrentItemIndex; + private int mItemCount; + private int mFromIndex; + private int mAddedCount; + private int mRemovedCount; + + private long mEventTime; + + private CharSequence mClassName; + private CharSequence mPackageName; + private CharSequence mContentDescription; + private CharSequence mBeforeText; + + private Parcelable mParcelableData; + + private final List mText = new ArrayList(); + + private boolean mIsInPool; + + /* + * Hide constructor from clients. + */ + private AccessibilityEvent() { + mCurrentItemIndex = INVALID_POSITION; + } + + /** + * Gets if the source is checked. + * + * @return True if the view is checked, false otherwise. + */ + public boolean isChecked() { + return getBooleanProperty(CHECKED); + } + + /** + * Sets if the source is checked. + * + * @param isChecked True if the view is checked, false otherwise. + */ + public void setChecked(boolean isChecked) { + setBooleanProperty(CHECKED, isChecked); + } + + /** + * Gets if the source is enabled. + * + * @return True if the view is enabled, false otherwise. + */ + public boolean isEnabled() { + return getBooleanProperty(ENABLED); + } + + /** + * Sets if the source is enabled. + * + * @param isEnabled True if the view is enabled, false otherwise. + */ + public void setEnabled(boolean isEnabled) { + setBooleanProperty(ENABLED, isEnabled); + } + + /** + * Gets if the source is a password field. + * + * @return True if the view is a password field, false otherwise. + */ + public boolean isPassword() { + return getBooleanProperty(PASSWORD); + } + + /** + * Sets if the source is a password field. + * + * @param isPassword True if the view is a password field, false otherwise. + */ + public void setPassword(boolean isPassword) { + setBooleanProperty(PASSWORD, isPassword); + } + + /** + * Sets if the source is taking the entire screen. + * + * @param isFullScreen True if the source is full screen, false otherwise. + */ + public void setFullScreen(boolean isFullScreen) { + setBooleanProperty(FULL_SCREEN, isFullScreen); + } + + /** + * Gets if the source is taking the entire screen. + * + * @return True if the source is full screen, false otherwise. + */ + public boolean isFullScreen() { + return getBooleanProperty(FULL_SCREEN); + } + + /** + * Gets the event type. + * + * @return The event type. + */ + public int getEventType() { + return mEventType; + } + + /** + * Sets the event type. + * + * @param eventType The event type. + */ + public void setEventType(int eventType) { + mEventType = eventType; + } + + /** + * Gets the number of items that can be visited. + * + * @return The number of items. + */ + public int getItemCount() { + return mItemCount; + } + + /** + * Sets the number of items that can be visited. + * + * @param itemCount The number of items. + */ + public void setItemCount(int itemCount) { + mItemCount = itemCount; + } + + /** + * Gets the index of the source in the list of items the can be visited. + * + * @return The current item index. + */ + public int getCurrentItemIndex() { + return mCurrentItemIndex; + } + + /** + * Sets the index of the source in the list of items that can be visited. + * + * @param currentItemIndex The current item index. + */ + public void setCurrentItemIndex(int currentItemIndex) { + mCurrentItemIndex = currentItemIndex; + } + + /** + * Gets the index of the first character of the changed sequence. + * + * @return The index of the first character. + */ + public int getFromIndex() { + return mFromIndex; + } + + /** + * Sets the index of the first character of the changed sequence. + * + * @param fromIndex The index of the first character. + */ + public void setFromIndex(int fromIndex) { + mFromIndex = fromIndex; + } + + /** + * Gets the number of added characters. + * + * @return The number of added characters. + */ + public int getAddedCount() { + return mAddedCount; + } + + /** + * Sets the number of added characters. + * + * @param addedCount The number of added characters. + */ + public void setAddedCount(int addedCount) { + mAddedCount = addedCount; + } + + /** + * Gets the number of removed characters. + * + * @return The number of removed characters. + */ + public int getRemovedCount() { + return mRemovedCount; + } + + /** + * Sets the number of removed characters. + * + * @param removedCount The number of removed characters. + */ + public void setRemovedCount(int removedCount) { + mRemovedCount = removedCount; + } + + /** + * Gets the time in which this event was sent. + * + * @return The event time. + */ + public long getEventTime() { + return mEventTime; + } + + /** + * Sets the time in which this event was sent. + * + * @param eventTime The event time. + */ + public void setEventTime(long eventTime) { + mEventTime = eventTime; + } + + /** + * Gets the class name of the source. + * + * @return The class name. + */ + public CharSequence getClassName() { + return mClassName; + } + + /** + * Sets the class name of the source. + * + * @param className The lass name. + */ + public void setClassName(CharSequence className) { + mClassName = className; + } + + /** + * Gets the package name of the source. + * + * @return The package name. + */ + public CharSequence getPackageName() { + return mPackageName; + } + + /** + * Sets the package name of the source. + * + * @param packageName The package name. + */ + public void setPackageName(CharSequence packageName) { + mPackageName = packageName; + } + + /** + * Gets the text of the event. The index in the list represents the priority + * of the text. Specifically, the lower the index the higher the priority. + * + * @return The text. + */ + public List getText() { + return mText; + } + + /** + * Sets the text before a change. + * + * @return The text before the change. + */ + public CharSequence getBeforeText() { + return mBeforeText; + } + + /** + * Sets the text before a change. + * + * @param beforeText The text before the change. + */ + public void setBeforeText(CharSequence beforeText) { + mBeforeText = beforeText; + } + + /** + * Gets the description of the source. + * + * @return The description. + */ + public CharSequence getContentDescription() { + return mContentDescription; + } + + /** + * Sets the description of the source. + * + * @param contentDescription The description. + */ + public void setContentDescription(CharSequence contentDescription) { + mContentDescription = contentDescription; + } + + /** + * Gets the {@link Parcelable} data. + * + * @return The parcelable data. + */ + public Parcelable getParcelableData() { + return mParcelableData; + } + + /** + * Sets the {@link Parcelable} data of the event. + * + * @param parcelableData The parcelable data. + */ + public void setParcelableData(Parcelable parcelableData) { + mParcelableData = parcelableData; + } + + /** + * Returns a cached instance if such is available or a new one is + * instantiated with type property set. + * + * @param eventType The event type. + * @return An instance. + */ + public static AccessibilityEvent obtain(int eventType) { + AccessibilityEvent event = AccessibilityEvent.obtain(); + event.setEventType(eventType); + return event; + } + + /** + * Returns a cached instance if such is available or a new one is + * instantiated. + * + * @return An instance. + */ + public static AccessibilityEvent obtain() { + synchronized (mPoolLock) { + if (sPool != null) { + AccessibilityEvent event = sPool; + sPool = sPool.mNext; + sPoolSize--; + event.mNext = null; + event.mIsInPool = false; + return event; + } + return new AccessibilityEvent(); + } + } + + /** + * Return an instance back to be reused. + *

        + * Note: You must not touch the object after calling this function. + */ + public void recycle() { + if (mIsInPool) { + return; + } + + clear(); + synchronized (mPoolLock) { + if (sPoolSize <= MAX_POOL_SIZE) { + mNext = sPool; + sPool = this; + mIsInPool = true; + sPoolSize++; + } + } + } + + /** + * Clears the state of this instance. + */ + private void clear() { + mEventType = 0; + mBooleanProperties = 0; + mCurrentItemIndex = INVALID_POSITION; + mItemCount = 0; + mFromIndex = 0; + mAddedCount = 0; + mRemovedCount = 0; + mEventTime = 0; + mClassName = null; + mPackageName = null; + mContentDescription = null; + mBeforeText = null; + mText.clear(); + } + + /** + * Gets the value of a boolean property. + * + * @param property The property. + * @return The value. + */ + private boolean getBooleanProperty(int property) { + return (mBooleanProperties & property) == property; + } + + /** + * Sets a boolean property. + * + * @param property The property. + * @param value The value. + */ + private void setBooleanProperty(int property, boolean value) { + if (value) { + mBooleanProperties |= property; + } else { + mBooleanProperties &= ~property; + } + } + + /** + * Creates a new instance from a {@link Parcel}. + * + * @param parcel A parcel containing the state of a {@link AccessibilityEvent}. + */ + public void initFromParcel(Parcel parcel) { + mEventType = parcel.readInt(); + mBooleanProperties = parcel.readInt(); + mCurrentItemIndex = parcel.readInt(); + mItemCount = parcel.readInt(); + mFromIndex = parcel.readInt(); + mAddedCount = parcel.readInt(); + mRemovedCount = parcel.readInt(); + mEventTime = parcel.readLong(); + mClassName = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel); + mPackageName = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel); + mContentDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel); + mBeforeText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel); + mParcelableData = parcel.readParcelable(null); + parcel.readList(mText, null); + } + + public void writeToParcel(Parcel parcel, int flags) { + parcel.writeInt(mEventType); + parcel.writeInt(mBooleanProperties); + parcel.writeInt(mCurrentItemIndex); + parcel.writeInt(mItemCount); + parcel.writeInt(mFromIndex); + parcel.writeInt(mAddedCount); + parcel.writeInt(mRemovedCount); + parcel.writeLong(mEventTime); + TextUtils.writeToParcel(mClassName, parcel, 0); + TextUtils.writeToParcel(mPackageName, parcel, 0); + TextUtils.writeToParcel(mContentDescription, parcel, 0); + TextUtils.writeToParcel(mBeforeText, parcel, 0); + parcel.writeParcelable(mParcelableData, flags); + parcel.writeList(mText); + } + + public int describeContents() { + return 0; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append(super.toString()); + builder.append("; EventType: " + mEventType); + builder.append("; EventTime: " + mEventTime); + builder.append("; ClassName: " + mClassName); + builder.append("; PackageName: " + mPackageName); + builder.append("; Text: " + mText); + builder.append("; ContentDescription: " + mContentDescription); + builder.append("; ItemCount: " + mItemCount); + builder.append("; CurrentItemIndex: " + mCurrentItemIndex); + builder.append("; IsEnabled: " + isEnabled()); + builder.append("; IsPassword: " + isPassword()); + builder.append("; IsChecked: " + isChecked()); + builder.append("; IsFullScreen: " + isFullScreen()); + builder.append("; BeforeText: " + mBeforeText); + builder.append("; FromIndex: " + mFromIndex); + builder.append("; AddedCount: " + mAddedCount); + builder.append("; RemovedCount: " + mRemovedCount); + builder.append("; ParcelableData: " + mParcelableData); + return builder.toString(); + } + + /** + * @see Parcelable.Creator + */ + public static final Parcelable.Creator CREATOR = + new Parcelable.Creator() { + public AccessibilityEvent createFromParcel(Parcel parcel) { + AccessibilityEvent event = AccessibilityEvent.obtain(); + event.initFromParcel(parcel); + return event; + } + + public AccessibilityEvent[] newArray(int size) { + return new AccessibilityEvent[size]; + } + }; +} diff --git a/core/java/android/view/accessibility/AccessibilityEventSource.java b/core/java/android/view/accessibility/AccessibilityEventSource.java new file mode 100644 index 000000000000..3d70959b1ef9 --- /dev/null +++ b/core/java/android/view/accessibility/AccessibilityEventSource.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view.accessibility; + +/** + * This interface is implemented by classes source of {@link AccessibilityEvent}s. + */ +public interface AccessibilityEventSource { + + /** + * Handles the request for sending an {@link AccessibilityEvent} given + * the event type. The method must first check if accessibility is on + * via calling {@link AccessibilityManager#isEnabled()}, obtain + * an {@link AccessibilityEvent} from the event pool through calling + * {@link AccessibilityEvent#obtain(int)}, populate the event, and + * send it for dispatch via calling + * {@link AccessibilityManager#sendAccessibilityEvent(AccessibilityEvent)}. + * + * @see AccessibilityEvent + * @see AccessibilityManager + * + * @param eventType The event type. + */ + public void sendAccessibilityEvent(int eventType); + + /** + * Handles the request for sending an {@link AccessibilityEvent}. The + * method does not guarantee to check if accessibility is on before + * sending the event for dispatch. It is responsibility of the caller + * to do the check via calling {@link AccessibilityManager#isEnabled()}. + * + * @see AccessibilityEvent + * @see AccessibilityManager + * + * @param event The event. + */ + public void sendAccessibilityEventUnchecked(AccessibilityEvent event); +} diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java new file mode 100644 index 000000000000..01862700097d --- /dev/null +++ b/core/java/android/view/accessibility/AccessibilityManager.java @@ -0,0 +1,198 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view.accessibility; + +import static android.util.Config.LOGV; + +import android.content.Context; +import android.content.pm.ServiceInfo; +import android.os.Binder; +import android.os.Handler; +import android.os.IBinder; +import android.os.Looper; +import android.os.Message; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.SystemClock; +import android.util.Log; + +import java.util.Collections; +import java.util.List; + +/** + * System level service that serves as an event dispatch for {@link AccessibilityEvent}s. + * Such events are generated when something notable happens in the user interface, + * for example an {@link android.app.Activity} starts, the focus or selection of a + * {@link android.view.View} changes etc. Parties interested in handling accessibility + * events implement and register an accessibility service which extends + * {@link android.accessibilityservice.AccessibilityService}. + * + * @see AccessibilityEvent + * @see android.accessibilityservice.AccessibilityService + * @see android.content.Context#getSystemService + */ +public final class AccessibilityManager { + private static final String LOG_TAG = "AccessibilityManager"; + + static final Object sInstanceSync = new Object(); + + private static AccessibilityManager sInstance; + + private static final int DO_SET_ENABLED = 10; + + final IAccessibilityManager mService; + + final Handler mHandler; + + boolean mIsEnabled; + + final IAccessibilityManagerClient.Stub mClient = new IAccessibilityManagerClient.Stub() { + public void setEnabled(boolean enabled) { + mHandler.obtainMessage(DO_SET_ENABLED, enabled ? 1 : 0, 0).sendToTarget(); + } + }; + + class MyHandler extends Handler { + + MyHandler(Looper mainLooper) { + super(mainLooper); + } + + @Override + public void handleMessage(Message message) { + switch (message.what) { + case DO_SET_ENABLED : + synchronized (mHandler) { + mIsEnabled = (message.arg1 == 1); + } + return; + default : + Log.w(LOG_TAG, "Unknown message type: " + message.what); + } + } + } + + /** + * Get an AccessibilityManager instance (create one if necessary). + * + * @hide + */ + public static AccessibilityManager getInstance(Context context) { + synchronized (sInstanceSync) { + if (sInstance == null) { + sInstance = new AccessibilityManager(context); + } + } + return sInstance; + } + + /** + * Create an instance. + * + * @param context A {@link Context}. + */ + private AccessibilityManager(Context context) { + mHandler = new MyHandler(context.getMainLooper()); + IBinder iBinder = ServiceManager.getService(Context.ACCESSIBILITY_SERVICE); + mService = IAccessibilityManager.Stub.asInterface(iBinder); + try { + mService.addClient(mClient); + } catch (RemoteException re) { + Log.e(LOG_TAG, "AccessibilityManagerService is dead", re); + } + } + + /** + * Returns if the {@link AccessibilityManager} is enabled. + * + * @return True if this {@link AccessibilityManager} is enabled, false otherwise. + */ + public boolean isEnabled() { + synchronized (mHandler) { + return mIsEnabled; + } + } + + /** + * Sends an {@link AccessibilityEvent}. If this {@link AccessibilityManager} is not + * enabled the call is a NOOP. + * + * @param event The {@link AccessibilityEvent}. + * + * @throws IllegalStateException if a client tries to send an {@link AccessibilityEvent} + * while accessibility is not enabled. + */ + public void sendAccessibilityEvent(AccessibilityEvent event) { + if (!mIsEnabled) { + throw new IllegalStateException("Accessibility off. Did you forget to check that?"); + } + boolean doRecycle = false; + try { + event.setEventTime(SystemClock.uptimeMillis()); + // it is possible that this manager is in the same process as the service but + // client using it is called through Binder from another process. Example: MMS + // app adds a SMS notification and the NotificationManagerService calls this method + long identityToken = Binder.clearCallingIdentity(); + doRecycle = mService.sendAccessibilityEvent(event); + Binder.restoreCallingIdentity(identityToken); + if (LOGV) { + Log.i(LOG_TAG, event + " sent"); + } + } catch (RemoteException re) { + Log.e(LOG_TAG, "Error during sending " + event + " ", re); + } finally { + if (doRecycle) { + event.recycle(); + } + } + } + + /** + * Requests interruption of the accessibility feedback from all accessibility services. + */ + public void interrupt() { + if (!mIsEnabled) { + throw new IllegalStateException("Accessibility off. Did you forget to check that?"); + } + try { + mService.interrupt(); + if (LOGV) { + Log.i(LOG_TAG, "Requested interrupt from all services"); + } + } catch (RemoteException re) { + Log.e(LOG_TAG, "Error while requesting interrupt from all services. ", re); + } + } + + /** + * Returns the {@link ServiceInfo}s of the installed accessibility services. + * + * @return An unmodifiable list with {@link ServiceInfo}s. + */ + public List getAccessibilityServiceList() { + List services = null; + try { + services = mService.getAccessibilityServiceList(); + if (LOGV) { + Log.i(LOG_TAG, "Installed AccessibilityServices " + services); + } + } catch (RemoteException re) { + Log.e(LOG_TAG, "Error while obtaining the installed AccessibilityServices. ", re); + } + return Collections.unmodifiableList(services); + } +} diff --git a/core/java/android/view/accessibility/IAccessibilityManager.aidl b/core/java/android/view/accessibility/IAccessibilityManager.aidl new file mode 100644 index 000000000000..32788be63670 --- /dev/null +++ b/core/java/android/view/accessibility/IAccessibilityManager.aidl @@ -0,0 +1,39 @@ +/* //device/java/android/android/app/INotificationManager.aidl +** +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package android.view.accessibility; + +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.IAccessibilityManagerClient; +import android.content.pm.ServiceInfo; + +/** + * Interface implemented by the AccessibilityManagerService called by + * the AccessibilityMasngers. + * + * @hide + */ +interface IAccessibilityManager { + + void addClient(IAccessibilityManagerClient client); + + boolean sendAccessibilityEvent(in AccessibilityEvent uiEvent); + + List getAccessibilityServiceList(); + + void interrupt(); +} diff --git a/core/java/android/view/accessibility/IAccessibilityManagerClient.aidl b/core/java/android/view/accessibility/IAccessibilityManagerClient.aidl new file mode 100644 index 000000000000..1eb60fc61b48 --- /dev/null +++ b/core/java/android/view/accessibility/IAccessibilityManagerClient.aidl @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view.accessibility; + +/** + * Interface a client of the IAccessibilityManager implements to + * receive information about changes in the manager state. + * + * @hide + */ +oneway interface IAccessibilityManagerClient { + + void setEnabled(boolean enabled); + +} diff --git a/core/java/android/view/inputmethod/BaseInputConnection.java b/core/java/android/view/inputmethod/BaseInputConnection.java index 11de3e2ed433..739373792047 100644 --- a/core/java/android/view/inputmethod/BaseInputConnection.java +++ b/core/java/android/view/inputmethod/BaseInputConnection.java @@ -297,6 +297,10 @@ public class BaseInputConnection implements InputConnection { b = tmp; } + if (a <= 0) { + return ""; + } + if (length > a) { length = a; } @@ -336,10 +340,19 @@ public class BaseInputConnection implements InputConnection { } /** - * The default implementation does nothing. + * The default implementation turns this into the enter key. */ public boolean performEditorAction(int actionCode) { - return false; + long eventTime = SystemClock.uptimeMillis(); + sendKeyEvent(new KeyEvent(eventTime, eventTime, + KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER, 0, 0, 0, 0, + KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE + | KeyEvent.FLAG_EDITOR_ACTION)); + sendKeyEvent(new KeyEvent(SystemClock.uptimeMillis(), eventTime, + KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER, 0, 0, 0, 0, + KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE + | KeyEvent.FLAG_EDITOR_ACTION)); + return true; } /** @@ -488,12 +501,12 @@ public class BaseInputConnection implements InputConnection { } else { a = Selection.getSelectionStart(content); b = Selection.getSelectionEnd(content); - if (a >=0 && b>= 0 && a != b) { - if (b < a) { - int tmp = a; - a = b; - b = tmp; - } + if (a < 0) a = 0; + if (b < 0) b = 0; + if (b < a) { + int tmp = a; + a = b; + b = tmp; } } diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java index ba3f78cf22ec..dbd268291aa2 100644 --- a/core/java/android/webkit/BrowserFrame.java +++ b/core/java/android/webkit/BrowserFrame.java @@ -142,6 +142,17 @@ class BrowserFrame extends Handler { mLoadInitFromJava = false; } + /** + * Load a url with "POST" method from the network into the main frame. + * @param url The url to load. + * @param data The data for POST request. + */ + public void postUrl(String url, byte[] data) { + mLoadInitFromJava = true; + nativePostUrl(url, data); + mLoadInitFromJava = false; + } + /** * Load the content as if it was loaded by the provided base URL. The * failUrl is used as the history entry for the load data. If null or @@ -752,6 +763,8 @@ class BrowserFrame extends Handler { */ private native void nativeLoadUrl(String url); + private native void nativePostUrl(String url, byte[] postData); + private native void nativeLoadData(String baseUrl, String data, String mimeType, String encoding, String failUrl); diff --git a/core/java/android/webkit/ByteArrayBuilder.java b/core/java/android/webkit/ByteArrayBuilder.java index 806b458fa8c0..145411cf7a6a 100644 --- a/core/java/android/webkit/ByteArrayBuilder.java +++ b/core/java/android/webkit/ByteArrayBuilder.java @@ -17,6 +17,7 @@ package android.webkit; import java.util.LinkedList; +import java.util.ListIterator; /** Utility class optimized for accumulating bytes, and then spitting them back out. It does not optimize for returning the result in a @@ -94,6 +95,20 @@ class ByteArrayBuilder { return mChunks.isEmpty(); } + public int size() { + return mChunks.size(); + } + + public int getByteSize() { + int total = 0; + ListIterator it = mChunks.listIterator(0); + while (it.hasNext()) { + Chunk c = it.next(); + total += c.mLength; + } + return total; + } + public synchronized void clear() { Chunk c = getFirstChunk(); while (c != null) { diff --git a/core/java/android/webkit/FrameLoader.java b/core/java/android/webkit/FrameLoader.java index 6f1b16047950..66ab0213543c 100644 --- a/core/java/android/webkit/FrameLoader.java +++ b/core/java/android/webkit/FrameLoader.java @@ -364,7 +364,7 @@ class FrameLoader { String cookie = CookieManager.getInstance().getCookie( mListener.getWebAddress()); if (cookie != null && cookie.length() > 0) { - mHeaders.put("cookie", cookie); + mHeaders.put("Cookie", cookie); } } } diff --git a/core/java/android/webkit/JWebCoreJavaBridge.java b/core/java/android/webkit/JWebCoreJavaBridge.java index 2a84683cdc86..1dbd007886f1 100644 --- a/core/java/android/webkit/JWebCoreJavaBridge.java +++ b/core/java/android/webkit/JWebCoreJavaBridge.java @@ -18,6 +18,7 @@ package android.webkit; import android.os.Handler; import android.os.Message; +import android.security.CertTool; import android.util.Log; final class JWebCoreJavaBridge extends Handler { @@ -186,6 +187,15 @@ final class JWebCoreJavaBridge extends Handler { mHasInstantTimer = false; } + private String[] getKeyStrengthList() { + return CertTool.getInstance().getSupportedKeyStrenghs(); + } + + private String getSignedPublicKey(int index, String challenge, String url) { + // generateKeyPair expects organizations which we don't have. Ignore url. + return CertTool.getInstance().generateKeyPair(index, challenge, null); + } + private native void nativeConstructor(); private native void nativeFinalize(); private native void sharedTimerFired(); diff --git a/core/java/android/webkit/LoadListener.java b/core/java/android/webkit/LoadListener.java index d583eb18a043..39360cd72a23 100644 --- a/core/java/android/webkit/LoadListener.java +++ b/core/java/android/webkit/LoadListener.java @@ -25,16 +25,16 @@ import android.net.http.HttpAuthHeader; import android.net.http.RequestHandle; import android.net.http.SslCertificate; import android.net.http.SslError; -import android.net.http.SslCertificate; import android.os.Handler; import android.os.Message; +import android.security.CertTool; import android.util.Log; import android.webkit.CacheManager.CacheResult; +import android.widget.Toast; import com.android.internal.R; -import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -72,6 +72,8 @@ class LoadListener extends Handler implements EventHandler { private static final int HTTP_NOT_FOUND = 404; private static final int HTTP_PROXY_AUTH = 407; + private static final String CERT_MIMETYPE = "application/x-x509-ca-cert"; + private static int sNativeLoaderCount; private final ByteArrayBuilder mDataBuilder = new ByteArrayBuilder(8192); @@ -934,6 +936,12 @@ class LoadListener extends Handler implements EventHandler { // This commits the headers without checking the response status code. private void commitHeaders() { + if (mIsMainPageLoader && CERT_MIMETYPE.equals(mMimeType)) { + // In the case of downloading certificate, we will save it to the + // Keystore in commitLoad. Do not call webcore. + return; + } + // Commit the headers to WebCore int nativeResponse = createNativeResponse(); // The native code deletes the native response object. @@ -974,6 +982,30 @@ class LoadListener extends Handler implements EventHandler { private void commitLoad() { if (mCancelled) return; + if (mIsMainPageLoader && CERT_MIMETYPE.equals(mMimeType)) { + // In the case of downloading certificate, we will save it to the + // Keystore and stop the current loading so that it will not + // generate a new history page + byte[] cert = new byte[mDataBuilder.getByteSize()]; + int position = 0; + ByteArrayBuilder.Chunk c; + while (true) { + c = mDataBuilder.getFirstChunk(); + if (c == null) break; + + if (c.mLength != 0) { + System.arraycopy(c.mArray, 0, cert, position, c.mLength); + position += c.mLength; + } + mDataBuilder.releaseChunk(c); + } + CertTool.getInstance().addCertificate(cert, mContext); + Toast.makeText(mContext, R.string.certificateSaved, + Toast.LENGTH_SHORT).show(); + mBrowserFrame.stopLoading(); + return; + } + // Give the data to WebKit now PerfChecker checker = new PerfChecker(); ByteArrayBuilder.Chunk c; diff --git a/core/java/android/webkit/TextDialog.java b/core/java/android/webkit/TextDialog.java index 9de97c92267b..99de56d7db5d 100644 --- a/core/java/android/webkit/TextDialog.java +++ b/core/java/android/webkit/TextDialog.java @@ -538,7 +538,8 @@ import java.util.ArrayList; * removing the password input type. */ public void setSingleLine(boolean single) { - int inputType = EditorInfo.TYPE_CLASS_TEXT; + int inputType = EditorInfo.TYPE_CLASS_TEXT + | EditorInfo.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT; if (!single) { inputType |= EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE | EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java index 105eacdca754..ec671d5dac52 100644 --- a/core/java/android/webkit/WebSettings.java +++ b/core/java/android/webkit/WebSettings.java @@ -69,7 +69,24 @@ public class WebSettings { } int value; } - + + /** + * Enum for specifying the WebView's desired density. + * FAR makes 100% looking like in 240dpi + * MEDIUM makes 100% looking like in 160dpi + * CLOSE makes 100% looking like in 120dpi + * @hide Pending API council approval + */ + public enum ZoomDensity { + FAR(150), // 240dpi + MEDIUM(100), // 160dpi + CLOSE(75); // 120dpi + ZoomDensity(int size) { + value = size; + } + int value; + } + /** * Default cache usage pattern Use with {@link #setCacheMode}. */ @@ -105,6 +122,8 @@ public class WebSettings { LOW } + // WebView associated with this WebSettings. + private WebView mWebView; // BrowserFrame used to access the native frame pointer. private BrowserFrame mBrowserFrame; // Flag to prevent multiple SYNC messages at one time. @@ -123,7 +142,7 @@ public class WebSettings { private String mSerifFontFamily = "serif"; private String mCursiveFontFamily = "cursive"; private String mFantasyFontFamily = "fantasy"; - private String mDefaultTextEncoding = "Latin-1"; + private String mDefaultTextEncoding; private String mUserAgent; private boolean mUseDefaultUserAgent; private String mAcceptLanguage; @@ -145,6 +164,7 @@ public class WebSettings { // Don't need to synchronize the get/set methods as they // are basic types, also none of these values are used in // native WebCore code. + private ZoomDensity mDefaultZoom = ZoomDensity.MEDIUM; private RenderPriority mRenderPriority = RenderPriority.NORMAL; private int mOverrideCacheMode = LOAD_DEFAULT; private boolean mSaveFormData = true; @@ -237,9 +257,12 @@ public class WebSettings { * Package constructor to prevent clients from creating a new settings * instance. */ - WebSettings(Context context) { + WebSettings(Context context, WebView webview) { mEventHandler = new EventHandler(); mContext = context; + mWebView = webview; + mDefaultTextEncoding = context.getString(com.android.internal. + R.string.default_text_encoding); if (sLockForLocaleSettings == null) { sLockForLocaleSettings = new Object(); @@ -444,6 +467,31 @@ public class WebSettings { return mTextSize; } + /** + * Set the default zoom density of the page. This should be called from UI + * thread. + * @param zoom A ZoomDensity value + * @see WebSettings.ZoomDensity + * @hide Pending API council approval + */ + public void setDefaultZoom(ZoomDensity zoom) { + if (mDefaultZoom != zoom) { + mDefaultZoom = zoom; + mWebView.updateDefaultZoomDensity(zoom.value); + } + } + + /** + * Get the default zoom density of the page. This should be called from UI + * thread. + * @return A ZoomDensity value + * @see WebSettings.ZoomDensity + * @hide Pending API council approval + */ + public ZoomDensity getDefaultZoom() { + return mDefaultZoom; + } + /** * Enables using light touches to make a selection and activate mouseovers. */ diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 563d819d301f..fcf946f7d12a 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -237,6 +237,7 @@ public class WebView extends AbsoluteLayout * Helper class to get velocity for fling */ VelocityTracker mVelocityTracker; + private int mMaximumFling; /** * Touch mode @@ -395,22 +396,27 @@ public class WebView extends AbsoluteLayout // width which view is considered to be fully zoomed out static final int ZOOM_OUT_WIDTH = 1008; - private static final float DEFAULT_MAX_ZOOM_SCALE = 4.0f; - private static final float DEFAULT_MIN_ZOOM_SCALE = 0.25f; + // default scale limit. Depending on the display density + private static float DEFAULT_MAX_ZOOM_SCALE; + private static float DEFAULT_MIN_ZOOM_SCALE; // scale limit, which can be set through viewport meta tag in the web page - private float mMaxZoomScale = DEFAULT_MAX_ZOOM_SCALE; - private float mMinZoomScale = DEFAULT_MIN_ZOOM_SCALE; + private float mMaxZoomScale; + private float mMinZoomScale; private boolean mMinZoomScaleFixed = false; // initial scale in percent. 0 means using default. private int mInitialScale = 0; + // default scale. Depending on the display density. + static int DEFAULT_SCALE_PERCENT; + private float mDefaultScale; + // set to true temporarily while the zoom control is being dragged private boolean mPreviewZoomOnly = false; // computed scale and inverse, from mZoomWidth. - private float mActualScale = 1; - private float mInvActualScale = 1; + private float mActualScale; + private float mInvActualScale; // if this is non-zero, it is used on drawing rather than mActualScale private float mZoomScale; private float mInvInitialZoomScale; @@ -635,7 +641,7 @@ public class WebView extends AbsoluteLayout mZoomFitPageButton.setOnClickListener( new View.OnClickListener() { public void onClick(View v) { - zoomWithPreview(1f); + zoomWithPreview(mDefaultScale); updateZoomButtonsEnabled(); } }); @@ -658,7 +664,7 @@ public class WebView extends AbsoluteLayout // or out. mZoomButtonsController.setZoomInEnabled(canZoomIn); mZoomButtonsController.setZoomOutEnabled(canZoomOut); - mZoomFitPageButton.setEnabled(mActualScale != 1); + mZoomFitPageButton.setEnabled(mActualScale != mDefaultScale); } mZoomOverviewButton.setVisibility(canZoomScrollOut() ? View.VISIBLE: View.GONE); @@ -671,13 +677,41 @@ public class WebView extends AbsoluteLayout setClickable(true); setLongClickable(true); - final int slop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); + final ViewConfiguration configuration = ViewConfiguration.get(getContext()); + final int slop = configuration.getScaledTouchSlop(); mTouchSlopSquare = slop * slop; mMinLockSnapReverseDistance = slop; + final float density = getContext().getResources().getDisplayMetrics().density; // use one line height, 16 based on our current default font, for how // far we allow a touch be away from the edge of a link - mNavSlop = (int) (16 * getContext().getResources() - .getDisplayMetrics().density); + mNavSlop = (int) (16 * density); + // density adjusted scale factors + DEFAULT_SCALE_PERCENT = (int) (100 * density); + mDefaultScale = density; + mActualScale = density; + mInvActualScale = 1 / density; + DEFAULT_MAX_ZOOM_SCALE = 4.0f * density; + DEFAULT_MIN_ZOOM_SCALE = 0.25f * density; + mMaxZoomScale = DEFAULT_MAX_ZOOM_SCALE; + mMinZoomScale = DEFAULT_MIN_ZOOM_SCALE; + mMaximumFling = configuration.getScaledMaximumFlingVelocity(); + } + + /* package */void updateDefaultZoomDensity(int zoomDensity) { + final float density = getContext().getResources().getDisplayMetrics().density + * 100 / zoomDensity; + if (Math.abs(density - mDefaultScale) > 0.01) { + float scaleFactor = density / mDefaultScale; + // adjust the limits + mNavSlop = (int) (16 * density); + DEFAULT_SCALE_PERCENT = (int) (100 * density); + DEFAULT_MAX_ZOOM_SCALE = 4.0f * density; + DEFAULT_MIN_ZOOM_SCALE = 0.25f * density; + mDefaultScale = density; + mMaxZoomScale *= scaleFactor; + mMinZoomScale *= scaleFactor; + setNewZoomScale(mActualScale * scaleFactor, false); + } } /* package */ boolean onSavePassword(String schemePlusHost, String username, @@ -1117,6 +1151,29 @@ public class WebView extends AbsoluteLayout clearTextEntry(); } + /** + * Load the url with postData using "POST" method into the WebView. If url + * is not a network url, it will be loaded with {link + * {@link #loadUrl(String)} instead. + * + * @param url The url of the resource to load. + * @param postData The data will be passed to "POST" request. + * + * @hide pending API solidification + */ + public void postUrl(String url, byte[] postData) { + if (URLUtil.isNetworkUrl(url)) { + switchOutDrawHistory(); + HashMap arg = new HashMap(); + arg.put("url", url); + arg.put("data", postData); + mWebViewCore.sendMessage(EventHub.POST_URL, arg); + clearTextEntry(); + } else { + loadUrl(url); + } + } + /** * Load the given data into the WebView. This will load the data into * WebView using the data: scheme. Content loaded through this mechanism @@ -4103,7 +4160,7 @@ public class WebView extends AbsoluteLayout int maxX = Math.max(computeHorizontalScrollRange() - getViewWidth(), 0); int maxY = Math.max(computeVerticalScrollRange() - getViewHeight(), 0); - mVelocityTracker.computeCurrentVelocity(1000); + mVelocityTracker.computeCurrentVelocity(1000, mMaximumFling); int vx = (int) mVelocityTracker.getXVelocity(); int vy = (int) mVelocityTracker.getYVelocity(); @@ -4134,9 +4191,9 @@ public class WebView extends AbsoluteLayout private boolean zoomWithPreview(float scale) { float oldScale = mActualScale; - // snap to 100% if it is close - if (scale > 0.95f && scale < 1.05f) { - scale = 1.0f; + // snap to DEFAULT_SCALE if it is close + if (scale > (mDefaultScale - 0.05) && scale < (mDefaultScale + 0.05)) { + scale = mDefaultScale; } setNewZoomScale(scale, false); @@ -4517,9 +4574,11 @@ public class WebView extends AbsoluteLayout break; } case SWITCH_TO_LONGPRESS: { - mTouchMode = TOUCH_DONE_MODE; - performLongClick(); - updateTextEntry(); + if (!mPreventDrag) { + mTouchMode = TOUCH_DONE_MODE; + performLongClick(); + updateTextEntry(); + } break; } case SWITCH_TO_ENTER: @@ -4651,8 +4710,8 @@ public class WebView extends AbsoluteLayout } int initialScale = msg.arg1; int viewportWidth = msg.arg2; - // by default starting a new page with 100% zoom scale. - float scale = 1.0f; + // start a new page with DEFAULT_SCALE zoom scale. + float scale = mDefaultScale; if (mInitialScale > 0) { scale = mInitialScale / 100.0f; } else { diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index e9df453b78f1..a5fa41e8ed18 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -97,7 +97,7 @@ final class WebViewCore { private boolean mViewportUserScalable = true; - private int mRestoredScale = 100; + private int mRestoredScale = WebView.DEFAULT_SCALE_PERCENT; private int mRestoredX = 0; private int mRestoredY = 0; @@ -139,7 +139,7 @@ final class WebViewCore { // ready. mEventHub = new EventHub(); // Create a WebSettings object for maintaining all settings - mSettings = new WebSettings(mContext); + mSettings = new WebSettings(mContext, mWebView); // The WebIconDatabase needs to be initialized within the UI thread so // just request the instance here. WebIconDatabase.getInstance(); @@ -544,6 +544,8 @@ final class WebViewCore { "WEBKIT_DRAW", // = 130; "SYNC_SCROLL", // = 131; "REFRESH_PLUGINS", // = 132; + // this will replace REFRESH_PLUGINS in the next release + "POST_URL", // = 142; "SPLIT_PICTURE_SET", // = 133; "CLEAR_CONTENT", // = 134; "SET_FINAL_FOCUS", // = 135; @@ -589,6 +591,8 @@ final class WebViewCore { static final int WEBKIT_DRAW = 130; static final int SYNC_SCROLL = 131; static final int REFRESH_PLUGINS = 132; + // this will replace REFRESH_PLUGINS in the next release + static final int POST_URL = 142; static final int SPLIT_PICTURE_SET = 133; static final int CLEAR_CONTENT = 134; @@ -672,6 +676,13 @@ final class WebViewCore { loadUrl((String) msg.obj); break; + case POST_URL: { + HashMap param = (HashMap) msg.obj; + String url = (String) param.get("url"); + byte[] data = (byte[]) param.get("data"); + mBrowserFrame.postUrl(url, data); + break; + } case LOAD_DATA: HashMap loadParams = (HashMap) msg.obj; String baseUrl = (String) loadParams.get("baseUrl"); @@ -1549,19 +1560,33 @@ final class WebViewCore { // set the viewport settings from WebKit setViewportSettingsFromNative(); + // adjust the default scale to match the density + if (WebView.DEFAULT_SCALE_PERCENT != 100) { + float adjust = (float) WebView.DEFAULT_SCALE_PERCENT / 100.0f; + if (mViewportInitialScale > 0) { + mViewportInitialScale *= adjust; + } + if (mViewportMinimumScale > 0) { + mViewportMinimumScale *= adjust; + } + if (mViewportMaximumScale > 0) { + mViewportMaximumScale *= adjust; + } + } + // infer the values if they are not defined. if (mViewportWidth == 0) { if (mViewportInitialScale == 0) { - mViewportInitialScale = 100; + mViewportInitialScale = WebView.DEFAULT_SCALE_PERCENT; } if (mViewportMinimumScale == 0) { - mViewportMinimumScale = 100; + mViewportMinimumScale = WebView.DEFAULT_SCALE_PERCENT; } } if (mViewportUserScalable == false) { - mViewportInitialScale = 100; - mViewportMinimumScale = 100; - mViewportMaximumScale = 100; + mViewportInitialScale = WebView.DEFAULT_SCALE_PERCENT; + mViewportMinimumScale = WebView.DEFAULT_SCALE_PERCENT; + mViewportMaximumScale = WebView.DEFAULT_SCALE_PERCENT; } if (mViewportMinimumScale > mViewportInitialScale) { if (mViewportInitialScale == 0) { @@ -1575,9 +1600,10 @@ final class WebViewCore { mViewportMaximumScale = mViewportInitialScale; } else if (mViewportInitialScale == 0) { mViewportInitialScale = mViewportMaximumScale; - } + } } - if (mViewportWidth < 0 && mViewportInitialScale == 100) { + if (mViewportWidth < 0 + && mViewportInitialScale == WebView.DEFAULT_SCALE_PERCENT) { mViewportWidth = 0; } diff --git a/core/java/android/webkit/gears/AndroidRadioDataProvider.java b/core/java/android/webkit/gears/AndroidRadioDataProvider.java index 2d431a8d6162..13840428a8b7 100644 --- a/core/java/android/webkit/gears/AndroidRadioDataProvider.java +++ b/core/java/android/webkit/gears/AndroidRadioDataProvider.java @@ -28,6 +28,7 @@ package android.webkit.gears; import android.content.Context; import android.telephony.CellLocation; import android.telephony.ServiceState; +import android.telephony.SignalStrength; import android.telephony.gsm.GsmCellLocation; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; @@ -54,6 +55,7 @@ public final class AndroidRadioDataProvider extends PhoneStateListener { public static final class RadioData { public int cellId = -1; public int locationAreaCode = -1; + // TODO: use new SignalStrength instead of asu public int signalStrength = -1; public int mobileCountryCode = -1; public int mobileNetworkCode = -1; @@ -179,6 +181,7 @@ public final class AndroidRadioDataProvider extends PhoneStateListener { private CellLocation cellLocation = null; /** The last known signal strength */ + // TODO: use new SignalStrength instead of asu private int signalStrength = -1; /** The last known serviceState */ @@ -207,7 +210,7 @@ public final class AndroidRadioDataProvider extends PhoneStateListener { // Register for cell id, signal strength and service state changed // notifications. telephonyManager.listen(this, PhoneStateListener.LISTEN_CELL_LOCATION - | PhoneStateListener.LISTEN_SIGNAL_STRENGTH + | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS | PhoneStateListener.LISTEN_SERVICE_STATE); } @@ -226,8 +229,9 @@ public final class AndroidRadioDataProvider extends PhoneStateListener { } @Override - public void onSignalStrengthChanged(int asu) { - signalStrength = asu; + public void onSignalStrengthsChanged(SignalStrength ss) { + int gsmSignalStrength = ss.getGsmSignalStrength(); + signalStrength = (gsmSignalStrength == 99 ? -1 : gsmSignalStrength); notifyListeners(); } diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 1ca59b2430c7..f9ca8cb7a43b 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -54,7 +54,9 @@ import java.util.ArrayList; import java.util.List; /** - * Common code shared between ListView and GridView + * Base class that can be used to implement virtualized lists of items. A list does + * not have a spatial definition here. For instance, subclases of this class can + * display the content of the list in a grid, in a carousel, as stack, etc. * * @attr ref android.R.styleable#AbsListView_listSelector * @attr ref android.R.styleable#AbsListView_drawSelectorOnTop @@ -86,7 +88,7 @@ public abstract class AbsListView extends AdapterView implements Te public static final int TRANSCRIPT_MODE_NORMAL = 1; /** * The list will automatically scroll to the bottom, no matter what items - * are currently visible. + * are currently visible. * * @see #setTranscriptMode(int) */ @@ -123,7 +125,7 @@ public abstract class AbsListView extends AdapterView implements Te * Indicates the view is in the process of being flung */ static final int TOUCH_MODE_FLING = 4; - + /** * Indicates that the user is currently dragging the fast scroll thumb */ @@ -316,7 +318,7 @@ public abstract class AbsListView extends AdapterView implements Te * bitmap cache after scrolling. */ boolean mScrollingCacheEnabled; - + /** * Whether or not to enable the fast scroll feature on this list */ @@ -389,7 +391,7 @@ public abstract class AbsListView extends AdapterView implements Te * The last CheckForTap runnable we posted, if any */ private Runnable mPendingCheckForTap; - + /** * The last CheckForKeyLongPress runnable we posted, if any */ @@ -427,14 +429,17 @@ public abstract class AbsListView extends AdapterView implements Te */ private FastScroller mFastScroller; - private int mTouchSlop; + private boolean mGlobalLayoutListenerAddedFilter; + private int mTouchSlop; private float mDensityScale; private InputConnection mDefInputConnection; private InputConnectionWrapper mPublicInputConnection; private Runnable mClearScrollingCache; + private int mMinimumVelocity; + private int mMaximumVelocity; /** * Interface definition for a callback to be invoked when the list or grid @@ -529,21 +534,35 @@ public abstract class AbsListView extends AdapterView implements Te int color = a.getColor(R.styleable.AbsListView_cacheColorHint, 0); setCacheColorHint(color); - + boolean enableFastScroll = a.getBoolean(R.styleable.AbsListView_fastScrollEnabled, false); setFastScrollEnabled(enableFastScroll); boolean smoothScrollbar = a.getBoolean(R.styleable.AbsListView_smoothScrollbar, true); setSmoothScrollbarEnabled(smoothScrollbar); - + a.recycle(); } + private void initAbsListView() { + // Setting focusable in touch mode will set the focusable property to true + setFocusableInTouchMode(true); + setWillNotDraw(false); + setAlwaysDrawnWithCacheEnabled(false); + setScrollingCacheEnabled(true); + + final ViewConfiguration configuration = ViewConfiguration.get(mContext); + mTouchSlop = configuration.getScaledTouchSlop(); + mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); + mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); + mDensityScale = getContext().getResources().getDisplayMetrics().density; + } + /** - * Enables fast scrolling by letting the user quickly scroll through lists by - * dragging the fast scroll thumb. The adapter attached to the list may want + * Enables fast scrolling by letting the user quickly scroll through lists by + * dragging the fast scroll thumb. The adapter attached to the list may want * to implement {@link SectionIndexer} if it wishes to display alphabet preview and - * jump between sections of the list. + * jump between sections of the list. * @see SectionIndexer * @see #isFastScrollEnabled() * @param enabled whether or not to enable fast scrolling @@ -561,7 +580,7 @@ public abstract class AbsListView extends AdapterView implements Te } } } - + /** * Returns the current state of the fast scroll feature. * @see #setFastScrollEnabled(boolean) @@ -571,10 +590,10 @@ public abstract class AbsListView extends AdapterView implements Te public boolean isFastScrollEnabled() { return mFastScrollEnabled; } - + /** * If fast scroll is visible, then don't draw the vertical scrollbar. - * @hide + * @hide */ @Override protected boolean isVerticalScrollBarHidden() { @@ -592,11 +611,11 @@ public abstract class AbsListView extends AdapterView implements Te * When smooth scrollbar is disabled, the position and size of the scrollbar thumb * is based solely on the number of items in the adapter and the position of the * visible items inside the adapter. This provides a stable scrollbar as the user - * navigates through a list of items with varying heights. + * navigates through a list of items with varying heights. * * @param enabled Whether or not to enable smooth scrollbar. * - * @see #setSmoothScrollbarEnabled(boolean) + * @see #setSmoothScrollbarEnabled(boolean) * @attr ref android.R.styleable#AbsListView_smoothScrollbar */ public void setSmoothScrollbarEnabled(boolean enabled) { @@ -712,17 +731,6 @@ public abstract class AbsListView extends AdapterView implements Te } } - private void initAbsListView() { - // Setting focusable in touch mode will set the focusable property to true - setFocusableInTouchMode(true); - setWillNotDraw(false); - setAlwaysDrawnWithCacheEnabled(false); - setScrollingCacheEnabled(true); - - mTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop(); - mDensityScale = getContext().getResources().getDisplayMetrics().density; - } - private void useDefaultSelector() { setSelector(getResources().getDrawable( com.android.internal.R.drawable.list_selector_background)); @@ -828,7 +836,7 @@ public abstract class AbsListView extends AdapterView implements Te public Parcelable onSaveInstanceState() { /* * This doesn't really make sense as the place to dismiss the - * popup, but there don't seem to be any other useful hooks + * popups, but there don't seem to be any other useful hooks * that happen early enough to keep from getting complaints * about having leaked the window. */ @@ -908,17 +916,14 @@ public abstract class AbsListView extends AdapterView implements Te } private boolean acceptFilter() { - if (!mTextFilterEnabled || !(getAdapter() instanceof Filterable) || - ((Filterable) getAdapter()).getFilter() == null) { - return false; - } - return true; + return mTextFilterEnabled && getAdapter() instanceof Filterable && + ((Filterable) getAdapter()).getFilter() != null; } /** * Sets the initial value for the text filter. * @param filterText The text to use for the filter. - * + * * @see #setTextFilterEnabled */ public void setFilterText(String filterText) { @@ -944,7 +949,7 @@ public abstract class AbsListView extends AdapterView implements Te } /** - * Returns the list's text filter, if available. + * Returns the list's text filter, if available. * @return the list's text filter or null if filtering isn't enabled */ public CharSequence getTextFilter() { @@ -953,7 +958,7 @@ public abstract class AbsListView extends AdapterView implements Te } return null; } - + @Override protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); @@ -1096,6 +1101,10 @@ public abstract class AbsListView extends AdapterView implements Te listPadding.bottom = mSelectionBottomPadding + mPaddingBottom; } + /** + * Subclasses should NOT override this method but + * {@link #layoutChildren()} instead. + */ @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); @@ -1111,17 +1120,22 @@ public abstract class AbsListView extends AdapterView implements Te protected boolean setFrame(int left, int top, int right, int bottom) { final boolean changed = super.setFrame(left, top, right, bottom); - // Reposition the popup when the frame has changed. This includes - // translating the widget, not just changing its dimension. The - // filter popup needs to follow the widget. - if (mFiltered && changed && getWindowVisibility() == View.VISIBLE && mPopup != null && - mPopup.isShowing()) { - positionPopup(); + if (changed) { + // Reposition the popup when the frame has changed. This includes + // translating the widget, not just changing its dimension. The + // filter popup needs to follow the widget. + final boolean visible = getWindowVisibility() == View.VISIBLE; + if (mFiltered && visible && mPopup != null && mPopup.isShowing()) { + positionPopup(); + } } return changed; } + /** + * Subclasses must override this method to layout their children. + */ protected void layoutChildren() { } @@ -1324,6 +1338,7 @@ public abstract class AbsListView extends AdapterView implements Te mDataChanged = true; rememberSyncState(); } + if (mFastScroller != null) { mFastScroller.onSizeChanged(w, h, oldw, oldh); } @@ -1494,7 +1509,7 @@ public abstract class AbsListView extends AdapterView implements Te System.arraycopy(state, enabledPos + 1, state, enabledPos, state.length - enabledPos - 1); } - + return state; } @@ -1510,6 +1525,9 @@ public abstract class AbsListView extends AdapterView implements Te final ViewTreeObserver treeObserver = getViewTreeObserver(); if (treeObserver != null) { treeObserver.addOnTouchModeChangeListener(this); + if (mTextFilterEnabled && mPopup != null && !mGlobalLayoutListenerAddedFilter) { + treeObserver.addOnGlobalLayoutListener(this); + } } } @@ -1520,6 +1538,10 @@ public abstract class AbsListView extends AdapterView implements Te final ViewTreeObserver treeObserver = getViewTreeObserver(); if (treeObserver != null) { treeObserver.removeOnTouchModeChangeListener(this); + if (mTextFilterEnabled && mPopup != null) { + treeObserver.removeGlobalOnLayoutListener(this); + mGlobalLayoutListenerAddedFilter = false; + } } } @@ -1586,16 +1608,16 @@ public abstract class AbsListView extends AdapterView implements Te */ private class WindowRunnnable { private int mOriginalAttachCount; - + public void rememberWindowAttachCount() { mOriginalAttachCount = getWindowAttachCount(); } - + public boolean sameWindow() { return hasWindowFocus() && getWindowAttachCount() == mOriginalAttachCount; } } - + private class PerformClick extends WindowRunnnable implements Runnable { View mChild; int mClickMotionPosition; @@ -1622,7 +1644,7 @@ public abstract class AbsListView extends AdapterView implements Te final long longPressId = mAdapter.getItemId(mMotionPosition); boolean handled = false; - if (sameWindow() && !mDataChanged) { + if (sameWindow() && !mDataChanged) { handled = performLongPress(child, longPressPosition, longPressId); } if (handled) { @@ -1636,7 +1658,7 @@ public abstract class AbsListView extends AdapterView implements Te } } } - + private class CheckForKeyLongPress extends WindowRunnnable implements Runnable { public void run() { if (isPressed() && mSelectedPosition >= 0) { @@ -1812,7 +1834,7 @@ public abstract class AbsListView extends AdapterView implements Te mTouchMode = TOUCH_MODE_DONE_WAITING; } } else { - mTouchMode = TOUCH_MODE_DONE_WAITING; + mTouchMode = TOUCH_MODE_DONE_WAITING; } } } @@ -1867,13 +1889,13 @@ public abstract class AbsListView extends AdapterView implements Te @Override public boolean onTouchEvent(MotionEvent ev) { - if (mFastScroller != null) { boolean intercepted = mFastScroller.onTouchEvent(ev); if (intercepted) { return true; - } + } } + final int action = ev.getAction(); final int x = (int) ev.getX(); final int y = (int) ev.getY(); @@ -2041,12 +2063,9 @@ public abstract class AbsListView extends AdapterView implements Te break; case TOUCH_MODE_SCROLL: final VelocityTracker velocityTracker = mVelocityTracker; - velocityTracker.computeCurrentVelocity(1000); - int initialVelocity = (int)velocityTracker.getYVelocity(); - - if ((Math.abs(initialVelocity) > - ViewConfiguration.get(mContext).getScaledMinimumFlingVelocity()) && - (getChildCount() > 0)) { + velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity); + final int initialVelocity = (int) velocityTracker.getYVelocity(); + if (Math.abs(initialVelocity) > mMinimumVelocity && (getChildCount() > 0)) { if (mFlingRunnable == null) { mFlingRunnable = new FlingRunnable(); } @@ -2059,10 +2078,10 @@ public abstract class AbsListView extends AdapterView implements Te } setPressed(false); - + // Need to redraw since we probably aren't drawing the selector anymore invalidate(); - + final Handler handler = getHandler(); if (handler != null) { handler.removeCallbacks(mPendingCheckForLongPress); @@ -2106,7 +2125,7 @@ public abstract class AbsListView extends AdapterView implements Te return true; } - + @Override public void draw(Canvas canvas) { super.draw(canvas); @@ -2121,14 +2140,14 @@ public abstract class AbsListView extends AdapterView implements Te int x = (int) ev.getX(); int y = (int) ev.getY(); View v; - + if (mFastScroller != null) { boolean intercepted = mFastScroller.onInterceptTouchEvent(ev); if (intercepted) { return true; } } - + switch (action) { case MotionEvent.ACTION_DOWN: { int motionPosition = findMotionRow(y); @@ -2775,7 +2794,7 @@ public abstract class AbsListView extends AdapterView implements Te /** * Removes the filter window */ - void dismissPopup() { + private void dismissPopup() { if (mPopup != null) { mPopup.dismiss(); } @@ -2978,7 +2997,7 @@ public abstract class AbsListView extends AdapterView implements Te } return null; } - + /** * For filtering we proxy an input connection to an internal text editor, * and this allows the proxying to happen. @@ -2987,7 +3006,7 @@ public abstract class AbsListView extends AdapterView implements Te public boolean checkInputConnectionProxy(View view) { return view == mTextFilter; } - + /** * Creates the window for the text filter and populates it with an EditText field; * @@ -3017,6 +3036,7 @@ public abstract class AbsListView extends AdapterView implements Te p.setBackgroundDrawable(null); mPopup = p; getViewTreeObserver().addOnGlobalLayoutListener(this); + mGlobalLayoutListenerAddedFilter = true; } if (animateEntrance) { mPopup.setAnimationStyle(com.android.internal.R.style.Animation_TypingFilter); @@ -3379,7 +3399,7 @@ public abstract class AbsListView extends AdapterView implements Te mCurrentScrap = scrapViews[0]; mScrapViews = scrapViews; } - + public boolean shouldRecycleViewType(int viewType) { return viewType >= 0; } diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java index 173e80f54f75..7d2fcbc0fa41 100644 --- a/core/java/android/widget/AdapterView.java +++ b/core/java/android/widget/AdapterView.java @@ -24,11 +24,12 @@ import android.os.SystemClock; import android.util.AttributeSet; import android.util.SparseArray; import android.view.ContextMenu; +import android.view.SoundEffectConstants; import android.view.View; -import android.view.ViewGroup; import android.view.ViewDebug; -import android.view.SoundEffectConstants; +import android.view.ViewGroup; import android.view.ContextMenu.ContextMenuInfo; +import android.view.accessibility.AccessibilityEvent; /** @@ -618,7 +619,9 @@ public abstract class AdapterView extends ViewGroup { } /** - * Sets the currently selected item + * Sets the currently selected item. To support accessibility subclasses that + * override this method must invoke the overriden super method first. + * * @param position Index (starting at 0) of the data item to be selected. */ public abstract void setSelection(int position); @@ -844,6 +847,11 @@ public abstract class AdapterView extends ViewGroup { fireOnSelected(); } } + + // we fire selection events here not in View + if (mSelectedPosition != ListView.INVALID_POSITION && isShown() && !isInTouchMode()) { + sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); + } } private void fireOnSelected() { @@ -860,6 +868,35 @@ public abstract class AdapterView extends ViewGroup { } } + @Override + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + boolean populated = false; + // This is an exceptional case which occurs when a window gets the + // focus and sends a focus event via its focused child to announce + // current focus/selection. AdapterView fires selection but not focus + // events so we change the event type here. + if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED) { + event.setEventType(AccessibilityEvent.TYPE_VIEW_SELECTED); + } + + // we send selection events only from AdapterView to avoid + // generation of such event for each child + View selectedView = getSelectedView(); + if (selectedView != null) { + populated = selectedView.dispatchPopulateAccessibilityEvent(event); + } + + if (!populated) { + if (selectedView != null) { + event.setEnabled(selectedView.isEnabled()); + } + event.setItemCount(getCount()); + event.setCurrentItemIndex(getSelectedItemPosition()); + } + + return populated; + } + @Override protected boolean canAnimate() { return super.canAnimate() && mItemCount > 0; diff --git a/core/java/android/widget/AlphabetIndexer.java b/core/java/android/widget/AlphabetIndexer.java index 4e466a09de7e..f50676ab3914 100644 --- a/core/java/android/widget/AlphabetIndexer.java +++ b/core/java/android/widget/AlphabetIndexer.java @@ -248,8 +248,8 @@ public class AlphabetIndexer extends DataSetObserver implements SectionIndexer { public int getSectionForPosition(int position) { int savedCursorPos = mDataCursor.getPosition(); mDataCursor.moveToPosition(position); - mDataCursor.moveToPosition(savedCursorPos); String curName = mDataCursor.getString(mColumnIndex); + mDataCursor.moveToPosition(savedCursorPos); // Linear search, as there are only a few items in the section index // Could speed this up later if it actually gets used. for (int i = 0; i < mAlphabetLength; i++) { diff --git a/core/java/android/widget/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java index 5fa00e7d443a..c4b5ef891558 100755 --- a/core/java/android/widget/AppSecurityPermissions.java +++ b/core/java/android/widget/AppSecurityPermissions.java @@ -124,25 +124,25 @@ public class AppSecurityPermissions implements View.OnClickListener { if(pkg == null) { return; } - // Extract shared user permissions if any + // Get requested permissions + if (pkg.requestedPermissions != null) { + ArrayList strList = pkg.requestedPermissions; + int size = strList.size(); + if (size > 0) { + extractPerms(strList.toArray(new String[size]), permSet); + } + } + // Get permissions related to shared user if any if(pkg.mSharedUserId != null) { int sharedUid; try { sharedUid = mPm.getUidForSharedUser(pkg.mSharedUserId); + getAllUsedPermissions(sharedUid, permSet); } catch (NameNotFoundException e) { Log.w(TAG, "Could'nt retrieve shared user id for:"+pkg.packageName); - return; } - getAllUsedPermissions(sharedUid, permSet); - } else { - ArrayList strList = pkg.requestedPermissions; - int size; - if((strList == null) || ((size = strList.size()) == 0)) { - return; - } - // Extract permissions defined in current package - extractPerms(strList.toArray(new String[size]), permSet); } + // Retrieve list of permissions for(PermissionInfo tmpInfo : permSet) { mPermsList.add(tmpInfo); } @@ -176,14 +176,9 @@ public class AppSecurityPermissions implements View.OnClickListener { Log.w(TAG, "Could'nt retrieve permissions for package:"+packageName); return; } - if(pkgInfo == null) { - return; - } - String strList[] = pkgInfo.requestedPermissions; - if(strList == null) { - return; + if ((pkgInfo != null) && (pkgInfo.requestedPermissions != null)) { + extractPerms(pkgInfo.requestedPermissions, permSet); } - extractPerms(strList, permSet); } private void extractPerms(String strList[], Set permSet) { diff --git a/core/java/android/widget/ArrayAdapter.java b/core/java/android/widget/ArrayAdapter.java index c28210df6864..32e55048ed18 100644 --- a/core/java/android/widget/ArrayAdapter.java +++ b/core/java/android/widget/ArrayAdapter.java @@ -348,7 +348,12 @@ public class ArrayAdapter extends BaseAdapter implements Filterable { "ArrayAdapter requires the resource ID to be a TextView", e); } - text.setText(getItem(position).toString()); + T item = getItem(position); + if (item instanceof CharSequence) { + text.setText((CharSequence)item); + } else { + text.setText(item.toString()); + } return view; } diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java index a1d16eadc0d8..675aba23ae81 100644 --- a/core/java/android/widget/AutoCompleteTextView.java +++ b/core/java/android/widget/AutoCompleteTextView.java @@ -80,6 +80,7 @@ import com.android.internal.R; * @attr ref android.R.styleable#AutoCompleteTextView_dropDownSelector * @attr ref android.R.styleable#AutoCompleteTextView_dropDownAnchor * @attr ref android.R.styleable#AutoCompleteTextView_dropDownWidth + * @attr ref android.R.styleable#AutoCompleteTextView_dropDownHeight */ public class AutoCompleteTextView extends EditText implements Filter.FilterListener { static final boolean DEBUG = false; @@ -101,6 +102,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe private int mDropDownAnchorId; private View mDropDownAnchorView; // view is retrieved lazily from id once needed private int mDropDownWidth; + private int mDropDownHeight; private Drawable mDropDownListHighlight; @@ -122,10 +124,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe private boolean mBlockCompletion; private AutoCompleteTextView.ListSelectorHider mHideSelector; - - // Indicates whether this AutoCompleteTextView is attached to a window or not - // The widget is attached to a window when mAttachCount > 0 - private int mAttachCount; + private Runnable mShowDropDownRunnable; private AutoCompleteTextView.PassThroughClickListener mPassThroughClickListener; @@ -170,6 +169,8 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe // (for full screen width) or WRAP_CONTENT (to match the width of the anchored view). mDropDownWidth = a.getLayoutDimension(R.styleable.AutoCompleteTextView_dropDownWidth, ViewGroup.LayoutParams.WRAP_CONTENT); + mDropDownHeight = a.getLayoutDimension(R.styleable.AutoCompleteTextView_dropDownHeight, + ViewGroup.LayoutParams.WRAP_CONTENT); mHintResource = a.getResourceId(R.styleable.AutoCompleteTextView_completionHintView, R.layout.simple_dropdown_hint); @@ -258,6 +259,34 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe public void setDropDownWidth(int width) { mDropDownWidth = width; } + + /** + *

        Returns the current height for the auto-complete drop down list. This can + * be a fixed height, or {@link ViewGroup.LayoutParams#FILL_PARENT} to fill + * the screen, or {@link ViewGroup.LayoutParams#WRAP_CONTENT} to fit the height + * of the drop down's content.

        + * + * @return the height for the drop down list + * + * @attr ref android.R.styleable#AutoCompleteTextView_dropDownHeight + */ + public int getDropDownHeight() { + return mDropDownHeight; + } + + /** + *

        Sets the current height for the auto-complete drop down list. This can + * be a fixed height, or {@link ViewGroup.LayoutParams#FILL_PARENT} to fill + * the screen, or {@link ViewGroup.LayoutParams#WRAP_CONTENT} to fit the height + * of the drop down's content.

        + * + * @param height the height to use + * + * @attr ref android.R.styleable#AutoCompleteTextView_dropDownHeight + */ + public void setDropDownHeight(int height) { + mDropDownHeight = height; + } /** *

        Returns the id for the view that the auto-complete drop down list is anchored to.

        @@ -589,7 +618,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe if (isPopupShowing()) { // special case for the back key, we do not even try to send it // to the drop down list but instead, consume it immediately - if (keyCode == KeyEvent.KEYCODE_BACK) { + if (keyCode == KeyEvent.KEYCODE_BACK && !mDropDownAlwaysVisible) { dismissDropDown(); return true; } @@ -637,15 +666,19 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe mDropDownList.getAdapter().getCount() - 1)) { // When the selection is at the top, we block the key // event to prevent focus from moving. - mDropDownList.hideSelector(); - mDropDownList.requestLayout(); + clearListSelection(); mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); - mPopup.update(); + showDropDown(); return true; + } else { + // WARNING: Please read the comment where mListSelectionHidden + // is declared + mDropDownList.mListSelectionHidden = false; } + consumed = mDropDownList.onKeyDown(keyCode, event); - if (DEBUG) Log.v(TAG, "Key down: code=" + keyCode + " list consumed=" - + consumed); + if (DEBUG) Log.v(TAG, "Key down: code=" + keyCode + " list consumed=" + consumed); + if (consumed) { // If it handled the key event, then the user is // navigating in the list, so we should put it in front. @@ -655,7 +688,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe // by ensuring it has focus and getting its window out // of touch mode. mDropDownList.requestFocusFromTouch(); - mPopup.update(); + showDropDown(); switch (keyCode) { // avoid passing the focus from the text view to the @@ -755,7 +788,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe } else { // drop down is automatically dismissed when enough characters // are deleted from the text view - dismissDropDown(); + if (!mDropDownAlwaysVisible) dismissDropDown(); if (mFilter != null) { mFilter.filter(null); } @@ -788,9 +821,12 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe * it back. */ public void clearListSelection() { - if (mDropDownList != null) { - mDropDownList.hideSelector(); - mDropDownList.requestLayout(); + final DropDownListView list = mDropDownList; + if (list != null) { + // WARNING: Please read the comment where mListSelectionHidden is declared + list.mListSelectionHidden = true; + list.hideSelector(); + list.requestLayout(); } } @@ -801,6 +837,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe */ public void setListSelection(int position) { if (mPopup.isShowing() && (mDropDownList != null)) { + mDropDownList.mListSelectionHidden = false; mDropDownList.setSelection(position); // ListView.setSelection() will call requestLayout() } @@ -893,7 +930,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe } } - if (mDropDownDismissedOnCompletion) { + if (mDropDownDismissedOnCompletion && !mDropDownAlwaysVisible) { dismissDropDown(); } } @@ -950,6 +987,8 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe * @param text the selected suggestion in the drop down list */ protected void replaceText(CharSequence text) { + clearComposingText(); + setText(text); // make sure we keep the caret at the end of the text view Editable spannable = getText(); @@ -958,7 +997,8 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe /** {@inheritDoc} */ public void onFilterComplete(int count) { - if (mAttachCount <= 0) return; + // Not attached to window, don't update drop-down + if (getWindowVisibility() == View.GONE) return; /* * This checks enoughToFilter() again because filtering requests @@ -971,7 +1011,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe if (hasFocus() && hasWindowFocus()) { showDropDown(); } - } else { + } else if (!mDropDownAlwaysVisible) { dismissDropDown(); } } @@ -980,7 +1020,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe public void onWindowFocusChanged(boolean hasWindowFocus) { super.onWindowFocusChanged(hasWindowFocus); performValidation(); - if (!hasWindowFocus) { + if (!hasWindowFocus && !mDropDownAlwaysVisible) { dismissDropDown(); } } @@ -989,7 +1029,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); performValidation(); - if (!focused) { + if (!focused && !mDropDownAlwaysVisible) { dismissDropDown(); } } @@ -997,13 +1037,11 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); - mAttachCount++; } @Override protected void onDetachedFromWindow() { dismissDropDown(); - mAttachCount--; super.onDetachedFromWindow(); } @@ -1043,13 +1081,27 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe return mDropDownAnchorView == null ? this : mDropDownAnchorView; } + /** + * Issues a runnable to show the dropdown as soon as possible. + * + * @hide internal used only by Search Dialog + */ + public void showDropDownAfterLayout() { + post(mShowDropDownRunnable); + } + /** *

        Displays the drop down on screen.

        */ public void showDropDown() { int height = buildDropDown(); + + int widthSpec = 0; + int heightSpec = 0; + + boolean noInputMethod = mPopup.getInputMethodMode() == PopupWindow.INPUT_METHOD_NOT_NEEDED; + if (mPopup.isShowing()) { - int widthSpec; if (mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT) { // The call to PopupWindow's update method below can accept -1 for any // value you do not want to update. @@ -1059,20 +1111,51 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe } else { widthSpec = mDropDownWidth; } + + if (mDropDownHeight == ViewGroup.LayoutParams.FILL_PARENT) { + // The call to PopupWindow's update method below can accept -1 for any + // value you do not want to update. + heightSpec = noInputMethod ? height : ViewGroup.LayoutParams.FILL_PARENT; + if (noInputMethod) { + mPopup.setWindowLayoutMode( + mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT ? + ViewGroup.LayoutParams.FILL_PARENT : 0, 0); + } else { + mPopup.setWindowLayoutMode( + mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT ? + ViewGroup.LayoutParams.FILL_PARENT : 0, + ViewGroup.LayoutParams.FILL_PARENT); + } + } else if (mDropDownHeight == ViewGroup.LayoutParams.WRAP_CONTENT) { + heightSpec = height; + } else { + heightSpec = mDropDownHeight; + } + mPopup.update(getDropDownAnchorView(), mDropDownHorizontalOffset, - mDropDownVerticalOffset, widthSpec, height); + mDropDownVerticalOffset, widthSpec, heightSpec); } else { if (mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT) { - mPopup.setWindowLayoutMode(ViewGroup.LayoutParams.FILL_PARENT, 0); + widthSpec = ViewGroup.LayoutParams.FILL_PARENT; } else { - mPopup.setWindowLayoutMode(0, 0); if (mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) { mPopup.setWidth(getDropDownAnchorView().getWidth()); } else { mPopup.setWidth(mDropDownWidth); } } - mPopup.setHeight(height); + + if (mDropDownHeight == ViewGroup.LayoutParams.FILL_PARENT) { + heightSpec = ViewGroup.LayoutParams.FILL_PARENT; + } else { + if (mDropDownHeight == ViewGroup.LayoutParams.WRAP_CONTENT) { + mPopup.setHeight(height); + } else { + mPopup.setHeight(mDropDownHeight); + } + } + + mPopup.setWindowLayoutMode(widthSpec, heightSpec); mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); // use outside touchable to dismiss drop down when touching outside of it, so @@ -1082,8 +1165,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe mPopup.showAsDropDown(getDropDownAnchorView(), mDropDownHorizontalOffset, mDropDownVerticalOffset); mDropDownList.setSelection(ListView.INVALID_POSITION); - mDropDownList.hideSelector(); - mDropDownList.requestFocus(); + clearListSelection(); post(mHideSelector); } } @@ -1119,6 +1201,22 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe mHideSelector = new ListSelectorHider(); + /** + * This Runnable exists for the sole purpose of checking if the view layout has got + * completed and if so call showDropDown to display the drop down. This is used to show + * the drop down as soon as possible after user opens up the search dialog, without + * waiting for the normal UI pipeline to do it's job which is slower than this method. + */ + mShowDropDownRunnable = new Runnable() { + public void run() { + // View layout should be all done before displaying the drop down. + View view = getDropDownAnchorView(); + if (view != null && view.getWindowToken() != null) { + showDropDown(); + } + } + }; + mDropDownList = new DropDownListView(context); mDropDownList.setSelector(mDropDownListHighlight); mDropDownList.setAdapter(mAdapter); @@ -1126,6 +1224,22 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe mDropDownList.setOnItemClickListener(mDropDownItemClickListener); mDropDownList.setFocusable(true); mDropDownList.setFocusableInTouchMode(true); + mDropDownList.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + public void onItemSelected(AdapterView parent, View view, + int position, long id) { + + if (position != -1) { + DropDownListView dropDownList = mDropDownList; + + if (dropDownList != null) { + dropDownList.mListSelectionHidden = false; + } + } + } + + public void onNothingSelected(AdapterView parent) { + } + }); if (mItemSelectedListener != null) { mDropDownList.setOnItemSelectedListener(mItemSelectedListener); @@ -1180,10 +1294,12 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe final int maxHeight = mPopup.getMaxAvailableHeight( getDropDownAnchorView(), mDropDownVerticalOffset, ignoreBottomDecorations); - final int measuredHeight = mDropDownList.measureHeightOfChildren(MeasureSpec.UNSPECIFIED, - 0, ListView.NO_POSITION, maxHeight - otherHeights, 2) + otherHeights; + if (mDropDownAlwaysVisible) { + return maxHeight; + } - return mDropDownAlwaysVisible ? maxHeight : measuredHeight; + return mDropDownList.measureHeightOfChildren(MeasureSpec.UNSPECIFIED, + 0, ListView.NO_POSITION, maxHeight - otherHeights, 2) + otherHeights; } private View getHintView(Context context) { @@ -1249,10 +1365,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe private class ListSelectorHider implements Runnable { public void run() { - if (mDropDownList != null) { - mDropDownList.hideSelector(); - mDropDownList.requestLayout(); - } + clearListSelection(); } } @@ -1279,6 +1392,36 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe * passed to the drop down; the list only looks focused.

        */ private static class DropDownListView extends ListView { + /* + * WARNING: This is a workaround for a touch mode issue. + * + * Touch mode is propagated lazily to windows. This causes problems in + * the following scenario: + * - Type something in the AutoCompleteTextView and get some results + * - Move down with the d-pad to select an item in the list + * - Move up with the d-pad until the selection disappears + * - Type more text in the AutoCompleteTextView *using the soft keyboard* + * and get new results; you are now in touch mode + * - The selection comes back on the first item in the list, even though + * the list is supposed to be in touch mode + * + * Using the soft keyboard triggers the touch mode change but that change + * is propagated to our window only after the first list layout, therefore + * after the list attempts to resurrect the selection. + * + * The trick to work around this issue is to pretend the list is in touch + * mode when we know that the selection should not appear, that is when + * we know the user moved the selection away from the list. + * + * This boolean is set to true whenever we explicitely hide the list's + * selection and reset to false whenver we know the user moved the + * selection back to the list. + * + * When this boolean is true, isInTouchMode() returns true, otherwise it + * returns super.isInTouchMode(). + */ + private boolean mListSelectionHidden; + /** *

        Creates a new list view wrapper.

        * @@ -1324,6 +1467,12 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe return mSelectionBottomPadding; } + @Override + public boolean isInTouchMode() { + // WARNING: Please read the comment where mListSelectionHidden is declared + return mListSelectionHidden || super.isInTouchMode(); + } + /** *

        Returns the focus state in the drop down.

        * diff --git a/core/java/android/widget/CheckedTextView.java b/core/java/android/widget/CheckedTextView.java index abcc715c77e5..fd590ed16a8b 100644 --- a/core/java/android/widget/CheckedTextView.java +++ b/core/java/android/widget/CheckedTextView.java @@ -16,14 +16,15 @@ package android.widget; +import com.android.internal.R; + import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.Gravity; - -import com.android.internal.R; +import android.view.accessibility.AccessibilityEvent; /** @@ -194,5 +195,13 @@ public class CheckedTextView extends TextView implements Checkable { invalidate(); } } - + + @Override + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + boolean populated = super.dispatchPopulateAccessibilityEvent(event); + if (!populated) { + event.setChecked(mChecked); + } + return populated; + } } diff --git a/core/java/android/widget/CompoundButton.java b/core/java/android/widget/CompoundButton.java index d4482dc5988e..98b0976adb8d 100644 --- a/core/java/android/widget/CompoundButton.java +++ b/core/java/android/widget/CompoundButton.java @@ -26,7 +26,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; import android.view.Gravity; - +import android.view.accessibility.AccessibilityEvent; /** *

        @@ -124,6 +124,7 @@ public abstract class CompoundButton extends Button implements Checkable { if (mOnCheckedChangeWidgetListener != null) { mOnCheckedChangeWidgetListener.onCheckedChanged(this, mChecked); } + mBroadcasting = false; } } @@ -204,6 +205,25 @@ public abstract class CompoundButton extends Button implements Checkable { refreshDrawableState(); } + @Override + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + boolean populated = super.dispatchPopulateAccessibilityEvent(event); + + if (!populated) { + int resourceId = 0; + if (mChecked) { + resourceId = R.string.accessibility_compound_button_selected; + } else { + resourceId = R.string.accessibility_compound_button_unselected; + } + String state = getResources().getString(resourceId); + event.getText().add(state); + event.setChecked(mChecked); + } + + return populated; + } + @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); diff --git a/core/java/android/widget/ExpandableListView.java b/core/java/android/widget/ExpandableListView.java index 0fc8f495d8c4..536062168e61 100644 --- a/core/java/android/widget/ExpandableListView.java +++ b/core/java/android/widget/ExpandableListView.java @@ -1083,6 +1083,11 @@ public class ExpandableListView extends ListView { @Override public void onRestoreInstanceState(Parcelable state) { + if (!(state instanceof SavedState)) { + super.onRestoreInstanceState(state); + return; + } + SavedState ss = (SavedState) state; super.onRestoreInstanceState(ss.getSuperState()); diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java index 336847795025..cd965fc62e62 100644 --- a/core/java/android/widget/FastScroller.java +++ b/core/java/android/widget/FastScroller.java @@ -134,7 +134,7 @@ class FastScroller { mScrollCompleted = true; - getSections(); + getSectionsFromIndexer(); mOverlayPos = new RectF(); mScrollFade = new ScrollFade(); @@ -250,7 +250,18 @@ class FastScroller { } } - private void getSections() { + SectionIndexer getSectionIndexer() { + return mSectionIndexer; + } + + Object[] getSections() { + if (mListAdapter == null && mList != null) { + getSectionsFromIndexer(); + } + return mSections; + } + + private void getSectionsFromIndexer() { Adapter adapter = mList.getAdapter(); mSectionIndexer = null; if (adapter instanceof HeaderViewListAdapter) { @@ -391,8 +402,7 @@ class FastScroller { boolean onInterceptTouchEvent(MotionEvent ev) { if (mState > STATE_NONE && ev.getAction() == MotionEvent.ACTION_DOWN) { - if (ev.getX() > mList.getWidth() - mThumbW && ev.getY() >= mThumbY && - ev.getY() <= mThumbY + mThumbH) { + if (isPointInside(ev.getX(), ev.getY())) { setState(STATE_DRAGGING); return true; } @@ -404,20 +414,20 @@ class FastScroller { if (mState == STATE_NONE) { return false; } - if (me.getAction() == MotionEvent.ACTION_DOWN) { - if (me.getX() > mList.getWidth() - mThumbW - && me.getY() >= mThumbY - && me.getY() <= mThumbY + mThumbH) { - + + final int action = me.getAction(); + + if (action == MotionEvent.ACTION_DOWN) { + if (isPointInside(me.getX(), me.getY())) { setState(STATE_DRAGGING); if (mListAdapter == null && mList != null) { - getSections(); + getSectionsFromIndexer(); } cancelFling(); return true; } - } else if (me.getAction() == MotionEvent.ACTION_UP) { + } else if (action == MotionEvent.ACTION_UP) { if (mState == STATE_DRAGGING) { setState(STATE_VISIBLE); final Handler handler = mHandler; @@ -425,7 +435,7 @@ class FastScroller { handler.postDelayed(mScrollFade, 1000); return true; } - } else if (me.getAction() == MotionEvent.ACTION_MOVE) { + } else if (action == MotionEvent.ACTION_MOVE) { if (mState == STATE_DRAGGING) { final int viewHeight = mList.getHeight(); // Jitter @@ -448,7 +458,11 @@ class FastScroller { } return false; } - + + boolean isPointInside(float x, float y) { + return x > mList.getWidth() - mThumbW && y >= mThumbY && y <= mThumbY + mThumbH; + } + public class ScrollFade implements Runnable { long mStartTime; diff --git a/core/java/android/widget/FrameLayout.java b/core/java/android/widget/FrameLayout.java index 80fbf9eddecf..3afd5d42f857 100644 --- a/core/java/android/widget/FrameLayout.java +++ b/core/java/android/widget/FrameLayout.java @@ -353,25 +353,24 @@ public class FrameLayout extends ViewGroup { if (mForeground != null) { final Drawable foreground = mForeground; + if (mForegroundBoundsChanged) { mForegroundBoundsChanged = false; - if (foreground != null) { - final Rect selfBounds = mSelfBounds; - final Rect overlayBounds = mOverlayBounds; - - final int w = mRight-mLeft; - final int h = mBottom-mTop; - - if (mForegroundInPadding) { - selfBounds.set(0, 0, w, h); - } else { - selfBounds.set(mPaddingLeft, mPaddingTop, w - mPaddingRight, h - mPaddingBottom); - } + final Rect selfBounds = mSelfBounds; + final Rect overlayBounds = mOverlayBounds; - Gravity.apply(mForegroundGravity, foreground.getIntrinsicWidth(), - foreground.getIntrinsicHeight(), selfBounds, overlayBounds); - foreground.setBounds(overlayBounds); + final int w = mRight-mLeft; + final int h = mBottom-mTop; + + if (mForegroundInPadding) { + selfBounds.set(0, 0, w, h); + } else { + selfBounds.set(mPaddingLeft, mPaddingTop, w - mPaddingRight, h - mPaddingBottom); } + + Gravity.apply(mForegroundGravity, foreground.getIntrinsicWidth(), + foreground.getIntrinsicHeight(), selfBounds, overlayBounds); + foreground.setBounds(overlayBounds); } foreground.draw(canvas); diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java index 02fc7c6b8816..f86b37cf8b3a 100644 --- a/core/java/android/widget/HorizontalScrollView.java +++ b/core/java/android/widget/HorizontalScrollView.java @@ -114,6 +114,8 @@ public class HorizontalScrollView extends FrameLayout { private boolean mSmoothScrollingEnabled = true; private int mTouchSlop; + private int mMinimumVelocity; + private int mMaximumVelocity; public HorizontalScrollView(Context context) { this(context, null); @@ -179,7 +181,10 @@ public class HorizontalScrollView extends FrameLayout { setFocusable(true); setDescendantFocusability(FOCUS_AFTER_DESCENDANTS); setWillNotDraw(false); - mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); + final ViewConfiguration configuration = ViewConfiguration.get(mContext); + mTouchSlop = configuration.getScaledTouchSlop(); + mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); + mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); } @Override @@ -477,12 +482,10 @@ public class HorizontalScrollView extends FrameLayout { break; case MotionEvent.ACTION_UP: final VelocityTracker velocityTracker = mVelocityTracker; - velocityTracker.computeCurrentVelocity(1000); + velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity); int initialVelocity = (int) velocityTracker.getXVelocity(); - if ((Math.abs(initialVelocity) > - ViewConfiguration.get(mContext).getScaledMinimumFlingVelocity()) && - getChildCount() > 0) { + if ((Math.abs(initialVelocity) > mMinimumVelocity) && getChildCount() > 0) { fling(-initialVelocity); } diff --git a/core/java/android/widget/ImageButton.java b/core/java/android/widget/ImageButton.java index 4c1cbf6a2f91..d417e40bf293 100644 --- a/core/java/android/widget/ImageButton.java +++ b/core/java/android/widget/ImageButton.java @@ -27,9 +27,35 @@ import java.util.Map; /** *

        - * An image button displays an image that can be pressed, or clicked, by the - * user. - *

        + * Displays a button with an image (instead of text) that can be pressed + * or clicked by the user. By default, an ImageButton looks like a regular + * {@link android.widget.Button}, with the standard button background + * that changes color during different button states. The image on the surface + * of the button is defined either by the {@code android:src} attribute in the + * {@code <ImageButton>} XML element or by the + * {@link #setImageResource(int)} method.

        + * + *

        To remove the standard button background image, define your own + * background image or set the background color to be transparent.

        + *

        To indicate the different button states (focused, selected, etc.), you can + * define a different image for each state. E.g., a blue image by default, an + * orange one for when focused, and a yellow one for when pressed. An easy way to + * do this is with an XML drawable "selector." For example:

        + *
        + * <?xml version="1.0" encoding="utf-8"?>
        + * <selector xmlns:android="http://schemas.android.com/apk/res/android">
        + *     <item android:drawable="@drawable/button_normal" /> <!-- default -->
        + *     <item android:state_pressed="true"
        + *           android:drawable="@drawable/button_pressed" /> <!-- pressed -->
        + *     <item android:state_focused="true"
        + *           android:drawable="@drawable/button_focused" /> <!-- focused -->
        + * </selector>
        + * + *

        Save the XML file in your project {@code res/drawable/} folder and then + * reference it as a drawable for the source of your ImageButton (in the + * {@code android:src} attribute). Android will automatically change the image + * based on the state of the button and the corresponding images + * defined in the XML.

        * *

        XML attributes

        *

        diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java index 480b0b8a135a..27967742a135 100644 --- a/core/java/android/widget/ImageView.java +++ b/core/java/android/widget/ImageView.java @@ -32,6 +32,8 @@ import android.net.Uri; import android.util.AttributeSet; import android.util.Log; import android.view.View; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; import android.widget.RemoteViews.RemoteView; @@ -848,7 +850,7 @@ public class ImageView extends View { public int getBaseline() { return mBaselineAligned ? getMeasuredHeight() : -1; } - + /** * Set a tinting option for the image. * @@ -878,7 +880,7 @@ public class ImageView extends View { invalidate(); } } - + public void setAlpha(int alpha) { alpha &= 0xFF; // keep it legal if (mAlpha != alpha) { diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index 5472d6859c0a..f8a6f89a9880 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -21,6 +21,7 @@ import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.PixelFormat; +import android.graphics.Paint; import android.graphics.drawable.Drawable; import android.graphics.drawable.ColorDrawable; import android.os.Parcel; @@ -35,6 +36,7 @@ import android.view.ViewDebug; import android.view.ViewGroup; import android.view.ViewParent; import android.view.SoundEffectConstants; +import android.view.accessibility.AccessibilityEvent; import com.google.android.collect.Lists; import com.android.internal.R; @@ -132,6 +134,7 @@ public class ListView extends AbsListView { // used for temporary calculations. private final Rect mTempRect = new Rect(); + private Paint mDividerPaint; // the single allocated result per list view; kinda cheesey but avoids // allocating these thingies too often. @@ -171,6 +174,8 @@ public class ListView extends AbsListView { setDividerHeight(dividerHeight); } + setChoiceMode(a.getInt(R.styleable.ListView_choiceMode, CHOICE_MODE_NONE)); + mHeaderDividersEnabled = a.getBoolean(R.styleable.ListView_headerDividersEnabled, true); mFooterDividersEnabled = a.getBoolean(R.styleable.ListView_footerDividersEnabled, true); @@ -1845,6 +1850,39 @@ public class ListView extends AbsListView { } } + @Override + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + boolean populated = super.dispatchPopulateAccessibilityEvent(event); + + // If the item count is less than 15 then subtract disabled items from the count and + // position. Otherwise ignore disabled items. + if (!populated) { + int itemCount = 0; + int currentItemIndex = getSelectedItemPosition(); + + ListAdapter adapter = getAdapter(); + if (adapter != null) { + final int count = adapter.getCount(); + if (count < 15) { + for (int i = 0; i < count; i++) { + if (adapter.isEnabled(i)) { + itemCount++; + } else if (i <= currentItemIndex) { + currentItemIndex--; + } + } + } else { + itemCount = count; + } + } + + event.setItemCount(itemCount); + event.setCurrentItemIndex(currentItemIndex); + } + + return populated; + } + /** * setSelectionAfterHeaderView set the selection to be the first list item * after the header views. @@ -2786,12 +2824,20 @@ public class ListView extends AbsListView { */ @Override public boolean isOpaque() { - return (mCachingStarted && mIsCacheColorOpaque && mDividerIsOpaque) || super.isOpaque(); + return (mCachingStarted && mIsCacheColorOpaque && mDividerIsOpaque && + hasOpaqueScrollbars()) || super.isOpaque(); } @Override public void setCacheColorHint(int color) { - mIsCacheColorOpaque = (color >>> 24) == 0xFF; + final boolean opaque = (color >>> 24) == 0xFF; + mIsCacheColorOpaque = opaque; + if (opaque) { + if (mDividerPaint == null) { + mDividerPaint = new Paint(); + } + mDividerPaint.setColor(color); + } super.setCacheColorHint(color); } @@ -2814,6 +2860,17 @@ public class ListView extends AbsListView { final int first = mFirstPosition; final boolean areAllItemsSelectable = mAreAllItemsSelectable; final ListAdapter adapter = mAdapter; + // If the list is opaque *and* the background is not, we want to + // fill a rect where the dividers would be for non-selectable items + // If the list is opaque and the background is also opaque, we don't + // need to draw anything since the background will do it for us + final boolean fillForMissingDividers = isOpaque() && !super.isOpaque(); + + if (fillForMissingDividers && mDividerPaint == null && mIsCacheColorOpaque) { + mDividerPaint = new Paint(); + mDividerPaint.setColor(getCacheColorHint()); + } + final Paint paint = mDividerPaint; if (!mStackFromBottom) { int bottom; @@ -2825,12 +2882,18 @@ public class ListView extends AbsListView { View child = getChildAt(i); bottom = child.getBottom(); // Don't draw dividers next to items that are not enabled - if (bottom < listBottom && (areAllItemsSelectable || - (adapter.isEnabled(first + i) && (i == count - 1 || - adapter.isEnabled(first + i + 1))))) { - bounds.top = bottom; - bounds.bottom = bottom + dividerHeight; - drawDivider(canvas, bounds, i); + if (bottom < listBottom) { + if ((areAllItemsSelectable || + (adapter.isEnabled(first + i) && (i == count - 1 || + adapter.isEnabled(first + i + 1))))) { + bounds.top = bottom; + bounds.bottom = bottom + dividerHeight; + drawDivider(canvas, bounds, i); + } else if (fillForMissingDividers) { + bounds.top = bottom; + bounds.bottom = bottom + dividerHeight; + canvas.drawRect(bounds, paint); + } } } } @@ -2844,16 +2907,22 @@ public class ListView extends AbsListView { View child = getChildAt(i); top = child.getTop(); // Don't draw dividers next to items that are not enabled - if (top > listTop && (areAllItemsSelectable || - (adapter.isEnabled(first + i) && (i == count - 1 || - adapter.isEnabled(first + i + 1))))) { - bounds.top = top - dividerHeight; - bounds.bottom = top; - // Give the method the child ABOVE the divider, so we - // subtract one from our child - // position. Give -1 when there is no child above the - // divider. - drawDivider(canvas, bounds, i - 1); + if (top > listTop) { + if ((areAllItemsSelectable || + (adapter.isEnabled(first + i) && (i == count - 1 || + adapter.isEnabled(first + i + 1))))) { + bounds.top = top - dividerHeight; + bounds.bottom = top; + // Give the method the child ABOVE the divider, so we + // subtract one from our child + // position. Give -1 when there is no child above the + // divider. + drawDivider(canvas, bounds, i - 1); + } else if (fillForMissingDividers) { + bounds.top = top - dividerHeight; + bounds.bottom = top; + canvas.drawRect(bounds, paint); + } } } } @@ -3195,9 +3264,13 @@ public class ListView extends AbsListView { if (mChoiceMode == CHOICE_MODE_MULTIPLE) { mCheckStates.put(position, value); } else { - boolean oldValue = mCheckStates.get(position, false); + // Clear the old value: if something was selected and value == false + // then it is unselected mCheckStates.clear(); - if (!oldValue) { + // If value == true, select the appropriate position + // this may end up selecting the value we just cleared but this way + // we don't have to first to a get(position) + if (value) { mCheckStates.put(position, true); } } diff --git a/core/java/android/widget/MultiAutoCompleteTextView.java b/core/java/android/widget/MultiAutoCompleteTextView.java index 05abc2661eb2..ae8027784bc3 100644 --- a/core/java/android/widget/MultiAutoCompleteTextView.java +++ b/core/java/android/widget/MultiAutoCompleteTextView.java @@ -195,6 +195,8 @@ public class MultiAutoCompleteTextView extends AutoCompleteTextView { */ @Override protected void replaceText(CharSequence text) { + clearComposingText(); + int end = getSelectionEnd(); int start = mTokenizer.findTokenStart(getText(), end); diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java index 78c7bd8e54c4..0c2cd55d2ee3 100644 --- a/core/java/android/widget/PopupWindow.java +++ b/core/java/android/widget/PopupWindow.java @@ -18,6 +18,8 @@ package android.widget; import com.android.internal.R; +import android.content.Context; +import android.content.res.TypedArray; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; @@ -33,8 +35,6 @@ import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.StateListDrawable; import android.os.IBinder; -import android.content.Context; -import android.content.res.TypedArray; import android.util.AttributeSet; import java.lang.ref.WeakReference; @@ -49,7 +49,7 @@ import java.lang.ref.WeakReference; */ public class PopupWindow { /** - * Mode for {@link #setInputMethodMode(int): the requirements for the + * Mode for {@link #setInputMethodMode(int)}: the requirements for the * input method should be based on the focusability of the popup. That is * if it is focusable than it needs to work with the input method, else * it doesn't. @@ -57,16 +57,15 @@ public class PopupWindow { public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; /** - * Mode for {@link #setInputMethodMode(int): this popup always needs to + * Mode for {@link #setInputMethodMode(int)}: this popup always needs to * work with an input method, regardless of whether it is focusable. This * means that it will always be displayed so that the user can also operate * the input method while it is shown. */ - public static final int INPUT_METHOD_NEEDED = 1; /** - * Mode for {@link #setInputMethodMode(int): this popup never needs to + * Mode for {@link #setInputMethodMode(int)}: this popup never needs to * work with an input method, regardless of whether it is focusable. This * means that it will always be displayed to use as much space on the * screen as needed, regardless of whether this covers the input method. @@ -823,6 +822,7 @@ public class PopupWindow { p.flags = computeFlags(p.flags); p.type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; p.token = token; + p.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; p.setTitle("PopupWindow:" + Integer.toHexString(hashCode())); return p; @@ -990,7 +990,7 @@ public class PopupWindow { int bottomEdge = displayFrame.bottom; if (ignoreBottomDecorations) { - bottomEdge = WindowManagerImpl.getDefault().getDefaultDisplay().getHeight(); + bottomEdge = anchor.getContext().getResources().getDisplayMetrics().heightPixels; } final int distanceToBottom = bottomEdge - (anchorPos[1] + anchor.getHeight()) - yOffset; final int distanceToTop = anchorPos[1] - displayFrame.top + yOffset; @@ -1017,6 +1017,7 @@ public class PopupWindow { unregisterForScrollChanged(); mWindowManager.removeView(mPopupView); + if (mPopupView != mContentView && mPopupView instanceof ViewGroup) { ((ViewGroup) mPopupView).removeView(mContentView); } @@ -1071,6 +1072,20 @@ public class PopupWindow { mWindowManager.updateViewLayout(mPopupView, p); } } + + /** + *

        Updates the dimension of the popup window. Calling this function + * also updates the window with the current popup state as described + * for {@link #update()}.

        + * + * @param width the new width + * @param height the new height + */ + public void update(int width, int height) { + WindowManager.LayoutParams p = (WindowManager.LayoutParams) + mPopupView.getLayoutParams(); + update(p.x, p.y, width, height, false); + } /** *

        Updates the position and the dimension of the popup window. Width and @@ -1115,8 +1130,7 @@ public class PopupWindow { return; } - WindowManager.LayoutParams p = (WindowManager.LayoutParams) - mPopupView.getLayoutParams(); + WindowManager.LayoutParams p = (WindowManager.LayoutParams) mPopupView.getLayoutParams(); boolean update = force; @@ -1203,8 +1217,7 @@ public class PopupWindow { registerForScrollChanged(anchor, xoff, yoff); } - WindowManager.LayoutParams p = (WindowManager.LayoutParams) - mPopupView.getLayoutParams(); + WindowManager.LayoutParams p = (WindowManager.LayoutParams) mPopupView.getLayoutParams(); if (updateDimension) { if (width == -1) { @@ -1316,7 +1329,16 @@ public class PopupWindow { return super.onTouchEvent(event); } } - + + @Override + public void sendAccessibilityEvent(int eventType) { + // clinets are interested in the content not the container, make it event source + if (mContentView != null) { + mContentView.sendAccessibilityEvent(eventType); + } else { + super.sendAccessibilityEvent(eventType); + } + } } } diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java index 441414a20de4..2c9e71e02f08 100644 --- a/core/java/android/widget/ProgressBar.java +++ b/core/java/android/widget/ProgressBar.java @@ -30,6 +30,7 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.StateListDrawable; +import android.graphics.drawable.Animatable; import android.graphics.drawable.shapes.RoundRectShape; import android.graphics.drawable.shapes.Shape; import android.util.AttributeSet; @@ -683,7 +684,7 @@ public class ProgressBar extends View { return; } - if (mIndeterminateDrawable instanceof AnimationDrawable) { + if (mIndeterminateDrawable instanceof Animatable) { mShouldStartAnimationDrawable = true; mAnimation = null; } else { @@ -708,8 +709,8 @@ public class ProgressBar extends View { void stopAnimation() { mAnimation = null; mTransformation = null; - if (mIndeterminateDrawable instanceof AnimationDrawable) { - ((AnimationDrawable) mIndeterminateDrawable).stop(); + if (mIndeterminateDrawable instanceof Animatable) { + ((Animatable) mIndeterminateDrawable).stop(); mShouldStartAnimationDrawable = false; } } @@ -818,8 +819,8 @@ public class ProgressBar extends View { } d.draw(canvas); canvas.restore(); - if (mShouldStartAnimationDrawable && d instanceof AnimationDrawable) { - ((AnimationDrawable) d).start(); + if (mShouldStartAnimationDrawable && d instanceof Animatable) { + ((Animatable) d).start(); mShouldStartAnimationDrawable = false; } } diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java index edbb3db255ab..e62dda58ba42 100644 --- a/core/java/android/widget/RelativeLayout.java +++ b/core/java/android/widget/RelativeLayout.java @@ -16,40 +16,59 @@ package android.widget; +import com.android.internal.R; + import android.content.Context; import android.content.res.TypedArray; +import android.content.res.Resources; +import android.graphics.Rect; import android.util.AttributeSet; -import android.view.View; -import android.view.ViewGroup; +import android.util.SparseArray; +import android.util.Poolable; +import android.util.Pool; +import android.util.Pools; +import android.util.PoolableManager; +import static android.util.Log.d; import android.view.Gravity; +import android.view.View; import android.view.ViewDebug; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; import android.widget.RemoteViews.RemoteView; -import android.graphics.Rect; -import com.android.internal.R; +import java.util.Comparator; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.LinkedList; +import java.util.HashSet; +import java.util.ArrayList; /** * A Layout where the positions of the children can be described in relation to each other or to the * parent. For the sake of efficiency, the relations between views are evaluated in one pass, so if * view Y is dependent on the position of view X, make sure the view X comes first in the layout. - * + * *

        * Note that you cannot have a circular dependency between the size of the RelativeLayout and the * position of its children. For example, you cannot have a RelativeLayout whose height is set to * {@link android.view.ViewGroup.LayoutParams#WRAP_CONTENT WRAP_CONTENT} and a child set to * {@link #ALIGN_PARENT_BOTTOM}. *

        - * + * *

        * Also see {@link android.widget.RelativeLayout.LayoutParams RelativeLayout.LayoutParams} for * layout attributes *

        - * + * * @attr ref android.R.styleable#RelativeLayout_gravity * @attr ref android.R.styleable#RelativeLayout_ignoreGravity */ @RemoteView public class RelativeLayout extends ViewGroup { + private static final String LOG_TAG = "RelativeLayout"; + + private static final boolean DEBUG_GRAPH = false; + public static final int TRUE = -1; /** @@ -137,6 +156,13 @@ public class RelativeLayout extends ViewGroup { private final Rect mSelfBounds = new Rect(); private int mIgnoreGravity; + private SortedSet mTopToBottomLeftToRightSet = null; + + private boolean mDirtyHierarchy; + private View[] mSortedHorizontalChildren = new View[0]; + private View[] mSortedVerticalChildren = new View[0]; + private final DependencyGraph mGraph = new DependencyGraph(); + public RelativeLayout(Context context) { super(context); } @@ -224,8 +250,55 @@ public class RelativeLayout extends ViewGroup { return mBaselineView != null ? mBaselineView.getBaseline() : super.getBaseline(); } + @Override + public void requestLayout() { + super.requestLayout(); + mDirtyHierarchy = true; + } + + private void sortChildren() { + int count = getChildCount(); + if (mSortedVerticalChildren.length != count) mSortedVerticalChildren = new View[count]; + if (mSortedHorizontalChildren.length != count) mSortedHorizontalChildren = new View[count]; + + final DependencyGraph graph = mGraph; + graph.clear(); + + for (int i = 0; i < count; i++) { + final View child = getChildAt(i); + graph.add(child); + } + + if (DEBUG_GRAPH) { + d(LOG_TAG, "=== Sorted vertical children"); + graph.log(getResources(), ABOVE, BELOW, ALIGN_BASELINE, ALIGN_TOP, ALIGN_BOTTOM); + d(LOG_TAG, "=== Sorted horizontal children"); + graph.log(getResources(), LEFT_OF, RIGHT_OF, ALIGN_LEFT, ALIGN_RIGHT); + } + + graph.getSortedViews(mSortedVerticalChildren, ABOVE, BELOW, ALIGN_BASELINE, + ALIGN_TOP, ALIGN_BOTTOM); + graph.getSortedViews(mSortedHorizontalChildren, LEFT_OF, RIGHT_OF, ALIGN_LEFT, ALIGN_RIGHT); + + if (DEBUG_GRAPH) { + d(LOG_TAG, "=== Ordered list of vertical children"); + for (View view : mSortedVerticalChildren) { + DependencyGraph.printViewId(getResources(), view); + } + d(LOG_TAG, "=== Ordered list of horizontal children"); + for (View view : mSortedHorizontalChildren) { + DependencyGraph.printViewId(getResources(), view); + } + } + } + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (mDirtyHierarchy) { + mDirtyHierarchy = false; + sortChildren(); + } + int myWidth = -1; int myHeight = -1; @@ -254,7 +327,6 @@ public class RelativeLayout extends ViewGroup { height = myHeight; } - int len = this.getChildCount(); mHasBaselineAlignedChild = false; View ignore = null; @@ -268,22 +340,50 @@ public class RelativeLayout extends ViewGroup { int right = Integer.MIN_VALUE; int bottom = Integer.MIN_VALUE; + boolean offsetHorizontalAxis = false; + boolean offsetVerticalAxis = false; + if ((horizontalGravity || verticalGravity) && mIgnoreGravity != View.NO_ID) { ignore = findViewById(mIgnoreGravity); } - for (int i = 0; i < len; i++) { - View child = getChildAt(i); + final boolean isWrapContentWidth = widthMode != MeasureSpec.EXACTLY; + final boolean isWrapContentHeight = heightMode != MeasureSpec.EXACTLY; + + View[] views = mSortedHorizontalChildren; + int count = views.length; + for (int i = 0; i < count; i++) { + View child = views[i]; + if (child.getVisibility() != GONE) { + LayoutParams params = (LayoutParams) child.getLayoutParams(); + + applyHorizontalSizeRules(params, myWidth); + measureChildHorizontal(child, params, myWidth, myHeight); + if (positionChildHorizontal(child, params, myWidth, isWrapContentWidth)) { + offsetHorizontalAxis = true; + } + } + } + + views = mSortedVerticalChildren; + count = views.length; + + for (int i = 0; i < count; i++) { + View child = views[i]; if (child.getVisibility() != GONE) { LayoutParams params = (LayoutParams) child.getLayoutParams(); - applySizeRules(params, myWidth, myHeight); + + applyVerticalSizeRules(params, myHeight); measureChild(child, params, myWidth, myHeight); - positionChild(child, params, myWidth, myHeight); + if (positionChildVertical(child, params, myHeight, isWrapContentHeight)) { + offsetVerticalAxis = true; + } - if (widthMode != MeasureSpec.EXACTLY) { + if (isWrapContentWidth) { width = Math.max(width, params.mRight); } - if (heightMode != MeasureSpec.EXACTLY) { + + if (isWrapContentHeight) { height = Math.max(height, params.mBottom); } @@ -300,15 +400,15 @@ public class RelativeLayout extends ViewGroup { } if (mHasBaselineAlignedChild) { - for (int i = 0; i < len; i++) { + for (int i = 0; i < count; i++) { View child = getChildAt(i); if (child.getVisibility() != GONE) { LayoutParams params = (LayoutParams) child.getLayoutParams(); alignBaseline(child, params); if (child != ignore || verticalGravity) { - left = Math.min(left, params.mLeft - params.leftMargin); - top = Math.min(top, params.mTop - params.topMargin); + left = Math.min(left, params.mLeft - params.leftMargin); + top = Math.min(top, params.mTop - params.topMargin); } if (child != ignore || horizontalGravity) { @@ -319,8 +419,8 @@ public class RelativeLayout extends ViewGroup { } } - if (widthMode != MeasureSpec.EXACTLY) { - // Width already has left padding in it since it was calculated by looking at + if (isWrapContentWidth) { + // Width already has left padding in it since it was calculated by looking at // the right of each child view width += mPaddingRight; @@ -330,9 +430,23 @@ public class RelativeLayout extends ViewGroup { width = Math.max(width, getSuggestedMinimumWidth()); width = resolveSize(width, widthMeasureSpec); + + if (offsetHorizontalAxis) { + for (int i = 0; i < count; i++) { + View child = getChildAt(i); + if (child.getVisibility() != GONE) { + LayoutParams params = (LayoutParams) child.getLayoutParams(); + final int[] rules = params.getRules(); + if (rules[CENTER_IN_PARENT] != 0 || rules[CENTER_HORIZONTAL] != 0) { + centerHorizontal(child, params, width); + } + } + } + } } - if (heightMode != MeasureSpec.EXACTLY) { - // Height already has top padding in it since it was calculated by looking at + + if (isWrapContentHeight) { + // Height already has top padding in it since it was calculated by looking at // the bottom of each child view height += mPaddingBottom; @@ -342,6 +456,19 @@ public class RelativeLayout extends ViewGroup { height = Math.max(height, getSuggestedMinimumHeight()); height = resolveSize(height, heightMeasureSpec); + + if (offsetVerticalAxis) { + for (int i = 0; i < count; i++) { + View child = getChildAt(i); + if (child.getVisibility() != GONE) { + LayoutParams params = (LayoutParams) child.getLayoutParams(); + final int[] rules = params.getRules(); + if (rules[CENTER_IN_PARENT] != 0 || rules[CENTER_VERTICAL] != 0) { + centerVertical(child, params, height); + } + } + } + } } if (horizontalGravity || verticalGravity) { @@ -355,7 +482,7 @@ public class RelativeLayout extends ViewGroup { final int horizontalOffset = contentBounds.left - left; final int verticalOffset = contentBounds.top - top; if (horizontalOffset != 0 || verticalOffset != 0) { - for (int i = 0; i < len; i++) { + for (int i = 0; i < count; i++) { View child = getChildAt(i); if (child.getVisibility() != GONE && child != ignore) { LayoutParams params = (LayoutParams) child.getLayoutParams(); @@ -409,9 +536,7 @@ public class RelativeLayout extends ViewGroup { * @param myWidth Width of the the RelativeLayout * @param myHeight Height of the RelativeLayout */ - private void measureChild(View child, LayoutParams params, int myWidth, - int myHeight) { - + private void measureChild(View child, LayoutParams params, int myWidth, int myHeight) { int childWidthMeasureSpec = getChildMeasureSpec(params.mLeft, params.mRight, params.width, params.leftMargin, params.rightMargin, @@ -425,6 +550,21 @@ public class RelativeLayout extends ViewGroup { child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } + private void measureChildHorizontal(View child, LayoutParams params, int myWidth, int myHeight) { + int childWidthMeasureSpec = getChildMeasureSpec(params.mLeft, + params.mRight, params.width, + params.leftMargin, params.rightMargin, + mPaddingLeft, mPaddingRight, + myWidth); + int childHeightMeasureSpec; + if (params.width == LayoutParams.FILL_PARENT) { + childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(myHeight, MeasureSpec.EXACTLY); + } else { + childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(myHeight, MeasureSpec.AT_MOST); + } + child.measure(childWidthMeasureSpec, childHeightMeasureSpec); + } + /** * Get a measure spec that accounts for all of the constraints on this view. * This includes size contstraints imposed by the RelativeLayout as well as @@ -504,19 +644,9 @@ public class RelativeLayout extends ViewGroup { return MeasureSpec.makeMeasureSpec(childSpecSize, childSpecMode); } - /** - * After the child has been measured, assign it a position. Some views may - * already have final values for l,t,r,b. Others may have one or both edges - * unfixed (i.e. set to -1) in each dimension. These will get positioned - * based on which edge is fixed, the view's desired dimension, and whether - * or not it is centered. - * - * @param child Child to position - * @param params LayoutParams associated with child - * @param myWidth Width of the the RelativeLayout - * @param myHeight Height of the RelativeLayout - */ - private void positionChild(View child, LayoutParams params, int myWidth, int myHeight) { + private boolean positionChildHorizontal(View child, LayoutParams params, int myWidth, + boolean wrapContent) { + int[] rules = params.getRules(); if (params.mLeft < 0 && params.mRight >= 0) { @@ -527,13 +657,26 @@ public class RelativeLayout extends ViewGroup { params.mRight = params.mLeft + child.getMeasuredWidth(); } else if (params.mLeft < 0 && params.mRight < 0) { // Both left and right vary - if (0 != rules[CENTER_IN_PARENT] || 0 != rules[CENTER_HORIZONTAL]) { - centerHorizontal(child, params, myWidth); + if (rules[CENTER_IN_PARENT] != 0 || rules[CENTER_HORIZONTAL] != 0) { + if (!wrapContent) { + centerHorizontal(child, params, myWidth); + } else { + params.mLeft = mPaddingLeft + params.leftMargin; + params.mRight = params.mLeft + child.getMeasuredWidth(); + } + return true; } else { params.mLeft = mPaddingLeft + params.leftMargin; params.mRight = params.mLeft + child.getMeasuredWidth(); } } + return false; + } + + private boolean positionChildVertical(View child, LayoutParams params, int myHeight, + boolean wrapContent) { + + int[] rules = params.getRules(); if (params.mTop < 0 && params.mBottom >= 0) { // Bottom is fixed, but top varies @@ -543,26 +686,23 @@ public class RelativeLayout extends ViewGroup { params.mBottom = params.mTop + child.getMeasuredHeight(); } else if (params.mTop < 0 && params.mBottom < 0) { // Both top and bottom vary - if (0 != rules[CENTER_IN_PARENT] || 0 != rules[CENTER_VERTICAL]) { - centerVertical(child, params, myHeight); + if (rules[CENTER_IN_PARENT] != 0 || rules[CENTER_VERTICAL] != 0) { + if (!wrapContent) { + centerVertical(child, params, myHeight); + } else { + params.mTop = mPaddingTop + params.topMargin; + params.mBottom = params.mTop + child.getMeasuredHeight(); + } + return true; } else { params.mTop = mPaddingTop + params.topMargin; params.mBottom = params.mTop + child.getMeasuredHeight(); } } + return false; } - /** - * Set l,t,r,b values in the LayoutParams for one view based on its layout rules. - * Big assumption #1: All antecedents of this view have been sized & positioned - * Big assumption #2: The dimensions of the parent view (the RelativeLayout) - * are already known if they are needed. - * - * @param childParams LayoutParams for the view being positioned - * @param myWidth Width of the the RelativeLayout - * @param myHeight Height of the RelativeLayout - */ - private void applySizeRules(LayoutParams childParams, int myWidth, int myHeight) { + private void applyHorizontalSizeRules(LayoutParams childParams, int myWidth) { int[] rules = childParams.getRules(); RelativeLayout.LayoutParams anchorParams; @@ -622,6 +762,11 @@ public class RelativeLayout extends ViewGroup { // FIXME uh oh... } } + } + + private void applyVerticalSizeRules(LayoutParams childParams, int myHeight) { + int[] rules = childParams.getRules(); + RelativeLayout.LayoutParams anchorParams; childParams.mTop = -1; childParams.mBottom = -1; @@ -684,18 +829,16 @@ public class RelativeLayout extends ViewGroup { private View getRelatedView(int[] rules, int relation) { int id = rules[relation]; if (id != 0) { - View v = findViewById(id); - if (v == null) { - return null; - } + DependencyGraph.Node node = mGraph.mKeyNodes.get(id); + if (node == null) return null; + View v = node.view; // Find the first non-GONE view up the chain while (v.getVisibility() == View.GONE) { rules = ((LayoutParams) v.getLayoutParams()).getRules(); - v = v.findViewById(rules[relation]); - if (v == null) { - return null; - } + node = mGraph.mKeyNodes.get((rules[relation])); + if (node == null) return null; + v = node.view; } return v; @@ -782,6 +925,57 @@ public class RelativeLayout extends ViewGroup { return new LayoutParams(p); } + @Override + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + if (mTopToBottomLeftToRightSet == null) { + mTopToBottomLeftToRightSet = new TreeSet(new TopToBottomLeftToRightComparator()); + } + + // sort children top-to-bottom and left-to-right + for (int i = 0, count = getChildCount(); i < count; i++) { + mTopToBottomLeftToRightSet.add(getChildAt(i)); + } + + for (View view : mTopToBottomLeftToRightSet) { + if (view.dispatchPopulateAccessibilityEvent(event)) { + mTopToBottomLeftToRightSet.clear(); + return true; + } + } + + mTopToBottomLeftToRightSet.clear(); + return false; + } + + /** + * Compares two views in left-to-right and top-to-bottom fashion. + */ + private class TopToBottomLeftToRightComparator implements Comparator { + public int compare(View first, View second) { + // top - bottom + int topDifference = first.getTop() - second.getTop(); + if (topDifference != 0) { + return topDifference; + } + // left - right + int leftDifference = first.getLeft() - second.getLeft(); + if (leftDifference != 0) { + return leftDifference; + } + // break tie by height + int heightDiference = first.getHeight() - second.getHeight(); + if (heightDiference != 0) { + return heightDiference; + } + // break tie by width + int widthDiference = first.getWidth() - second.getWidth(); + if (widthDiference != 0) { + return widthDiference; + } + return 0; + } + } + /** * Per-child layout information associated with RelativeLayout. * @@ -823,7 +1017,7 @@ public class RelativeLayout extends ViewGroup { @ViewDebug.IntToString(from = RIGHT_OF, to = "rightOf") }, mapping = { @ViewDebug.IntToString(from = TRUE, to = "true"), - @ViewDebug.IntToString(from = 0, to = "FALSE/NO_ID") + @ViewDebug.IntToString(from = 0, to = "false/NO_ID") }) private int[] mRules = new int[VERB_COUNT]; @@ -975,4 +1169,284 @@ public class RelativeLayout extends ViewGroup { return mRules; } } + + private static class DependencyGraph { + /** + * List of all views in the graph. + */ + private ArrayList mNodes = new ArrayList(); + + /** + * List of nodes in the graph. Each node is identified by its + * view id (see View#getId()). + */ + private SparseArray mKeyNodes = new SparseArray(); + + /** + * Temporary data structure used to build the list of roots + * for this graph. + */ + private LinkedList mRoots = new LinkedList(); + + /** + * Clears the graph. + */ + void clear() { + final ArrayList nodes = mNodes; + final int count = nodes.size(); + + for (int i = 0; i < count; i++) { + nodes.get(i).release(); + } + nodes.clear(); + + mKeyNodes.clear(); + mRoots.clear(); + } + + /** + * Adds a view to the graph. + * + * @param view The view to be added as a node to the graph. + */ + void add(View view) { + final int id = view.getId(); + final Node node = Node.acquire(view); + + if (id != View.NO_ID) { + mKeyNodes.put(id, node); + } + + mNodes.add(node); + } + + /** + * Builds a sorted list of views. The sorting order depends on the dependencies + * between the view. For instance, if view C needs view A to be processed first + * and view A needs view B to be processed first, the dependency graph + * is: B -> A -> C. The sorted array will contain views B, A and C in this order. + * + * @param sorted The sorted list of views. The length of this array must + * be equal to getChildCount(). + * @param rules The list of rules to take into account. + */ + void getSortedViews(View[] sorted, int... rules) { + final LinkedList roots = findRoots(rules); + int index = 0; + + while (roots.size() > 0) { + final Node node = roots.removeFirst(); + final View view = node.view; + final int key = view.getId(); + + sorted[index++] = view; + + final HashSet dependents = node.dependents; + for (Node dependent : dependents) { + final SparseArray dependencies = dependent.dependencies; + + dependencies.remove(key); + if (dependencies.size() == 0) { + roots.add(dependent); + } + } + } + + if (index < sorted.length) { + throw new IllegalStateException("Circular dependencies cannot exist" + + " in RelativeLayout"); + } + } + + /** + * Finds the roots of the graph. A root is a node with no dependency and + * with [0..n] dependents. + * + * @param rulesFilter The list of rules to consider when building the + * dependencies + * + * @return A list of node, each being a root of the graph + */ + private LinkedList findRoots(int[] rulesFilter) { + final SparseArray keyNodes = mKeyNodes; + final ArrayList nodes = mNodes; + final int count = nodes.size(); + + // Find roots can be invoked several times, so make sure to clear + // all dependents and dependencies before running the algorithm + for (int i = 0; i < count; i++) { + final Node node = nodes.get(i); + node.dependents.clear(); + node.dependencies.clear(); + } + + // Builds up the dependents and dependencies for each node of the graph + for (int i = 0; i < count; i++) { + final Node node = nodes.get(i); + + final LayoutParams layoutParams = (LayoutParams) node.view.getLayoutParams(); + final int[] rules = layoutParams.mRules; + final int rulesCount = rulesFilter.length; + + // Look only the the rules passed in parameter, this way we build only the + // dependencies for a specific set of rules + for (int j = 0; j < rulesCount; j++) { + final int rule = rules[rulesFilter[j]]; + if (rule > 0) { + // The node this node depends on + final Node dependency = keyNodes.get(rule); + if (dependency == node) { + throw new IllegalStateException("A view cannot have a dependency" + + " on itself"); + } + if (dependency == null) { + continue; + } + // Add the current node as a dependent + dependency.dependents.add(node); + // Add a dependency to the current node + node.dependencies.put(rule, dependency); + } + } + } + + final LinkedList roots = mRoots; + roots.clear(); + + // Finds all the roots in the graph: all nodes with no dependencies + for (int i = 0; i < count; i++) { + final Node node = nodes.get(i); + if (node.dependencies.size() == 0) roots.add(node); + } + + return roots; + } + + /** + * Prints the dependency graph for the specified rules. + * + * @param resources The context's resources to print the ids. + * @param rules The list of rules to take into account. + */ + void log(Resources resources, int... rules) { + final LinkedList roots = findRoots(rules); + for (Node node : roots) { + printNode(resources, node); + } + } + + static void printViewId(Resources resources, View view) { + if (view.getId() != View.NO_ID) { + d(LOG_TAG, resources.getResourceEntryName(view.getId())); + } else { + d(LOG_TAG, "NO_ID"); + } + } + + private static void appendViewId(Resources resources, Node node, StringBuilder buffer) { + if (node.view.getId() != View.NO_ID) { + buffer.append(resources.getResourceEntryName(node.view.getId())); + } else { + buffer.append("NO_ID"); + } + } + + private static void printNode(Resources resources, Node node) { + if (node.dependents.size() == 0) { + printViewId(resources, node.view); + } else { + for (Node dependent : node.dependents) { + StringBuilder buffer = new StringBuilder(); + appendViewId(resources, node, buffer); + printdependents(resources, dependent, buffer); + } + } + } + + private static void printdependents(Resources resources, Node node, StringBuilder buffer) { + buffer.append(" -> "); + appendViewId(resources, node, buffer); + + if (node.dependents.size() == 0) { + d(LOG_TAG, buffer.toString()); + } else { + for (Node dependent : node.dependents) { + StringBuilder subBuffer = new StringBuilder(buffer); + printdependents(resources, dependent, subBuffer); + } + } + } + + /** + * A node in the dependency graph. A node is a view, its list of dependencies + * and its list of dependents. + * + * A node with no dependent is considered a root of the graph. + */ + static class Node implements Poolable { + /** + * The view representing this node in the layout. + */ + View view; + + /** + * The list of dependents for this node; a dependent is a node + * that needs this node to be processed first. + */ + final HashSet dependents = new HashSet(); + + /** + * The list of dependencies for this node. + */ + final SparseArray dependencies = new SparseArray(); + + /* + * START POOL IMPLEMENTATION + */ + // The pool is static, so all nodes instances are shared across + // activities, that's why we give it a rather high limit + private static final int POOL_LIMIT = 100; + private static final Pool sPool = Pools.synchronizedPool( + Pools.finitePool(new PoolableManager() { + public Node newInstance() { + return new Node(); + } + + public void onAcquired(Node element) { + } + + public void onReleased(Node element) { + } + }, POOL_LIMIT) + ); + + private Node mNext; + + public void setNextPoolable(Node element) { + mNext = element; + } + + public Node getNextPoolable() { + return mNext; + } + + static Node acquire(View view) { + final Node node = sPool.acquire(); + node.view = view; + + return node; + } + + void release() { + view = null; + dependents.clear(); + dependencies.clear(); + + sPool.release(this); + } + /* + * END POOL IMPLEMENTATION + */ + } + } } diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 7936f6535d9f..2dac65211213 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -20,10 +20,8 @@ import android.app.PendingIntent; import android.app.PendingIntent.CanceledException; import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.PorterDuff; -import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Parcel; @@ -36,15 +34,12 @@ import android.view.View; import android.view.ViewGroup; import android.view.LayoutInflater.Filter; import android.view.View.OnClickListener; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; import java.lang.Class; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; @@ -69,13 +64,7 @@ public class RemoteViews implements Parcelable, Filter { * The resource ID of the layout file. (Added to the parcel) */ private int mLayoutId; - - /** - * The Context object used to inflate the layout file. Also may - * be used by actions if they need access to the senders resources. - */ - private Context mContext; - + /** * An array of actions to perform on the view tree once it has been * inflated @@ -85,7 +74,7 @@ public class RemoteViews implements Parcelable, Filter { /** * This annotation indicates that a subclass of View is alllowed to be used - * with the {@link android.widget.RemoteViews} mechanism. + * with the {@link RemoteViews} mechanism. */ @Target({ ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) @@ -116,7 +105,7 @@ public class RemoteViews implements Parcelable, Filter { public int describeContents() { return 0; } - }; + } /** * Equivalent to calling @@ -232,15 +221,17 @@ public class RemoteViews implements Parcelable, Filter { targetDrawable = imageView.getDrawable(); } - // Perform modifications only if values are set correctly - if (alpha != -1) { - targetDrawable.setAlpha(alpha); - } - if (colorFilter != -1 && filterMode != null) { - targetDrawable.setColorFilter(colorFilter, filterMode); - } - if (level != -1) { - targetDrawable.setLevel(level); + if (targetDrawable != null) { + // Perform modifications only if values are set correctly + if (alpha != -1) { + targetDrawable.setAlpha(alpha); + } + if (colorFilter != -1 && filterMode != null) { + targetDrawable.setColorFilter(colorFilter, filterMode); + } + if (level != -1) { + targetDrawable.setLevel(level); + } } } @@ -289,6 +280,7 @@ public class RemoteViews implements Parcelable, Filter { this.viewId = in.readInt(); this.methodName = in.readString(); this.type = in.readInt(); + //noinspection ConstantIfStatement if (false) { Log.d("RemoteViews", "read viewId=0x" + Integer.toHexString(this.viewId) + " methodName=" + this.methodName + " type=" + this.type); @@ -340,31 +332,32 @@ public class RemoteViews implements Parcelable, Filter { out.writeInt(this.viewId); out.writeString(this.methodName); out.writeInt(this.type); + //noinspection ConstantIfStatement if (false) { Log.d("RemoteViews", "write viewId=0x" + Integer.toHexString(this.viewId) + " methodName=" + this.methodName + " type=" + this.type); } switch (this.type) { case BOOLEAN: - out.writeInt(((Boolean)this.value).booleanValue() ? 1 : 0); + out.writeInt((Boolean) this.value ? 1 : 0); break; case BYTE: - out.writeByte(((Byte)this.value).byteValue()); + out.writeByte((Byte) this.value); break; case SHORT: - out.writeInt(((Short)this.value).shortValue()); + out.writeInt((Short) this.value); break; case INT: - out.writeInt(((Integer)this.value).intValue()); + out.writeInt((Integer) this.value); break; case LONG: - out.writeLong(((Long)this.value).longValue()); + out.writeLong((Long) this.value); break; case FLOAT: - out.writeFloat(((Float)this.value).floatValue()); + out.writeFloat((Float) this.value); break; case DOUBLE: - out.writeDouble(((Double)this.value).doubleValue()); + out.writeDouble((Double) this.value); break; case CHAR: out.writeInt((int)((Character)this.value).charValue()); @@ -430,7 +423,7 @@ public class RemoteViews implements Parcelable, Filter { } Class klass = view.getClass(); - Method method = null; + Method method; try { method = klass.getMethod(this.methodName, getParameterType()); } @@ -446,6 +439,7 @@ public class RemoteViews implements Parcelable, Filter { } try { + //noinspection ConstantIfStatement if (false) { Log.d("RemoteViews", "view: " + klass.getName() + " calling method: " + this.methodName + "(" + param.getName() + ") with " @@ -816,13 +810,12 @@ public class RemoteViews implements Parcelable, Filter { * @return The inflated view hierarchy */ public View apply(Context context, ViewGroup parent) { - View result = null; + View result; Context c = prepareContext(context); - Resources r = c.getResources(); - LayoutInflater inflater = (LayoutInflater) c - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + LayoutInflater inflater = (LayoutInflater) + c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater = inflater.cloneInContext(c); inflater.setFilter(this); @@ -858,12 +851,12 @@ public class RemoteViews implements Parcelable, Filter { } private Context prepareContext(Context context) { - Context c = null; + Context c; String packageName = mPackage; if (packageName != null) { try { - c = context.createPackageContext(packageName, 0); + c = context.createPackageContext(packageName, Context.CONTEXT_RESTRICTED); } catch (NameNotFoundException e) { Log.e(LOG_TAG, "Package name " + packageName + " not found"); c = context; @@ -872,8 +865,6 @@ public class RemoteViews implements Parcelable, Filter { c = context; } - mContext = c; - return c; } diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index c9b3751764eb..90e1242396f3 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -115,6 +115,8 @@ public class ScrollView extends FrameLayout { private boolean mSmoothScrollingEnabled = true; private int mTouchSlop; + private int mMinimumVelocity; + private int mMaximumVelocity; public ScrollView(Context context) { this(context, null); @@ -180,7 +182,10 @@ public class ScrollView extends FrameLayout { setFocusable(true); setDescendantFocusability(FOCUS_AFTER_DESCENDANTS); setWillNotDraw(false); - mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); + final ViewConfiguration configuration = ViewConfiguration.get(mContext); + mTouchSlop = configuration.getScaledTouchSlop(); + mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); + mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); } @Override @@ -478,12 +483,10 @@ public class ScrollView extends FrameLayout { break; case MotionEvent.ACTION_UP: final VelocityTracker velocityTracker = mVelocityTracker; - velocityTracker.computeCurrentVelocity(1000); + velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity); int initialVelocity = (int) velocityTracker.getYVelocity(); - if ((Math.abs(initialVelocity) > - ViewConfiguration.get(mContext).getScaledMinimumFlingVelocity()) && - getChildCount() > 0) { + if ((Math.abs(initialVelocity) > mMinimumVelocity) && getChildCount() > 0) { fling(-initialVelocity); } diff --git a/core/java/android/widget/SlidingDrawer.java b/core/java/android/widget/SlidingDrawer.java index 92561edc1cd1..f70674430135 100644 --- a/core/java/android/widget/SlidingDrawer.java +++ b/core/java/android/widget/SlidingDrawer.java @@ -16,21 +16,22 @@ package android.widget; -import android.view.ViewGroup; -import android.view.View; -import android.view.MotionEvent; -import android.view.VelocityTracker; -import android.view.SoundEffectConstants; +import android.R; import android.content.Context; import android.content.res.TypedArray; -import android.util.AttributeSet; +import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Rect; -import android.graphics.Bitmap; -import android.os.SystemClock; import android.os.Handler; import android.os.Message; -import android.R; +import android.os.SystemClock; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.SoundEffectConstants; +import android.view.VelocityTracker; +import android.view.View; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; /** * SlidingDrawer hides content out of the screen and allows the user to drag a handle @@ -746,6 +747,8 @@ public class SlidingDrawer extends ViewGroup { openDrawer(); invalidate(); requestLayout(); + + sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); } /** @@ -777,6 +780,7 @@ public class SlidingDrawer extends ViewGroup { scrollListener.onScrollStarted(); } animateClose(mVertical ? mHandle.getTop() : mHandle.getLeft()); + if (scrollListener != null) { scrollListener.onScrollEnded(); } @@ -798,6 +802,9 @@ public class SlidingDrawer extends ViewGroup { scrollListener.onScrollStarted(); } animateOpen(mVertical ? mHandle.getTop() : mHandle.getLeft()); + + sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); + if (scrollListener != null) { scrollListener.onScrollEnded(); } @@ -827,6 +834,7 @@ public class SlidingDrawer extends ViewGroup { } mExpanded = true; + if (mOnDrawerOpenListener != null) { mOnDrawerOpenListener.onDrawerOpened(); } diff --git a/core/java/android/widget/TabHost.java b/core/java/android/widget/TabHost.java index dc2c70de92e4..103d44db52a0 100644 --- a/core/java/android/widget/TabHost.java +++ b/core/java/android/widget/TabHost.java @@ -87,8 +87,9 @@ public class TabHost extends FrameLayout implements ViewTreeObserver.OnTouchMode /** - *

        Call setup() before adding tabs if loading TabHost using findViewById(). However: You do - * not need to call setup() after getTabHost() in {@link android.app.TabActivity TabActivity}. + *

        Call setup() before adding tabs if loading TabHost using findViewById(). + * However: You do not need to call setup() after getTabHost() + * in {@link android.app.TabActivity TabActivity}. * Example:

        mTabHost = (TabHost)findViewById(R.id.tabhost);
         mTabHost.setup();
        @@ -176,7 +177,7 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
                     // leaving touch mode.. if nothing has focus, let's give it to
                     // the indicator of the current tab
                     if (!mCurrentView.hasFocus() || mCurrentView.isFocused()) {
        -                mTabWidget.getChildAt(mCurrentTab).requestFocus();
        +                mTabWidget.getChildTabViewAt(mCurrentTab).requestFocus();
                     }
                 }
             }
        @@ -196,6 +197,12 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
                 }
                 View tabIndicator = tabSpec.mIndicatorStrategy.createIndicatorView();
                 tabIndicator.setOnKeyListener(mTabKeyListener);
        +
        +        // If this is a custom view, then do not draw the bottom strips for
        +        // the tab indicators.
        +        if (tabSpec.mIndicatorStrategy instanceof ViewIndicatorStrategy) {
        +            mTabWidget.setDrawBottomStrips(false);
        +        }
                 mTabWidget.addView(tabIndicator);
                 mTabSpecs.add(tabSpec);
         
        @@ -234,7 +241,7 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
         
             public View getCurrentTabView() {
                 if (mCurrentTab >= 0 && mCurrentTab < mTabSpecs.size()) {
        -            return mTabWidget.getChildAt(mCurrentTab);
        +            return mTabWidget.getChildTabViewAt(mCurrentTab);
                 }
                 return null;
             }
        @@ -272,7 +279,7 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
                         && (mCurrentView.isRootNamespace())
                         && (mCurrentView.hasFocus())
                         && (mCurrentView.findFocus().focusSearch(View.FOCUS_UP) == null)) {
        -            mTabWidget.getChildAt(mCurrentTab).requestFocus();
        +            mTabWidget.getChildTabViewAt(mCurrentTab).requestFocus();
                     playSoundEffect(SoundEffectConstants.NAVIGATION_UP);
                     return true;
                 }
        @@ -363,14 +370,14 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
                  * 
                  * @param tag
                  *            Which tab was selected.
        -         * @return The view to distplay the contents of the selected tab.
        +         * @return The view to display the contents of the selected tab.
                  */
                 View createTabContent(String tag);
             }
         
         
             /**
        -     * A tab has a tab indictor, content, and a tag that is used to keep
        +     * A tab has a tab indicator, content, and a tag that is used to keep
              * track of it.  This builder helps choose among these options.
              *
              * For the tab indicator, your choices are:
        @@ -409,6 +416,14 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
                     return this;
                 }
         
        +        /**
        +         * Specify a view as the tab indicator.
        +         */
        +        public TabSpec setIndicator(View view) {
        +            mIndicatorStrategy = new ViewIndicatorStrategy(view);
        +            return this;
        +        }
        +
                 /**
                  * Specify the id of the view that should be used as the content
                  * of the tab.
        @@ -436,7 +451,7 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
                 }
         
         
        -        String getTag() {
        +        public String getTag() {
                     return mTag;
                 }
             }
        @@ -524,6 +539,22 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
                 }
             }
         
        +    /**
        +     * How to create a tab indicator by specifying a view.
        +     */
        +    private class ViewIndicatorStrategy implements IndicatorStrategy {
        +
        +        private final View mView;
        +
        +        private ViewIndicatorStrategy(View view) {
        +            mView = view;
        +        }
        +
        +        public View createIndicatorView() {
        +            return mView;
        +        }
        +    }
        +
             /**
              * How to create the tab content via a view id.
              */
        @@ -607,7 +638,7 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
                     }
                     mLaunchedView = wd;
                     
        -            // XXX Set FOCUS_AFTER_DESCENDANTS on embedded activies for now so they can get
        +            // XXX Set FOCUS_AFTER_DESCENDANTS on embedded activities for now so they can get
                     // focus if none of their children have it. They need focus to be able to
                     // display menu items.
                     //
        diff --git a/core/java/android/widget/TabWidget.java b/core/java/android/widget/TabWidget.java
        index 20cddcb3bfb2..a26bfa23eff8 100644
        --- a/core/java/android/widget/TabWidget.java
        +++ b/core/java/android/widget/TabWidget.java
        @@ -49,6 +49,8 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
             private Drawable mBottomLeftStrip;
             private Drawable mBottomRightStrip;
             private boolean mStripMoved;
        +    private Drawable mDividerDrawable;
        +    private boolean mDrawBottomStrips = true;
         
             public TabWidget(Context context) {
                 this(context, null);
        @@ -87,9 +89,68 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
                 setOnFocusChangeListener(this);
             }
         
        +    /**
        +     * Returns the tab indicator view at the given index.
        +     *
        +     * @param index the zero-based index of the tab indicator view to return
        +     * @return the tab indicator view at the given index
        +     */
        +    public View getChildTabViewAt(int index) {
        +        // If we are using dividers, then instead of tab views at 0, 1, 2, ...
        +        // we have tab views at 0, 2, 4, ...
        +        if (mDividerDrawable != null) {
        +            index *= 2;
        +        }
        +        return getChildAt(index);
        +    }
        +
        +    /**
        +     * Returns the number of tab indicator views.
        +     * @return the number of tab indicator views.
        +     */
        +    public int getTabCount() {
        +        int children = getChildCount();
        +
        +        // If we have dividers, then we will always have an odd number of
        +        // children: 1, 3, 5, ... and we want to convert that sequence to
        +        // this: 1, 2, 3, ...
        +        if (mDividerDrawable != null) {
        +            children = (children + 1) / 2;
        +        }
        +        return children;
        +    }
        +
        +    /**
        +     * Sets the drawable to use as a divider between the tab indicators.
        +     * @param drawable the divider drawable
        +     */
        +    public void setDividerDrawable(Drawable drawable) {
        +        mDividerDrawable = drawable;
        +    }
        +
        +    /**
        +     * Sets the drawable to use as a divider between the tab indicators.
        +     * @param resId the resource identifier of the drawable to use as a
        +     * divider.
        +     */
        +    public void setDividerDrawable(int resId) {
        +        mDividerDrawable = mContext.getResources().getDrawable(resId);
        +    }
        +
        +    /**
        +     * Controls whether the bottom strips on the tab indicators are drawn or
        +     * not.  The default is to draw them.  If the user specifies a custom
        +     * view for the tab indicators, then the TabHost class calls this method
        +     * to disable drawing of the bottom strips.
        +     * @param drawBottomStrips true if the bottom strips should be drawn.
        +     */
        +    void setDrawBottomStrips(boolean drawBottomStrips) {
        +        mDrawBottomStrips = drawBottomStrips;
        +    }
        +
             @Override
             public void childDrawableStateChanged(View child) {
        -        if (child == getChildAt(mSelectedTab)) {
        +        if (child == getChildTabViewAt(mSelectedTab)) {
                     // To make sure that the bottom strip is redrawn
                     invalidate();
                 }
        @@ -100,7 +161,14 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
             public void dispatchDraw(Canvas canvas) {
                 super.dispatchDraw(canvas);
         
        -        View selectedChild = getChildAt(mSelectedTab);
        +        // If the user specified a custom view for the tab indicators, then
        +        // do not draw the bottom strips.
        +        if (!mDrawBottomStrips) {
        +            // Skip drawing the bottom strips.
        +            return;
        +        }
        +
        +        View selectedChild = getChildTabViewAt(mSelectedTab);
                 
                 mBottomLeftStrip.setState(selectedChild.getDrawableState());
                 mBottomRightStrip.setState(selectedChild.getDrawableState());
        @@ -157,13 +225,13 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
              *  @see #focusCurrentTab
              */
             public void setCurrentTab(int index) {
        -        if (index < 0 || index >= getChildCount()) {
        +        if (index < 0 || index >= getTabCount()) {
                     return;
                 }
         
        -        getChildAt(mSelectedTab).setSelected(false);
        +        getChildTabViewAt(mSelectedTab).setSelected(false);
                 mSelectedTab = index;
        -        getChildAt(mSelectedTab).setSelected(true);
        +        getChildTabViewAt(mSelectedTab).setSelected(true);
                 mStripMoved = true;
             }
             
        @@ -189,17 +257,17 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
                 
                 // change the focus if applicable.
                 if (oldTab != index) {
        -            getChildAt(index).requestFocus();
        +            getChildTabViewAt(index).requestFocus();
                 }
             }
             
             @Override
             public void setEnabled(boolean enabled) {
                 super.setEnabled(enabled);
        -        int count = getChildCount();
        +        int count = getTabCount();
                 
        -        for (int i=0; i 0) {
        +            View divider = new View(mContext);
        +            final LinearLayout.LayoutParams lp = new LayoutParams(
        +                    mDividerDrawable.getIntrinsicWidth(),
        +                    mDividerDrawable.getIntrinsicHeight());
        +            lp.setMargins(0, 0, 0, 0);
        +            divider.setLayoutParams(lp);
        +            divider.setBackgroundDrawable(mDividerDrawable);
        +            super.addView(divider);
        +        }
                 super.addView(child);
         
                 // TODO: detect this via geometry with a tabwidget listener rather
                 // than potentially interfere with the view's listener
        -        child.setOnClickListener(new TabClickListener(getChildCount() - 1));
        +        child.setOnClickListener(new TabClickListener(getTabCount() - 1));
                 child.setOnFocusChangeListener(this);
             }
         
        -
        -
        -
             /**
              * Provides a way for {@link TabHost} to be notified that the user clicked on a tab indicator.
              */
        @@ -238,14 +315,15 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
         
             public void onFocusChange(View v, boolean hasFocus) {
                 if (v == this && hasFocus) {
        -            getChildAt(mSelectedTab).requestFocus();
        +            getChildTabViewAt(mSelectedTab).requestFocus();
                     return;
                 }
                 
                 if (hasFocus) {
                     int i = 0;
        -            while (i < getChildCount()) {
        -                if (getChildAt(i) == v) {
        +            int numTabs = getTabCount();
        +            while (i < numTabs) {
        +                if (getChildTabViewAt(i) == v) {
                             setCurrentTab(i);
                             mSelectionChangedListener.onTabSelectionChanged(i, false);
                             break;
        diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
        index adfc74fbfae2..d8ed4f0e4e86 100644
        --- a/core/java/android/widget/TextView.java
        +++ b/core/java/android/widget/TextView.java
        @@ -16,6 +16,11 @@
         
         package android.widget;
         
        +import com.android.internal.util.FastMath;
        +import com.android.internal.widget.EditableInputConnection;
        +
        +import org.xmlpull.v1.XmlPullParserException;
        +
         import android.content.Context;
         import android.content.Intent;
         import android.content.res.ColorStateList;
        @@ -31,17 +36,17 @@ import android.graphics.Typeface;
         import android.graphics.drawable.Drawable;
         import android.os.Bundle;
         import android.os.Handler;
        +import android.os.Message;
         import android.os.Parcel;
         import android.os.Parcelable;
         import android.os.ResultReceiver;
         import android.os.SystemClock;
        -import android.os.Message;
         import android.text.BoringLayout;
        +import android.text.ClipboardManager;
         import android.text.DynamicLayout;
         import android.text.Editable;
         import android.text.GetChars;
         import android.text.GraphicsOperations;
        -import android.text.ClipboardManager;
         import android.text.InputFilter;
         import android.text.InputType;
         import android.text.Layout;
        @@ -49,9 +54,9 @@ import android.text.ParcelableSpan;
         import android.text.Selection;
         import android.text.SpanWatcher;
         import android.text.Spannable;
        +import android.text.SpannableString;
         import android.text.Spanned;
         import android.text.SpannedString;
        -import android.text.SpannableString;
         import android.text.StaticLayout;
         import android.text.TextPaint;
         import android.text.TextUtils;
        @@ -64,19 +69,18 @@ import android.text.method.KeyListener;
         import android.text.method.LinkMovementMethod;
         import android.text.method.MetaKeyKeyListener;
         import android.text.method.MovementMethod;
        -import android.text.method.TimeKeyListener;
        -
         import android.text.method.PasswordTransformationMethod;
         import android.text.method.SingleLineTransformationMethod;
         import android.text.method.TextKeyListener;
        +import android.text.method.TimeKeyListener;
         import android.text.method.TransformationMethod;
         import android.text.style.ParagraphStyle;
         import android.text.style.URLSpan;
         import android.text.style.UpdateAppearance;
         import android.text.util.Linkify;
         import android.util.AttributeSet;
        -import android.util.Log;
         import android.util.FloatMath;
        +import android.util.Log;
         import android.util.TypedValue;
         import android.view.ContextMenu;
         import android.view.Gravity;
        @@ -89,25 +93,22 @@ import android.view.ViewDebug;
         import android.view.ViewRoot;
         import android.view.ViewTreeObserver;
         import android.view.ViewGroup.LayoutParams;
        +import android.view.accessibility.AccessibilityEvent;
        +import android.view.accessibility.AccessibilityManager;
         import android.view.animation.AnimationUtils;
         import android.view.inputmethod.BaseInputConnection;
         import android.view.inputmethod.CompletionInfo;
        +import android.view.inputmethod.EditorInfo;
         import android.view.inputmethod.ExtractedText;
         import android.view.inputmethod.ExtractedTextRequest;
         import android.view.inputmethod.InputConnection;
         import android.view.inputmethod.InputMethodManager;
        -import android.view.inputmethod.EditorInfo;
         import android.widget.RemoteViews.RemoteView;
         
         import java.io.IOException;
         import java.lang.ref.WeakReference;
         import java.util.ArrayList;
         
        -import com.android.internal.util.FastMath;
        -import com.android.internal.widget.EditableInputConnection;
        -
        -import org.xmlpull.v1.XmlPullParserException;
        -
         /**
          * Displays text to the user and optionally allows them to edit it.  A TextView
          * is a complete text editor, however the basic class is configured to not
        @@ -126,6 +127,8 @@ import org.xmlpull.v1.XmlPullParserException;
          * @attr ref android.R.styleable#TextView_textColor
          * @attr ref android.R.styleable#TextView_textColorHighlight
          * @attr ref android.R.styleable#TextView_textColorHint
        + * @attr ref android.R.styleable#TextView_textAppearance
        + * @attr ref android.R.styleable#TextView_textColorLink
          * @attr ref android.R.styleable#TextView_textSize
          * @attr ref android.R.styleable#TextView_textScaleX
          * @attr ref android.R.styleable#TextView_typeface
        @@ -163,13 +166,22 @@ import org.xmlpull.v1.XmlPullParserException;
          * @attr ref android.R.styleable#TextView_capitalize
          * @attr ref android.R.styleable#TextView_autoText
          * @attr ref android.R.styleable#TextView_editable
        + * @attr ref android.R.styleable#TextView_freezesText
        + * @attr ref android.R.styleable#TextView_ellipsize
          * @attr ref android.R.styleable#TextView_drawableTop
          * @attr ref android.R.styleable#TextView_drawableBottom
          * @attr ref android.R.styleable#TextView_drawableRight
          * @attr ref android.R.styleable#TextView_drawableLeft
        + * @attr ref android.R.styleable#TextView_drawablePadding
          * @attr ref android.R.styleable#TextView_lineSpacingExtra
          * @attr ref android.R.styleable#TextView_lineSpacingMultiplier
          * @attr ref android.R.styleable#TextView_marqueeRepeatLimit
        + * @attr ref android.R.styleable#TextView_inputType
        + * @attr ref android.R.styleable#TextView_imeOptions
        + * @attr ref android.R.styleable#TextView_privateImeOptions
        + * @attr ref android.R.styleable#TextView_imeActionLabel
        + * @attr ref android.R.styleable#TextView_imeActionId
        + * @attr ref android.R.styleable#TextView_editorExtras
          */
         @RemoteView
         public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {
        @@ -404,6 +416,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                 boolean singleLine = false;
                 int maxlength = -1;
                 CharSequence text = "";
        +        CharSequence hint = null;
                 int shadowcolor = 0;
                 float dx = 0, dy = 0, r = 0;
                 boolean password = false;
        @@ -531,7 +544,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                         break;
         
                     case com.android.internal.R.styleable.TextView_hint:
        -                setHint(a.getText(attr));
        +                hint = a.getText(attr);
                         break;
         
                     case com.android.internal.R.styleable.TextView_text:
        @@ -861,6 +874,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                 }
         
                 setText(text, bufferType);
        +        if (hint != null) setHint(hint);
         
                 /*
                  * Views are not normally focusable unless specified to be.
        @@ -1328,9 +1342,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                         } else {
                             // We need to retain the last set padding, so just clear
                             // out all of the fields in the existing structure.
        +                    if (dr.mDrawableLeft != null) dr.mDrawableLeft.setCallback(null);
                             dr.mDrawableLeft = null;
        +                    if (dr.mDrawableTop != null) dr.mDrawableTop.setCallback(null);
                             dr.mDrawableTop = null;
        +                    if (dr.mDrawableRight != null) dr.mDrawableRight.setCallback(null);
                             dr.mDrawableRight = null;
        +                    if (dr.mDrawableBottom != null) dr.mDrawableBottom.setCallback(null);
                             dr.mDrawableBottom = null;
                             dr.mDrawableSizeLeft = dr.mDrawableHeightLeft = 0;
                             dr.mDrawableSizeRight = dr.mDrawableHeightRight = 0;
        @@ -1343,19 +1361,32 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                         mDrawables = dr = new Drawables();
                     }
         
        +            if (dr.mDrawableLeft != left && dr.mDrawableLeft != null) {
        +                dr.mDrawableLeft.setCallback(null);
        +            }
                     dr.mDrawableLeft = left;
        +            if (dr.mDrawableTop != left && dr.mDrawableTop != null) {
        +                dr.mDrawableTop.setCallback(null);
        +            }
                     dr.mDrawableTop = top;
        +            if (dr.mDrawableRight != left && dr.mDrawableRight != null) {
        +                dr.mDrawableRight.setCallback(null);
        +            }
                     dr.mDrawableRight = right;
        +            if (dr.mDrawableBottom != left && dr.mDrawableBottom != null) {
        +                dr.mDrawableBottom.setCallback(null);
        +            }
                     dr.mDrawableBottom = bottom;
         
                     final Rect compoundRect = dr.mCompoundRect;
        -            int[] state = null;
        +            int[] state;
         
                     state = getDrawableState();
         
                     if (left != null) {
                         left.setState(state);
                         left.copyBounds(compoundRect);
        +                left.setCallback(this);
                         dr.mDrawableSizeLeft = compoundRect.width();
                         dr.mDrawableHeightLeft = compoundRect.height();
                     } else {
        @@ -1365,6 +1396,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                     if (right != null) {
                         right.setState(state);
                         right.copyBounds(compoundRect);
        +                right.setCallback(this);
                         dr.mDrawableSizeRight = compoundRect.width();
                         dr.mDrawableHeightRight = compoundRect.height();
                     } else {
        @@ -1374,6 +1406,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                     if (top != null) {
                         top.setState(state);
                         top.copyBounds(compoundRect);
        +                top.setCallback(this);
                         dr.mDrawableSizeTop = compoundRect.height();
                         dr.mDrawableWidthTop = compoundRect.width();
                     } else {
        @@ -1383,6 +1416,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                     if (bottom != null) {
                         bottom.setState(state);
                         bottom.copyBounds(compoundRect);
        +                bottom.setCallback(this);
                         dr.mDrawableSizeBottom = compoundRect.height();
                         dr.mDrawableWidthBottom = compoundRect.width();
                     } else {
        @@ -2785,8 +2819,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                     checkForRelayout();
                 }
         
        -        if (mText.length() == 0)
        +        if (mText.length() == 0) {
                     invalidate();
        +        }
             }
         
             /**
        @@ -3646,12 +3681,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
         
             @Override
             protected boolean isPaddingOffsetRequired() {
        -        return mShadowRadius != 0;
        +        return mShadowRadius != 0 || mDrawables != null;
             }
         
             @Override
             protected int getLeftPaddingOffset() {
        -        return (int) Math.min(0, mShadowDx - mShadowRadius);
        +        return getCompoundPaddingLeft() - mPaddingLeft +
        +                (int) Math.min(0, mShadowDx - mShadowRadius);
             }
         
             @Override
        @@ -3666,7 +3702,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
         
             @Override
             protected int getRightPaddingOffset() {
        -        return (int) Math.max(0, mShadowDx + mShadowRadius);
        +        return -(getCompoundPaddingRight() - mPaddingRight) +
        +                (int) Math.max(0, mShadowDx + mShadowRadius);
             }
         
             @Override
        @@ -3679,6 +3716,54 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                 return verified;
             }
         
        +    @Override
        +    public void invalidateDrawable(Drawable drawable) {
        +        if (verifyDrawable(drawable)) {
        +            final Rect dirty = drawable.getBounds();
        +            int scrollX = mScrollX;
        +            int scrollY = mScrollY;
        +
        +            // IMPORTANT: The coordinates below are based on the coordinates computed
        +            // for each compound drawable in onDraw(). Make sure to update each section
        +            // accordingly.
        +            final TextView.Drawables drawables = mDrawables;
        +            if (drawables != null) {
        +                if (drawable == drawables.mDrawableLeft) {
        +                    final int compoundPaddingTop = getCompoundPaddingTop();
        +                    final int compoundPaddingBottom = getCompoundPaddingBottom();
        +                    final int vspace = mBottom - mTop - compoundPaddingBottom - compoundPaddingTop;
        +
        +                    scrollX += mPaddingLeft;
        +                    scrollY += compoundPaddingTop + (vspace - drawables.mDrawableHeightLeft) / 2;
        +                } else if (drawable == drawables.mDrawableRight) {
        +                    final int compoundPaddingTop = getCompoundPaddingTop();
        +                    final int compoundPaddingBottom = getCompoundPaddingBottom();
        +                    final int vspace = mBottom - mTop - compoundPaddingBottom - compoundPaddingTop;
        +
        +                    scrollX += (mRight - mLeft - mPaddingRight - drawables.mDrawableSizeRight);
        +                    scrollY += compoundPaddingTop + (vspace - drawables.mDrawableHeightRight) / 2;
        +                } else if (drawable == drawables.mDrawableTop) {
        +                    final int compoundPaddingLeft = getCompoundPaddingLeft();
        +                    final int compoundPaddingRight = getCompoundPaddingRight();
        +                    final int hspace = mRight - mLeft - compoundPaddingRight - compoundPaddingLeft;
        +
        +                    scrollX += compoundPaddingLeft + (hspace - drawables.mDrawableWidthTop) / 2;
        +                    scrollY += mPaddingTop;
        +                } else if (drawable == drawables.mDrawableBottom) {
        +                    final int compoundPaddingLeft = getCompoundPaddingLeft();
        +                    final int compoundPaddingRight = getCompoundPaddingRight();
        +                    final int hspace = mRight - mLeft - compoundPaddingRight - compoundPaddingLeft;
        +
        +                    scrollX += compoundPaddingLeft + (hspace - drawables.mDrawableWidthBottom) / 2;
        +                    scrollY += (mBottom - mTop - mPaddingBottom - drawables.mDrawableSizeBottom);
        +                }
        +            }
        +
        +            invalidate(dirty.left + scrollX, dirty.top + scrollY,
        +                    dirty.right + scrollX, dirty.bottom + scrollY);
        +        }
        +    }
        +
             @Override
             protected void onDraw(Canvas canvas) {
                 restartMarqueeIfNeeded();
        @@ -3707,6 +3792,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                     int vspace = bottom - top - compoundPaddingBottom - compoundPaddingTop;
                     int hspace = right - left - compoundPaddingRight - compoundPaddingLeft;
         
        +            // IMPORTANT: The coordinates computed are also used in invalidateDrawable()
        +            // Make sure to update invalidateDrawable() when changing this code.
                     if (dr.mDrawableLeft != null) {
                         canvas.save();
                         canvas.translate(scrollX + mPaddingLeft,
        @@ -3716,6 +3803,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                         canvas.restore();
                     }
         
        +            // IMPORTANT: The coordinates computed are also used in invalidateDrawable()
        +            // Make sure to update invalidateDrawable() when changing this code.
                     if (dr.mDrawableRight != null) {
                         canvas.save();
                         canvas.translate(scrollX + right - left - mPaddingRight - dr.mDrawableSizeRight,
        @@ -3724,6 +3813,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                         canvas.restore();
                     }
         
        +            // IMPORTANT: The coordinates computed are also used in invalidateDrawable()
        +            // Make sure to update invalidateDrawable() when changing this code.
                     if (dr.mDrawableTop != null) {
                         canvas.save();
                         canvas.translate(scrollX + compoundPaddingLeft + (hspace - dr.mDrawableWidthTop) / 2,
        @@ -3732,6 +3823,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                         canvas.restore();
                     }
         
        +            // IMPORTANT: The coordinates computed are also used in invalidateDrawable()
        +            // Make sure to update invalidateDrawable() when changing this code.
                     if (dr.mDrawableBottom != null) {
                         canvas.save();
                         canvas.translate(scrollX + compoundPaddingLeft +
        @@ -4714,10 +4807,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                         alignment = Layout.Alignment.ALIGN_NORMAL;
                 }
         
        +        boolean shouldEllipsize = mEllipsize != null && mInput == null;
        +
                 if (mText instanceof Spannable) {
                     mLayout = new DynamicLayout(mText, mTransformed, mTextPaint, w,
                             alignment, mSpacingMult,
        -                    mSpacingAdd, mIncludePad, mEllipsize,
        +                    mSpacingAdd, mIncludePad, mInput == null ? mEllipsize : null,
                             ellipsisWidth);
                 } else {
                     if (boring == UNKNOWN_BORING) {
        @@ -4744,7 +4839,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                             // Log.e("aaa", "Boring: " + mTransformed);
         
                             mSavedLayout = (BoringLayout) mLayout;
        -                } else if (mEllipsize != null && boring.width <= w) {
        +                } else if (shouldEllipsize && boring.width <= w) {
                             if (mSavedLayout != null) {
                                 mLayout = mSavedLayout.
                                         replaceOrMake(mTransformed, mTextPaint,
        @@ -4757,7 +4852,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                                         boring, mIncludePad, mEllipsize,
                                         ellipsisWidth);
                             }
        -                } else if (mEllipsize != null) {
        +                } else if (shouldEllipsize) {
                             mLayout = new StaticLayout(mTransformed,
                                         0, mTransformed.length(),
                                         mTextPaint, w, alignment, mSpacingMult,
        @@ -4769,7 +4864,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                                     mIncludePad);
                             // Log.e("aaa", "Boring but wide: " + mTransformed);
                         }
        -            } else if (mEllipsize != null) {
        +            } else if (shouldEllipsize) {
                         mLayout = new StaticLayout(mTransformed,
                                     0, mTransformed.length(),
                                     mTextPaint, w, alignment, mSpacingMult,
        @@ -4782,9 +4877,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                     }
                 }
         
        +        shouldEllipsize = mEllipsize != null;
                 mHintLayout = null;
         
                 if (mHint != null) {
        +            if (shouldEllipsize) hintWidth = w;
        +
                     if (hintBoring == UNKNOWN_BORING) {
                         hintBoring = BoringLayout.isBoring(mHint, mTextPaint,
                                                            mHintBoring);
        @@ -4794,24 +4892,50 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                     }
         
                     if (hintBoring != null) {
        -                if (hintBoring.width <= hintWidth) {
        +                if (hintBoring.width <= hintWidth &&
        +                    (!shouldEllipsize || hintBoring.width <= ellipsisWidth)) {
                             if (mSavedHintLayout != null) {
                                 mHintLayout = mSavedHintLayout.
                                         replaceOrMake(mHint, mTextPaint,
        -                                hintWidth, alignment, mSpacingMult,
        -                                mSpacingAdd, hintBoring, mIncludePad);
        +                                hintWidth, alignment, mSpacingMult, mSpacingAdd,
        +                                hintBoring, mIncludePad);
                             } else {
                                 mHintLayout = BoringLayout.make(mHint, mTextPaint,
        -                                hintWidth, alignment, mSpacingMult,
        -                                mSpacingAdd, hintBoring, mIncludePad);
        +                                hintWidth, alignment, mSpacingMult, mSpacingAdd,
        +                                hintBoring, mIncludePad);
                             }
         
                             mSavedHintLayout = (BoringLayout) mHintLayout;
        +                } else if (shouldEllipsize && hintBoring.width <= hintWidth) {
        +                    if (mSavedHintLayout != null) {
        +                        mHintLayout = mSavedHintLayout.
        +                                replaceOrMake(mHint, mTextPaint,
        +                                hintWidth, alignment, mSpacingMult, mSpacingAdd,
        +                                hintBoring, mIncludePad, mEllipsize,
        +                                ellipsisWidth);
        +                    } else {
        +                        mHintLayout = BoringLayout.make(mHint, mTextPaint,
        +                                hintWidth, alignment, mSpacingMult, mSpacingAdd,
        +                                hintBoring, mIncludePad, mEllipsize,
        +                                ellipsisWidth);
        +                    }
        +                } else if (shouldEllipsize) {
        +                    mHintLayout = new StaticLayout(mHint,
        +                                0, mHint.length(),
        +                                mTextPaint, hintWidth, alignment, mSpacingMult,
        +                                mSpacingAdd, mIncludePad, mEllipsize,
        +                                ellipsisWidth);
                         } else {
                             mHintLayout = new StaticLayout(mHint, mTextPaint,
                                     hintWidth, alignment, mSpacingMult, mSpacingAdd,
                                     mIncludePad);
                         }
        +            } else if (shouldEllipsize) {
        +                mHintLayout = new StaticLayout(mHint,
        +                            0, mHint.length(),
        +                            mTextPaint, hintWidth, alignment, mSpacingMult,
        +                            mSpacingAdd, mIncludePad, mEllipsize,
        +                            ellipsisWidth);
                     } else {
                         mHintLayout = new StaticLayout(mHint, mTextPaint,
                                 hintWidth, alignment, mSpacingMult, mSpacingAdd,
        @@ -4895,8 +5019,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                 }
             }
         
        -    private static final BoringLayout.Metrics UNKNOWN_BORING =
        -                                                new BoringLayout.Metrics();
        +    private static final BoringLayout.Metrics UNKNOWN_BORING = new BoringLayout.Metrics();
         
             @Override
             protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        @@ -4923,8 +5046,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                     }
         
                     if (des < 0) {
        -                boring = BoringLayout.isBoring(mTransformed, mTextPaint,
        -                                               mBoring);
        +                boring = BoringLayout.isBoring(mTransformed, mTextPaint, mBoring);
                         if (boring != null) {
                             mBoring = boring;
                         }
        @@ -4934,8 +5056,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
         
                     if (boring == null || boring == UNKNOWN_BORING) {
                         if (des < 0) {
        -                    des = (int) FloatMath.ceil(Layout.
        -                                    getDesiredWidth(mTransformed, mTextPaint));
        +                    des = (int) FloatMath.ceil(Layout.getDesiredWidth(mTransformed, mTextPaint));
                         }
         
                         width = des;
        @@ -4953,13 +5074,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                         int hintDes = -1;
                         int hintWidth;
         
        -                if (mHintLayout != null) {
        +                if (mHintLayout != null && mEllipsize == null) {
                             hintDes = desired(mHintLayout);
                         }
         
                         if (hintDes < 0) {
        -                    hintBoring = BoringLayout.isBoring(mHint, mTextPaint,
        -                                                       mHintBoring);
        +                    hintBoring = BoringLayout.isBoring(mHint, mTextPaint, mHintBoring);
                             if (hintBoring != null) {
                                 mHintBoring = hintBoring;
                             }
        @@ -4967,8 +5087,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
         
                         if (hintBoring == null || hintBoring == UNKNOWN_BORING) {
                             if (hintDes < 0) {
        -                        hintDes = (int) FloatMath.ceil(Layout.
        -                                        getDesiredWidth(mHint, mTextPaint));
        +                        hintDes = (int) FloatMath.ceil(
        +                                Layout.getDesiredWidth(mHint, mTextPaint));
                             }
         
                             hintWidth = hintDes;
        @@ -5014,20 +5134,18 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
         
                 if (mLayout == null) {
                     makeNewLayout(want, hintWant, boring, hintBoring,
        -                          width - getCompoundPaddingLeft() - getCompoundPaddingRight(),
        -                          false);
        +                          width - getCompoundPaddingLeft() - getCompoundPaddingRight(), false);
                 } else if ((mLayout.getWidth() != want) || (hintWidth != hintWant) ||
                            (mLayout.getEllipsizedWidth() !=
                                 width - getCompoundPaddingLeft() - getCompoundPaddingRight())) {
                     if (mHint == null && mEllipsize == null &&
                             want > mLayout.getWidth() &&
                             (mLayout instanceof BoringLayout ||
        -                        (fromexisting && des >= 0 && des <= want))) {
        +                            (fromexisting && des >= 0 && des <= want))) {
                         mLayout.increaseWidthTo(want);
                     } else {
                         makeNewLayout(want, hintWant, boring, hintBoring,
        -                              width - getCompoundPaddingLeft() - getCompoundPaddingRight(),
        -                              false);
        +                              width - getCompoundPaddingLeft() - getCompoundPaddingRight(), false);
                     }
                 } else {
                     // Width has not changed.
        @@ -5048,11 +5166,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                     }
                 }
         
        -        int unpaddedHeight = height - getCompoundPaddingTop() -
        -                                getCompoundPaddingBottom();
        +        int unpaddedHeight = height - getCompoundPaddingTop() - getCompoundPaddingBottom();
                 if (mMaxMode == LINES && mLayout.getLineCount() > mMaximum) {
        -            unpaddedHeight = Math.min(unpaddedHeight,
        -                                      mLayout.getLineTop(mMaximum));
        +            unpaddedHeight = Math.min(unpaddedHeight, mLayout.getLineTop(mMaximum));
                 }
         
                 /*
        @@ -5071,8 +5187,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
             }
         
             private int getDesiredHeight() {
        -        return Math.max(getDesiredHeight(mLayout, true),
        -                        getDesiredHeight(mHintLayout, false));
        +        return Math.max(
        +                getDesiredHeight(mLayout, true),
        +                getDesiredHeight(mHintLayout, mEllipsize != null));
             }
         
             private int getDesiredHeight(Layout layout, boolean cap) {
        @@ -5715,6 +5832,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
             }
         
             private void startMarquee() {
        +        // Do not ellipsize EditText
        +        if (mInput != null) return;
        +
                 if (compressText(getWidth() - getCompoundPaddingLeft() - getCompoundPaddingRight())) {
                     return;
                 }
        @@ -6129,10 +6249,18 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
         
             private class ChangeWatcher
             implements TextWatcher, SpanWatcher {
        +
        +        private CharSequence mBeforeText;
        +
                 public void beforeTextChanged(CharSequence buffer, int start,
                                               int before, int after) {
                     if (DEBUG_EXTRACT) Log.v(TAG, "beforeTextChanged start=" + start
                             + " before=" + before + " after=" + after + ": " + buffer);
        +
        +            if (AccessibilityManager.getInstance(mContext).isEnabled()) {
        +                mBeforeText = buffer.toString();
        +            }
        +
                     TextView.this.sendBeforeTextChanged(buffer, start, before, after);
                 }
         
        @@ -6141,6 +6269,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                     if (DEBUG_EXTRACT) Log.v(TAG, "onTextChanged start=" + start
                             + " before=" + before + " after=" + after + ": " + buffer);
                     TextView.this.handleTextChanged(buffer, start, before, after);
        +
        +            if (AccessibilityManager.getInstance(mContext).isEnabled() &&
        +                    (isFocused() || isSelected() &&
        +                    isShown())) {
        +                sendAccessibilityEventTypeViewTextChanged(mBeforeText, start, before, after);
        +                mBeforeText = null;
        +            }
                 }
         
                 public void afterTextChanged(Editable buffer) {
        @@ -6336,6 +6471,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                 
                 protected void onReceiveResult(int resultCode, Bundle resultData) {
                     if (resultCode != InputMethodManager.RESULT_SHOWN) {
        +                final int len = mText.length();
        +                if (mNewStart > len) {
        +                    mNewStart = len;
        +                }
        +                if (mNewEnd > len) {
        +                    mNewEnd = len;
        +                }
                         Selection.setSelection((Spannable)mText, mNewStart, mNewEnd);
                     }
                 }
        @@ -6525,9 +6667,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                     } else if (getLineCount() == 1) {
                         switch (mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
                             case Gravity.LEFT:
        -                        return (mLayout.getLineRight(0) - mScrollX - (mRight - mLeft) -
        -                                getCompoundPaddingLeft() - getCompoundPaddingRight()) /
        -                                getHorizontalFadingEdgeLength();
        +                        final int textWidth = (mRight - mLeft) - getCompoundPaddingLeft() -
        +                                getCompoundPaddingRight();
        +                        final float lineWidth = mLayout.getLineWidth(0);
        +                        return (lineWidth - textWidth) / getHorizontalFadingEdgeLength();
                             case Gravity.RIGHT:
                                 return 0.0f;
                             case Gravity.CENTER_HORIZONTAL:
        @@ -6775,6 +6918,40 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                 return TextUtils.substring(mTransformed, start, end);
             }
         
        +    @Override
        +    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
        +        boolean isPassword =
        +            (mInputType & (EditorInfo.TYPE_MASK_CLASS | EditorInfo.TYPE_MASK_VARIATION)) ==
        +            (EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_PASSWORD);
        +
        +        if (!isPassword) {
        +            CharSequence text = getText();
        +            if (TextUtils.isEmpty(text)) {
        +                text = getHint();
        +            }
        +            if (!TextUtils.isEmpty(text)) {
        +                if (text.length() > AccessibilityEvent.MAX_TEXT_LENGTH) {
        +                    text = text.subSequence(0, AccessibilityEvent.MAX_TEXT_LENGTH + 1);
        +                }
        +                event.getText().add(text);
        +            }
        +        } else {
        +            event.setPassword(isPassword);
        +        }
        +        return false;
        +    }
        +
        +    void sendAccessibilityEventTypeViewTextChanged(CharSequence beforeText,
        +            int fromIndex, int removedCount, int addedCount) {
        +        AccessibilityEvent event =
        +            AccessibilityEvent.obtain(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
        +        event.setFromIndex(fromIndex);
        +        event.setRemovedCount(removedCount);
        +        event.setAddedCount(addedCount);
        +        event.setBeforeText(beforeText);
        +        sendAccessibilityEventUnchecked(event);
        +    }
        +
             @Override
             protected void onCreateContextMenu(ContextMenu menu) {
                 super.onCreateContextMenu(menu);
        diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java
        index ff747878fba0..670692f552df 100644
        --- a/core/java/android/widget/Toast.java
        +++ b/core/java/android/widget/Toast.java
        @@ -21,8 +21,8 @@ import android.app.ITransientNotification;
         import android.content.Context;
         import android.content.res.Resources;
         import android.graphics.PixelFormat;
        -import android.os.RemoteException;
         import android.os.Handler;
        +import android.os.RemoteException;
         import android.os.ServiceManager;
         import android.util.Log;
         import android.view.Gravity;
        @@ -278,7 +278,7 @@ public class Toast {
                 }
                 tv.setText(s);
             }
        -    
        +
             // =======================================================================================
             // All the gunk below is the interaction with the Notification Service, which handles
             // the proper ordering of these system-wide.
        @@ -373,6 +373,7 @@ public class Toast {
                                     TAG, "REMOVE! " + mView + " in " + this);
                             mWM.removeView(mView);
                         }
        +
                         mView = null;
                     }
                 }
        diff --git a/core/java/android/widget/VideoView.java b/core/java/android/widget/VideoView.java
        index 6d3a2d3602c0..20dd8a6bed91 100644
        --- a/core/java/android/widget/VideoView.java
        +++ b/core/java/android/widget/VideoView.java
        @@ -55,6 +55,7 @@ public class VideoView extends SurfaceView implements MediaPlayerControl {
             private SurfaceHolder mSurfaceHolder = null;
             private MediaPlayer mMediaPlayer = null;
             private boolean     mIsPrepared;
        +    private boolean     mIsPlaybackCompleted;
             private int         mVideoWidth;
             private int         mVideoHeight;
             private int         mSurfaceWidth;
        @@ -260,7 +261,7 @@ public class VideoView extends SurfaceView implements MediaPlayerControl {
                                 mSeekWhenPrepared = 0;
                             }
                             if (mStartWhenPrepared) {
        -                        mMediaPlayer.start();
        +                        start();
                                 mStartWhenPrepared = false;
                                 if (mMediaController != null) {
                                     mMediaController.show();
        @@ -281,7 +282,7 @@ public class VideoView extends SurfaceView implements MediaPlayerControl {
                             mSeekWhenPrepared = 0;
                         }
                         if (mStartWhenPrepared) {
        -                    mMediaPlayer.start();
        +                    start();
                             mStartWhenPrepared = false;
                         }
                     }
        @@ -291,6 +292,7 @@ public class VideoView extends SurfaceView implements MediaPlayerControl {
             private MediaPlayer.OnCompletionListener mCompletionListener =
                 new MediaPlayer.OnCompletionListener() {
                 public void onCompletion(MediaPlayer mp) {
        +            mIsPlaybackCompleted = true;
                     if (mMediaController != null) {
                         mMediaController.hide();
                     }
        @@ -405,7 +407,9 @@ public class VideoView extends SurfaceView implements MediaPlayerControl {
                             mMediaPlayer.seekTo(mSeekWhenPrepared);
                             mSeekWhenPrepared = 0;
                         }
        -                mMediaPlayer.start();
        +                if (!mIsPlaybackCompleted) {
        +                    start();
        +                } 
                         if (mMediaController != null) {
                             mMediaController.show();
                         }
        @@ -490,6 +494,7 @@ public class VideoView extends SurfaceView implements MediaPlayerControl {
             }
             
             public void start() {
        +        mIsPlaybackCompleted = false;
                 if (mMediaPlayer != null && mIsPrepared) {
                         mMediaPlayer.start();
                         mStartWhenPrepared = false;
        diff --git a/core/java/android/widget/ViewSwitcher.java b/core/java/android/widget/ViewSwitcher.java
        index f4f23a8f655b..0dcaf954279e 100644
        --- a/core/java/android/widget/ViewSwitcher.java
        +++ b/core/java/android/widget/ViewSwitcher.java
        @@ -16,8 +16,6 @@
         
         package android.widget;
         
        -import java.util.Map;
        -
         import android.content.Context;
         import android.util.AttributeSet;
         import android.view.View;
        diff --git a/core/java/android/widget/ZoomButtonsController.java b/core/java/android/widget/ZoomButtonsController.java
        index d9fb78b81d38..bae4dad5c01f 100644
        --- a/core/java/android/widget/ZoomButtonsController.java
        +++ b/core/java/android/widget/ZoomButtonsController.java
        @@ -81,27 +81,27 @@ public class ZoomButtonsController implements View.OnTouchListener {
             private static final int ZOOM_CONTROLS_TOUCH_PADDING = 20;
             private int mTouchPaddingScaledSq;
         
        -    private Context mContext;
        -    private WindowManager mWindowManager;
        +    private final Context mContext;
        +    private final WindowManager mWindowManager;
             private boolean mAutoDismissControls = true;
         
             /**
              * The view that is being zoomed by this zoom controller.
              */
        -    private View mOwnerView;
        +    private final View mOwnerView;
         
             /**
              * The location of the owner view on the screen. This is recalculated
              * each time the zoom controller is shown.
              */
        -    private int[] mOwnerViewRawLocation = new int[2];
        +    private final int[] mOwnerViewRawLocation = new int[2];
         
             /**
              * The container that is added as a window.
              */
        -    private FrameLayout mContainer;
        +    private final FrameLayout mContainer;
             private LayoutParams mContainerLayoutParams;
        -    private int[] mContainerRawLocation = new int[2];
        +    private final int[] mContainerRawLocation = new int[2];
         
             private ZoomControls mControls;
         
        @@ -113,7 +113,7 @@ public class ZoomButtonsController implements View.OnTouchListener {
             /**
              * The {@link #mTouchTargetView}'s location in window, set on touch down.
              */
        -    private int[] mTouchTargetWindowLocation = new int[2];
        +    private final int[] mTouchTargetWindowLocation = new int[2];
         
             /**
              * If the zoom controller is dismissed but the user is still in a touch
        @@ -128,8 +128,8 @@ public class ZoomButtonsController implements View.OnTouchListener {
             /** Whether the container has been added to the window manager. */
             private boolean mIsVisible;
         
        -    private Rect mTempRect = new Rect();
        -    private int[] mTempIntArray = new int[2];
        +    private final Rect mTempRect = new Rect();
        +    private final int[] mTempIntArray = new int[2];
         
             private OnZoomListener mCallback;
         
        @@ -141,13 +141,13 @@ public class ZoomButtonsController implements View.OnTouchListener {
              */
             private Runnable mPostedVisibleInitializer;
         
        -    private IntentFilter mConfigurationChangedFilter =
        +    private final IntentFilter mConfigurationChangedFilter =
                     new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED);
         
             /**
              * Needed to reposition the zoom controls after configuration changes.
              */
        -    private BroadcastReceiver mConfigurationChangedReceiver = new BroadcastReceiver() {
        +    private final BroadcastReceiver mConfigurationChangedReceiver = new BroadcastReceiver() {
                 @Override
                 public void onReceive(Context context, Intent intent) {
                     if (!mIsVisible) return;
        @@ -167,7 +167,7 @@ public class ZoomButtonsController implements View.OnTouchListener {
              */
             private static final int MSG_POST_SET_VISIBLE = 4;
         
        -    private Handler mHandler = new Handler() {
        +    private final Handler mHandler = new Handler() {
                 @Override
                 public void handleMessage(Message msg) {
                     switch (msg.what) {
        @@ -444,6 +444,9 @@ public class ZoomButtonsController implements View.OnTouchListener {
             }
         
             private void refreshPositioningVariables() {
        +        // if the mOwnerView is detached from window then skip.
        +        if (mOwnerView.getWindowToken() == null) return;
        +
                 // Position the zoom controls on the bottom of the owner view.
                 int ownerHeight = mOwnerView.getHeight();
                 int ownerWidth = mOwnerView.getWidth();
        diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
        index e1ff2a52062f..4bac5933d7ed 100644
        --- a/core/java/com/android/internal/app/IBatteryStats.aidl
        +++ b/core/java/com/android/internal/app/IBatteryStats.aidl
        @@ -18,6 +18,8 @@ package com.android.internal.app;
         
         import com.android.internal.os.BatteryStatsImpl;
         
        +import android.telephony.SignalStrength;
        +
         interface IBatteryStats {
             byte[] getStatistics();
             void noteStartWakelock(int uid, String name, int type);
        @@ -33,8 +35,9 @@ interface IBatteryStats {
             void noteUserActivity(int uid, int event);
             void notePhoneOn();
             void notePhoneOff();
        -    void notePhoneSignalStrength(int asu);
        +    void notePhoneSignalStrength(in SignalStrength signalStrength);
             void notePhoneDataConnectionState(int dataType, boolean hasData);
        +    void noteAirplaneMode(boolean isAirplaneMode);
             void noteWifiOn(int uid);
             void noteWifiOff(int uid);
             void noteWifiRunning();
        diff --git a/core/java/com/android/internal/backup/IBackupTransport.aidl b/core/java/com/android/internal/backup/IBackupTransport.aidl
        index ce39768137e2..af06965ae123 100644
        --- a/core/java/com/android/internal/backup/IBackupTransport.aidl
        +++ b/core/java/com/android/internal/backup/IBackupTransport.aidl
        @@ -16,6 +16,8 @@
         
         package com.android.internal.backup;
         
        +import android.backup.RestoreSet;
        +import android.content.pm.PackageInfo;
         import android.os.ParcelFileDescriptor;
         
         /** {@hide} */
        @@ -25,7 +27,7 @@ interface IBackupTransport {
             1. set up the connection to the destination
                 - set up encryption
                 - for Google cloud, log in using the user's gaia credential or whatever
        -        - for sd, spin off the backup transport and establish communication with it
        +        - for adb, just set up the all-in-one destination file
             2. send each app's backup transaction
                 - parse the data file for key/value pointers etc
                 - send key/blobsize set to the Google cloud, get back quota ok/rejected response
        @@ -36,34 +38,112 @@ interface IBackupTransport {
                 - sd target streams raw data into encryption envelope then to sd?
             3. shut down connection to destination
                 - cloud: tear down connection etc
        -        - sd: close the file and shut down the writer proxy
        +        - adb: close the file
         */
             /**
        -     * Establish a connection to the back-end data repository, if necessary.  If the transport
        -     * needs to initialize state that is not tied to individual applications' backup operations,
        -     * this is where it should be done.
        +     * Ask the transport where, on local device storage, to keep backup state blobs.
        +     * This is per-transport so that mock transports used for testing can coexist with
        +     * "live" backup services without interfering with the live bookkeeping.  The
        +     * returned string should be a name that is expected to be unambiguous among all
        +     * available backup transports; the name of the class implementing the transport
        +     * is a good choice.
              *
        -     * @return Zero on success; a nonzero error code on failure.
        +     * @return A unique name, suitable for use as a file or directory name, that the
        +     *         Backup Manager could use to disambiguate state files associated with
        +     *         different backup transports.
              */
        -    int startSession();
        +    String transportDirName();
         
             /**
        -     * Send one application's data to the backup destination.
        +     * Verify that this is a suitable time for a backup pass.  This should return zero
        +     * if a backup is reasonable right now, some positive value otherwise.  This method
        +     * will be called outside of the {@link #startSession}/{@link #endSession} pair.
              *
        -     * @param packageName The identity of the application whose data is being backed up.
        +     * 

        If this is not a suitable time for a backup, the transport should return a + * backoff delay, in milliseconds, after which the Backup Manager should try again. + * + * @return Zero if this is a suitable time for a backup pass, or a positive time delay + * in milliseconds to suggest deferring the backup pass for a while. + */ + long requestBackupTime(); + + /** + * Send one application's data to the backup destination. The transport may send + * the data immediately, or may buffer it. After this is called, {@link #finishBackup} + * must be called to ensure the data is sent and recorded successfully. + * + * @param packageInfo The identity of the application whose data is being backed up. + * This specifically includes the signature list for the package. * @param data The data stream that resulted from invoking the application's - * BackupService.doBackup() method. This may be a pipe rather than a - * file on persistent media, so it may not be seekable. - * @return Zero on success; a nonzero error code on failure. + * BackupService.doBackup() method. This may be a pipe rather than a file on + * persistent media, so it may not be seekable. + * @return false if errors occurred (the backup should be aborted and rescheduled), + * true if everything is OK so far (but {@link #finishBackup} must be called). + */ + boolean performBackup(in PackageInfo packageInfo, in ParcelFileDescriptor inFd); + + /** + * Erase the give application's data from the backup destination. This clears + * out the given package's data from the current backup set, making it as though + * the app had never yet been backed up. After this is called, {@link finishBackup} + * must be called to ensure that the operation is recorded successfully. + * + * @return false if errors occurred (the backup should be aborted and rescheduled), + * true if everything is OK so far (but {@link #finishBackup} must be called). + */ + boolean clearBackupData(in PackageInfo packageInfo); + + /** + * Finish sending application data to the backup destination. This must be + * called after {@link #performBackup} or {@link clearBackupData} to ensure that + * all data is sent. Only when this method returns true can a backup be assumed + * to have succeeded. + * + * @return false if errors occurred (the backup should be aborted and rescheduled), + * true if everything is OK. */ - int performBackup(String packageName, in ParcelFileDescriptor data); + boolean finishBackup(); /** - * Terminate the backup session, closing files, freeing memory, and cleaning up whatever - * other state the transport required. + * Get the set of backups currently available over this transport. * - * @return Zero on success; a nonzero error code on failure. Even on failure, the session - * is torn down and must be restarted if another backup is attempted. + * @return Descriptions of the set of restore images available for this device, + * or null if an error occurred (the attempt should be rescheduled). + **/ + RestoreSet[] getAvailableRestoreSets(); + + /** + * Start restoring application data from backup. After calling this function, + * alternate calls to {@link #nextRestorePackage} and {@link #nextRestoreData} + * to walk through the actual application data. + * + * @param token A backup token as returned by {@link #getAvailableRestoreSets}. + * @param packages List of applications to restore (if data is available). + * Application data will be restored in the order given. + * @return false if errors occurred (the restore should be aborted and rescheduled), + * true if everything is OK so far (go ahead and call {@link #nextRestorePackage}). + */ + boolean startRestore(long token, in PackageInfo[] packages); + + /** + * Get the package name of the next application with data in the backup store. + * @return The name of one of the packages supplied to {@link #startRestore}, + * or "" (the empty string) if no more backup data is available, + * or null if an error occurred (the restore should be aborted and rescheduled). + */ + String nextRestorePackage(); + + /** + * Get the data for the application returned by {@link #nextRestorePackage}. + * @param data An open, writable file into which the backup data should be stored. + * @return false if errors occurred (the restore should be aborted and rescheduled), + * true if everything is OK so far (go ahead and call {@link #nextRestorePackage}). + */ + boolean getRestoreData(in ParcelFileDescriptor outFd); + + /** + * End a restore session (aborting any in-process data transfer as necessary), + * freeing any resources and connections used during the restore process. */ - int endSession(); + void finishRestore(); } diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java new file mode 100644 index 000000000000..2facce2ed190 --- /dev/null +++ b/core/java/com/android/internal/backup/LocalTransport.java @@ -0,0 +1,200 @@ +package com.android.internal.backup; + +import android.backup.BackupDataInput; +import android.backup.BackupDataOutput; +import android.backup.RestoreSet; +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.os.Environment; +import android.os.ParcelFileDescriptor; +import android.os.RemoteException; +import android.util.Log; + +import org.bouncycastle.util.encoders.Base64; + +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; + +/** + * Backup transport for stashing stuff into a known location on disk, and + * later restoring from there. For testing only. + */ + +public class LocalTransport extends IBackupTransport.Stub { + private static final String TAG = "LocalTransport"; + private static final boolean DEBUG = true; + + private static final String TRANSPORT_DIR_NAME + = "com.android.internal.backup.LocalTransport"; + + private Context mContext; + private PackageManager mPackageManager; + private File mDataDir = new File(Environment.getDownloadCacheDirectory(), "backup"); + private PackageInfo[] mRestorePackages = null; + private int mRestorePackage = -1; // Index into mRestorePackages + + + public LocalTransport(Context context) { + if (DEBUG) Log.v(TAG, "Transport constructed"); + mContext = context; + mPackageManager = context.getPackageManager(); + } + + + public String transportDirName() throws RemoteException { + return TRANSPORT_DIR_NAME; + } + + public long requestBackupTime() throws RemoteException { + // any time is a good time for local backup + return 0; + } + + public boolean performBackup(PackageInfo packageInfo, ParcelFileDescriptor data) + throws RemoteException { + if (DEBUG) Log.v(TAG, "performBackup() pkg=" + packageInfo.packageName); + + File packageDir = new File(mDataDir, packageInfo.packageName); + packageDir.mkdirs(); + + // Each 'record' in the restore set is kept in its own file, named by + // the record key. Wind through the data file, extracting individual + // record operations and building a set of all the updates to apply + // in this update. + BackupDataInput changeSet = new BackupDataInput(data.getFileDescriptor()); + try { + int bufSize = 512; + byte[] buf = new byte[bufSize]; + while (changeSet.readNextHeader()) { + String key = changeSet.getKey(); + String base64Key = new String(Base64.encode(key.getBytes())); + File entityFile = new File(packageDir, base64Key); + + int dataSize = changeSet.getDataSize(); + + if (DEBUG) Log.v(TAG, "Got change set key=" + key + " size=" + dataSize + + " key64=" + base64Key); + + if (dataSize >= 0) { + FileOutputStream entity = new FileOutputStream(entityFile); + + if (dataSize > bufSize) { + bufSize = dataSize; + buf = new byte[bufSize]; + } + changeSet.readEntityData(buf, 0, dataSize); + if (DEBUG) Log.v(TAG, " data size " + dataSize); + + try { + entity.write(buf, 0, dataSize); + } catch (IOException e) { + Log.e(TAG, "Unable to update key file " + entityFile.getAbsolutePath()); + return false; + } finally { + entity.close(); + } + } else { + entityFile.delete(); + } + } + return true; + } catch (IOException e) { + // oops, something went wrong. abort the operation and return error. + Log.v(TAG, "Exception reading backup input:", e); + return false; + } + } + + public boolean clearBackupData(PackageInfo packageInfo) { + if (DEBUG) Log.v(TAG, "clearBackupData() pkg=" + packageInfo.packageName); + + File packageDir = new File(mDataDir, packageInfo.packageName); + for (File f : packageDir.listFiles()) { + f.delete(); + } + packageDir.delete(); + return true; + } + + public boolean finishBackup() throws RemoteException { + if (DEBUG) Log.v(TAG, "finishBackup()"); + return true; + } + + // Restore handling + public RestoreSet[] getAvailableRestoreSets() throws android.os.RemoteException { + // one hardcoded restore set + RestoreSet set = new RestoreSet("Local disk image", "flash", 0); + RestoreSet[] array = { set }; + return array; + } + + public boolean startRestore(long token, PackageInfo[] packages) { + if (DEBUG) Log.v(TAG, "start restore " + token); + mRestorePackages = packages; + mRestorePackage = -1; + return true; + } + + public String nextRestorePackage() { + if (mRestorePackages == null) throw new IllegalStateException("startRestore not called"); + while (++mRestorePackage < mRestorePackages.length) { + String name = mRestorePackages[mRestorePackage].packageName; + if (new File(mDataDir, name).isDirectory()) { + if (DEBUG) Log.v(TAG, " nextRestorePackage() = " + name); + return name; + } + } + + if (DEBUG) Log.v(TAG, " no more packages to restore"); + return ""; + } + + public boolean getRestoreData(ParcelFileDescriptor outFd) { + if (mRestorePackages == null) throw new IllegalStateException("startRestore not called"); + if (mRestorePackage < 0) throw new IllegalStateException("nextRestorePackage not called"); + File packageDir = new File(mDataDir, mRestorePackages[mRestorePackage].packageName); + + // The restore set is the concatenation of the individual record blobs, + // each of which is a file in the package's directory + File[] blobs = packageDir.listFiles(); + if (blobs == null) { + Log.e(TAG, "Error listing directory: " + packageDir); + return false; // nextRestorePackage() ensures the dir exists, so this is an error + } + + // We expect at least some data if the directory exists in the first place + if (DEBUG) Log.v(TAG, " getRestoreData() found " + blobs.length + " key files"); + BackupDataOutput out = new BackupDataOutput(outFd.getFileDescriptor()); + try { + for (File f : blobs) { + FileInputStream in = new FileInputStream(f); + try { + int size = (int) f.length(); + byte[] buf = new byte[size]; + in.read(buf); + String key = new String(Base64.decode(f.getName())); + if (DEBUG) Log.v(TAG, " ... key=" + key + " size=" + size); + out.writeEntityHeader(key, size); + out.writeEntityData(buf, size); + } finally { + in.close(); + } + } + return true; + } catch (IOException e) { + Log.e(TAG, "Unable to read backup records", e); + return false; + } + } + + public void finishRestore() { + if (DEBUG) Log.v(TAG, "finishRestore()"); + } +} diff --git a/core/java/com/android/internal/backup/SystemBackupAgent.java b/core/java/com/android/internal/backup/SystemBackupAgent.java new file mode 100644 index 000000000000..6b396d777a66 --- /dev/null +++ b/core/java/com/android/internal/backup/SystemBackupAgent.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.backup; + +import android.backup.AbsoluteFileBackupHelper; +import android.backup.BackupHelperAgent; + +/** + * Backup agent for various system-managed data + */ +public class SystemBackupAgent extends BackupHelperAgent { + // the set of files that we back up whole, as absolute paths + String[] mFiles = { + /* WallpaperService.WALLPAPER_FILE */ + "/data/data/com.android.settings/files/wallpaper", + }; + + public void onCreate() { + addHelper("system_files", new AbsoluteFileBackupHelper(this, mFiles)); + } +} diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index e8356a2c6415..a03802dff012 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -23,23 +23,24 @@ import android.os.ParcelFormatException; import android.os.Parcelable; import android.os.Process; import android.os.SystemClock; +import android.telephony.SignalStrength; import android.telephony.TelephonyManager; import android.util.Log; import android.util.PrintWriterPrinter; import android.util.Printer; import android.util.SparseArray; +import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.Map; -import java.util.Set; /** * All information we are collecting about things that can happen that impact @@ -54,7 +55,7 @@ public final class BatteryStatsImpl extends BatteryStats { private static final int MAGIC = 0xBA757475; // 'BATSTATS' // Current on-disk Parcel version - private static final int VERSION = 34; + private static final int VERSION = 39; private final File mFile; private final File mBackupFile; @@ -95,7 +96,7 @@ public final class BatteryStatsImpl extends BatteryStats { boolean mScreenOn; StopwatchTimer mScreenOnTimer; - + int mScreenBrightnessBin = -1; final StopwatchTimer[] mScreenBrightnessTimer = new StopwatchTimer[NUM_SCREEN_BRIGHTNESS_BINS]; @@ -104,6 +105,12 @@ public final class BatteryStatsImpl extends BatteryStats { boolean mPhoneOn; StopwatchTimer mPhoneOnTimer; + boolean mAudioOn; + StopwatchTimer mAudioOnTimer; + + boolean mVideoOn; + StopwatchTimer mVideoOnTimer; + int mPhoneSignalStrengthBin = -1; final StopwatchTimer[] mPhoneSignalStrengthsTimer = new StopwatchTimer[NUM_SIGNAL_STRENGTH_BINS]; @@ -132,18 +139,27 @@ public final class BatteryStatsImpl extends BatteryStats { long mTrackBatteryUptimeStart; long mTrackBatteryPastRealtime; long mTrackBatteryRealtimeStart; - + long mUnpluggedBatteryUptime; long mUnpluggedBatteryRealtime; - + /* * These keep track of battery levels (1-100) at the last plug event and the last unplug event. */ int mDischargeStartLevel; int mDischargeCurrentLevel; - + long mLastWriteTime = 0; // Milliseconds - + + // Mobile data transferred while on battery + private long[] mMobileDataTx = new long[4]; + private long[] mMobileDataRx = new long[4]; + private long[] mTotalDataTx = new long[4]; + private long[] mTotalDataRx = new long[4]; + + private long mRadioDataUptime; + private long mRadioDataStart; + /* * Holds a SamplingTimer associated with each kernel wakelock name being tracked. */ @@ -175,6 +191,8 @@ public final class BatteryStatsImpl extends BatteryStats { private final Map mProcWakelockFileStats = new HashMap(); + private HashMap mUidCache = new HashMap(); + // For debugging public BatteryStatsImpl() { mFile = mBackupFile = null; @@ -319,6 +337,13 @@ public final class BatteryStatsImpl extends BatteryStats { */ long mUnpluggedTime; + /** + * Constructs from a parcel. + * @param type + * @param unpluggables + * @param powerType + * @param in + */ Timer(int type, ArrayList unpluggables, Parcel in) { mType = type; @@ -631,7 +656,6 @@ public final class BatteryStatsImpl extends BatteryStats { * was actually held for an interesting duration. */ long mAcquireTime; - StopwatchTimer(int type, ArrayList timerPool, ArrayList unpluggables, Parcel in) { @@ -692,6 +716,10 @@ public final class BatteryStatsImpl extends BatteryStats { } } + boolean isRunningLocked() { + return mNesting > 0; + } + void stopRunningLocked(BatteryStatsImpl stats) { // Ignore attempt to stop a timer that isn't running if (mNesting == 0) { @@ -882,7 +910,40 @@ public final class BatteryStatsImpl extends BatteryStats { } return kwlt; } - + + private void doDataPlug(long[] dataTransfer, long currentBytes) { + dataTransfer[STATS_LAST] = dataTransfer[STATS_UNPLUGGED]; + dataTransfer[STATS_UNPLUGGED] = -1; + } + + private void doDataUnplug(long[] dataTransfer, long currentBytes) { + dataTransfer[STATS_UNPLUGGED] = currentBytes; + } + + private long getCurrentRadioDataUptimeMs() { + try { + File awakeTimeFile = new File("/sys/devices/virtual/net/rmnet0/awake_time_ms"); + if (!awakeTimeFile.exists()) return 0; + BufferedReader br = new BufferedReader(new FileReader(awakeTimeFile)); + String line = br.readLine(); + br.close(); + return Long.parseLong(line); + } catch (NumberFormatException nfe) { + // Nothing + } catch (IOException ioe) { + // Nothing + } + return 0; + } + + public long getRadioDataUptimeMs() { + if (mRadioDataStart == -1) { + return mRadioDataUptime; + } else { + return getCurrentRadioDataUptimeMs() - mRadioDataStart; + } + } + public void doUnplug(long batteryUptime, long batteryRealtime) { for (int iu = mUidStats.size() - 1; iu >= 0; iu--) { Uid u = mUidStats.valueAt(iu); @@ -894,8 +955,16 @@ public final class BatteryStatsImpl extends BatteryStats { for (int i = mUnpluggables.size() - 1; i >= 0; i--) { mUnpluggables.get(i).unplug(batteryUptime, batteryRealtime); } + // Track total mobile data + doDataUnplug(mMobileDataRx, NetStat.getMobileRxBytes()); + doDataUnplug(mMobileDataTx, NetStat.getMobileTxBytes()); + doDataUnplug(mTotalDataRx, NetStat.getTotalRxBytes()); + doDataUnplug(mTotalDataTx, NetStat.getTotalTxBytes()); + // Track radio awake time + mRadioDataStart = getCurrentRadioDataUptimeMs(); + mRadioDataUptime = 0; } - + public void doPlug(long batteryUptime, long batteryRealtime) { for (int iu = mUidStats.size() - 1; iu >= 0; iu--) { Uid u = mUidStats.valueAt(iu); @@ -911,16 +980,23 @@ public final class BatteryStatsImpl extends BatteryStats { for (int i = mUnpluggables.size() - 1; i >= 0; i--) { mUnpluggables.get(i).plug(batteryUptime, batteryRealtime); } + doDataPlug(mMobileDataRx, NetStat.getMobileRxBytes()); + doDataPlug(mMobileDataTx, NetStat.getMobileTxBytes()); + doDataPlug(mTotalDataRx, NetStat.getTotalRxBytes()); + doDataPlug(mTotalDataTx, NetStat.getTotalTxBytes()); + // Track radio awake time + mRadioDataUptime = getRadioDataUptimeMs(); + mRadioDataStart = -1; } - + public void noteStartGps(int uid) { - mUidStats.get(uid).noteStartGps(); + getUidStatsLocked(uid).noteStartGps(); } public void noteStopGps(int uid) { - mUidStats.get(uid).noteStopGps(); + getUidStatsLocked(uid).noteStopGps(); } - + public void noteScreenOnLocked() { if (!mScreenOn) { mScreenOn = true; @@ -962,10 +1038,7 @@ public final class BatteryStatsImpl extends BatteryStats { } public void noteUserActivityLocked(int uid, int event) { - Uid u = mUidStats.get(uid); - if (u != null) { - u.noteUserActivityLocked(event); - } + getUidStatsLocked(uid).noteUserActivityLocked(event); } public void notePhoneOnLocked() { @@ -981,15 +1054,43 @@ public final class BatteryStatsImpl extends BatteryStats { mPhoneOnTimer.stopRunningLocked(this); } } - - public void notePhoneSignalStrengthLocked(int asu) { + + public void noteAirplaneModeLocked(boolean isAirplaneMode) { + final int bin = mPhoneSignalStrengthBin; + if (bin >= 0) { + if (!isAirplaneMode) { + if (!mPhoneSignalStrengthsTimer[bin].isRunningLocked()) { + mPhoneSignalStrengthsTimer[bin].startRunningLocked(this); + } + } else { + for (int i = 0; i < NUM_SIGNAL_STRENGTH_BINS; i++) { + while (mPhoneSignalStrengthsTimer[i].isRunningLocked()) { + mPhoneSignalStrengthsTimer[i].stopRunningLocked(this); + } + } + } + } + } + + public void notePhoneSignalStrengthLocked(SignalStrength signalStrength) { // Bin the strength. int bin; - if (asu < 0 || asu >= 99) bin = SIGNAL_STRENGTH_NONE_OR_UNKNOWN; - else if (asu >= 16) bin = SIGNAL_STRENGTH_GREAT; - else if (asu >= 8) bin = SIGNAL_STRENGTH_GOOD; - else if (asu >= 4) bin = SIGNAL_STRENGTH_MODERATE; - else bin = SIGNAL_STRENGTH_POOR; + + if (!signalStrength.isGsm()) { + int dBm = signalStrength.getCdmaDbm(); + if (dBm >= -75) bin = SIGNAL_STRENGTH_NONE_OR_UNKNOWN; + else if (dBm >= -85) bin = SIGNAL_STRENGTH_GREAT; + else if (dBm >= -95) bin = SIGNAL_STRENGTH_GOOD; + else if (dBm >= -100) bin = SIGNAL_STRENGTH_MODERATE; + else bin = SIGNAL_STRENGTH_POOR; + } else { + int asu = signalStrength.getGsmSignalStrength(); + if (asu < 0 || asu >= 99) bin = SIGNAL_STRENGTH_NONE_OR_UNKNOWN; + else if (asu >= 16) bin = SIGNAL_STRENGTH_GREAT; + else if (asu >= 8) bin = SIGNAL_STRENGTH_GOOD; + else if (asu >= 4) bin = SIGNAL_STRENGTH_MODERATE; + else bin = SIGNAL_STRENGTH_POOR; + } if (mPhoneSignalStrengthBin != bin) { if (mPhoneSignalStrengthBin >= 0) { mPhoneSignalStrengthsTimer[mPhoneSignalStrengthBin].stopRunningLocked(this); @@ -1017,6 +1118,7 @@ public final class BatteryStatsImpl extends BatteryStats { break; } } + if (DEBUG) Log.i(TAG, "Phone Data Connection -> " + dataType + " = " + hasData); if (mPhoneDataConnectionType != bin) { if (mPhoneDataConnectionType >= 0) { mPhoneDataConnectionsTimer[mPhoneDataConnectionType].stopRunningLocked(this); @@ -1033,16 +1135,10 @@ public final class BatteryStatsImpl extends BatteryStats { } if (mWifiOnUid != uid) { if (mWifiOnUid >= 0) { - Uid u = mUidStats.get(mWifiOnUid); - if (u != null) { - u.noteWifiTurnedOffLocked(); - } + getUidStatsLocked(mWifiOnUid).noteWifiTurnedOffLocked(); } mWifiOnUid = uid; - Uid u = mUidStats.get(uid); - if (u != null) { - u.noteWifiTurnedOnLocked(); - } + getUidStatsLocked(uid).noteWifiTurnedOnLocked(); } } @@ -1052,14 +1148,43 @@ public final class BatteryStatsImpl extends BatteryStats { mWifiOnTimer.stopRunningLocked(this); } if (mWifiOnUid >= 0) { - Uid u = mUidStats.get(mWifiOnUid); - if (u != null) { - u.noteWifiTurnedOffLocked(); - } + getUidStatsLocked(mWifiOnUid).noteWifiTurnedOffLocked(); mWifiOnUid = -1; } } + + public void noteAudioOnLocked(int uid) { + if (!mAudioOn) { + mAudioOn = true; + mAudioOnTimer.startRunningLocked(this); + } + getUidStatsLocked(uid).noteAudioTurnedOnLocked(); + } + public void noteAudioOffLocked(int uid) { + if (mAudioOn) { + mAudioOn = false; + mAudioOnTimer.stopRunningLocked(this); + } + getUidStatsLocked(uid).noteAudioTurnedOffLocked(); + } + + public void noteVideoOnLocked(int uid) { + if (!mVideoOn) { + mVideoOn = true; + mVideoOnTimer.startRunningLocked(this); + } + getUidStatsLocked(uid).noteVideoTurnedOnLocked(); + } + + public void noteVideoOffLocked(int uid) { + if (mVideoOn) { + mVideoOn = false; + mVideoOnTimer.stopRunningLocked(this); + } + getUidStatsLocked(uid).noteVideoTurnedOffLocked(); + } + public void noteWifiRunningLocked() { if (!mWifiRunning) { mWifiRunning = true; @@ -1089,45 +1214,27 @@ public final class BatteryStatsImpl extends BatteryStats { } public void noteFullWifiLockAcquiredLocked(int uid) { - Uid u = mUidStats.get(uid); - if (u != null) { - u.noteFullWifiLockAcquiredLocked(); - } + getUidStatsLocked(uid).noteFullWifiLockAcquiredLocked(); } public void noteFullWifiLockReleasedLocked(int uid) { - Uid u = mUidStats.get(uid); - if (u != null) { - u.noteFullWifiLockReleasedLocked(); - } + getUidStatsLocked(uid).noteFullWifiLockReleasedLocked(); } public void noteScanWifiLockAcquiredLocked(int uid) { - Uid u = mUidStats.get(uid); - if (u != null) { - u.noteScanWifiLockAcquiredLocked(); - } + getUidStatsLocked(uid).noteScanWifiLockAcquiredLocked(); } public void noteScanWifiLockReleasedLocked(int uid) { - Uid u = mUidStats.get(uid); - if (u != null) { - u.noteScanWifiLockReleasedLocked(); - } + getUidStatsLocked(uid).noteScanWifiLockReleasedLocked(); } public void noteWifiMulticastEnabledLocked(int uid) { - Uid u = mUidStats.get(uid); - if (u != null) { - u.noteWifiMulticastEnabledLocked(); - } + getUidStatsLocked(uid).noteWifiMulticastEnabledLocked(); } public void noteWifiMulticastDisabledLocked(int uid) { - Uid u = mUidStats.get(uid); - if (u != null) { - u.noteWifiMulticastDisabledLocked(); - } + getUidStatsLocked(uid).noteWifiMulticastDisabledLocked(); } @Override public long getScreenOnTime(long batteryRealtime, int which) { @@ -1139,7 +1246,7 @@ public final class BatteryStatsImpl extends BatteryStats { return mScreenBrightnessTimer[brightnessBin].getTotalTimeLocked( batteryRealtime, which); } - + @Override public int getInputEventCount(int which) { return mInputEventCounter.getCountLocked(which); } @@ -1147,7 +1254,7 @@ public final class BatteryStatsImpl extends BatteryStats { @Override public long getPhoneOnTime(long batteryRealtime, int which) { return mPhoneOnTimer.getTotalTimeLocked(batteryRealtime, which); } - + @Override public long getPhoneSignalStrengthTime(int strengthBin, long batteryRealtime, int which) { return mPhoneSignalStrengthsTimer[strengthBin].getTotalTimeLocked( @@ -1214,9 +1321,15 @@ public final class BatteryStatsImpl extends BatteryStats { boolean mScanWifiLockOut; StopwatchTimer mScanWifiLockTimer; - + boolean mWifiMulticastEnabled; StopwatchTimer mWifiMulticastTimer; + + boolean mAudioTurnedOn; + StopwatchTimer mAudioTurnedOnTimer; + + boolean mVideoTurnedOn; + StopwatchTimer mVideoTurnedOnTimer; Counter[] mUserActivityCounters; @@ -1247,6 +1360,8 @@ public final class BatteryStatsImpl extends BatteryStats { mScanWifiLockTimer = new StopwatchTimer(SCAN_WIFI_LOCK, null, mUnpluggables); mWifiMulticastTimer = new StopwatchTimer(WIFI_MULTICAST_ENABLED, null, mUnpluggables); + mAudioTurnedOnTimer = new StopwatchTimer(AUDIO_TURNED_ON, null, mUnpluggables); + mVideoTurnedOnTimer = new StopwatchTimer(VIDEO_TURNED_ON, null, mUnpluggables); } @Override @@ -1268,11 +1383,13 @@ public final class BatteryStatsImpl extends BatteryStats { public Map getPackageStats() { return mPackageStats; } - + + @Override public int getUid() { return mUid; } - + + @Override public long getTcpBytesReceived(int which) { if (which == STATS_LAST) { return mLoadedTcpBytesReceived; @@ -1291,7 +1408,8 @@ public final class BatteryStatsImpl extends BatteryStats { return mCurrentTcpBytesReceived + (mStartedTcpBytesReceived >= 0 ? (NetStat.getUidRxBytes(mUid) - mStartedTcpBytesReceived) : 0); } - + + @Override public long getTcpBytesSent(int which) { if (which == STATS_LAST) { return mLoadedTcpBytesSent; @@ -1330,6 +1448,38 @@ public final class BatteryStatsImpl extends BatteryStats { } } + @Override + public void noteVideoTurnedOnLocked() { + if (!mVideoTurnedOn) { + mVideoTurnedOn = true; + mVideoTurnedOnTimer.startRunningLocked(BatteryStatsImpl.this); + } + } + + @Override + public void noteVideoTurnedOffLocked() { + if (mVideoTurnedOn) { + mVideoTurnedOn = false; + mVideoTurnedOnTimer.stopRunningLocked(BatteryStatsImpl.this); + } + } + + @Override + public void noteAudioTurnedOnLocked() { + if (!mAudioTurnedOn) { + mAudioTurnedOn = true; + mAudioTurnedOnTimer.startRunningLocked(BatteryStatsImpl.this); + } + } + + @Override + public void noteAudioTurnedOffLocked() { + if (mAudioTurnedOn) { + mAudioTurnedOn = false; + mAudioTurnedOnTimer.stopRunningLocked(BatteryStatsImpl.this); + } + } + @Override public void noteFullWifiLockReleasedLocked() { if (mFullWifiLockOut) { @@ -1374,7 +1524,17 @@ public final class BatteryStatsImpl extends BatteryStats { public long getWifiTurnedOnTime(long batteryRealtime, int which) { return mWifiTurnedOnTimer.getTotalTimeLocked(batteryRealtime, which); } - + + @Override + public long getAudioTurnedOnTime(long batteryRealtime, int which) { + return mAudioTurnedOnTimer.getTotalTimeLocked(batteryRealtime, which); + } + + @Override + public long getVideoTurnedOnTime(long batteryRealtime, int which) { + return mVideoTurnedOnTimer.getTotalTimeLocked(batteryRealtime, which); + } + @Override public long getFullWifiLockTime(long batteryRealtime, int which) { return mFullWifiLockTimer.getTotalTimeLocked(batteryRealtime, which); @@ -1425,7 +1585,7 @@ public final class BatteryStatsImpl extends BatteryStats { return mCurrentTcpBytesSent + (mStartedTcpBytesSent >= 0 ? (NetStat.getUidTxBytes(mUid) - mStartedTcpBytesSent) : 0); } - + void writeToParcelLocked(Parcel out, long batteryRealtime) { out.writeInt(mWakelockStats.size()); for (Map.Entry wakelockEntry : mWakelockStats.entrySet()) { @@ -1463,6 +1623,8 @@ public final class BatteryStatsImpl extends BatteryStats { out.writeLong(mTcpBytesSentAtLastUnplug); mWifiTurnedOnTimer.writeToParcel(out, batteryRealtime); mFullWifiLockTimer.writeToParcel(out, batteryRealtime); + mAudioTurnedOnTimer.writeToParcel(out, batteryRealtime); + mVideoTurnedOnTimer.writeToParcel(out, batteryRealtime); mScanWifiLockTimer.writeToParcel(out, batteryRealtime); mWifiMulticastTimer.writeToParcel(out, batteryRealtime); if (mUserActivityCounters == null) { @@ -1522,6 +1684,10 @@ public final class BatteryStatsImpl extends BatteryStats { mWifiTurnedOnTimer = new StopwatchTimer(WIFI_TURNED_ON, null, mUnpluggables, in); mFullWifiLockOut = false; mFullWifiLockTimer = new StopwatchTimer(FULL_WIFI_LOCK, null, mUnpluggables, in); + mAudioTurnedOn = false; + mAudioTurnedOnTimer = new StopwatchTimer(AUDIO_TURNED_ON, null, mUnpluggables, in); + mVideoTurnedOn = false; + mVideoTurnedOnTimer = new StopwatchTimer(VIDEO_TURNED_ON, null, mUnpluggables, in); mScanWifiLockOut = false; mScanWifiLockTimer = new StopwatchTimer(SCAN_WIFI_LOCK, null, mUnpluggables, in); mWifiMulticastEnabled = false; @@ -1632,7 +1798,8 @@ public final class BatteryStatsImpl extends BatteryStats { public Timer getSensorTime() { return mTimer; } - + + @Override public int getHandle() { return mHandle; } @@ -1657,6 +1824,11 @@ public final class BatteryStatsImpl extends BatteryStats { */ int mStarts; + /** + * Amount of time the process was running in the foreground. + */ + long mForegroundTime; + /** * The amount of user time loaded from a previous save. */ @@ -1672,6 +1844,11 @@ public final class BatteryStatsImpl extends BatteryStats { */ int mLoadedStarts; + /** + * The amount of foreground time loaded from a previous save. + */ + long mLoadedForegroundTime; + /** * The amount of user time loaded from the previous run. */ @@ -1687,6 +1864,11 @@ public final class BatteryStatsImpl extends BatteryStats { */ int mLastStarts; + /** + * The amount of foreground time loaded from the previous run + */ + long mLastForegroundTime; + /** * The amount of user time when last unplugged. */ @@ -1702,6 +1884,11 @@ public final class BatteryStatsImpl extends BatteryStats { */ int mUnpluggedStarts; + /** + * The amount of foreground time since unplugged. + */ + long mUnpluggedForegroundTime; + Proc() { mUnpluggables.add(this); } @@ -1710,6 +1897,7 @@ public final class BatteryStatsImpl extends BatteryStats { mUnpluggedUserTime = mUserTime; mUnpluggedSystemTime = mSystemTime; mUnpluggedStarts = mStarts; + mUnpluggedForegroundTime = mForegroundTime; } public void plug(long batteryUptime, long batteryRealtime) { @@ -1721,30 +1909,38 @@ public final class BatteryStatsImpl extends BatteryStats { out.writeLong(mUserTime); out.writeLong(mSystemTime); + out.writeLong(mForegroundTime); out.writeInt(mStarts); out.writeLong(mLoadedUserTime); out.writeLong(mLoadedSystemTime); + out.writeLong(mLoadedForegroundTime); out.writeInt(mLoadedStarts); out.writeLong(mLastUserTime); out.writeLong(mLastSystemTime); + out.writeLong(mLastForegroundTime); out.writeInt(mLastStarts); out.writeLong(mUnpluggedUserTime); out.writeLong(mUnpluggedSystemTime); + out.writeLong(mUnpluggedForegroundTime); out.writeInt(mUnpluggedStarts); } void readFromParcelLocked(Parcel in) { mUserTime = in.readLong(); mSystemTime = in.readLong(); + mForegroundTime = in.readLong(); mStarts = in.readInt(); mLoadedUserTime = in.readLong(); mLoadedSystemTime = in.readLong(); + mLoadedForegroundTime = in.readLong(); mLoadedStarts = in.readInt(); mLastUserTime = in.readLong(); mLastSystemTime = in.readLong(); + mLastForegroundTime = in.readLong(); mLastStarts = in.readInt(); mUnpluggedUserTime = in.readLong(); mUnpluggedSystemTime = in.readLong(); + mUnpluggedForegroundTime = in.readLong(); mUnpluggedStarts = in.readInt(); } @@ -1757,6 +1953,10 @@ public final class BatteryStatsImpl extends BatteryStats { mSystemTime += stime; } + public void addForegroundTimeLocked(long ttime) { + mForegroundTime += ttime; + } + public void incStartsLocked() { mStarts++; } @@ -1793,6 +1993,22 @@ public final class BatteryStatsImpl extends BatteryStats { return val; } + @Override + public long getForegroundTime(int which) { + long val; + if (which == STATS_LAST) { + val = mLastForegroundTime; + } else { + val = mForegroundTime; + if (which == STATS_CURRENT) { + val -= mLoadedForegroundTime; + } else if (which == STATS_UNPLUGGED) { + val -= mUnpluggedForegroundTime; + } + } + return val; + } + @Override public int getStarts(int which) { int val; @@ -2315,7 +2531,7 @@ public final class BatteryStatsImpl extends BatteryStats { StopwatchTimer t = getSensorTimerLocked(Sensor.GPS, false); if (t != null) { t.stopRunningLocked(BatteryStatsImpl.this); - } + } } public BatteryStatsImpl getBatteryStats() { @@ -2526,7 +2742,44 @@ public final class BatteryStatsImpl extends BatteryStats { public long getBatteryRealtime(long curTime) { return getBatteryRealtimeLocked(curTime); } - + + private long getTcpBytes(long current, long[] dataBytes, int which) { + if (which == STATS_LAST) { + return dataBytes[STATS_LAST]; + } else { + if (which == STATS_UNPLUGGED) { + if (dataBytes[STATS_UNPLUGGED] < 0) { + return dataBytes[STATS_LAST]; + } else { + return current - dataBytes[STATS_UNPLUGGED]; + } + } else if (which == STATS_TOTAL) { + return (current - dataBytes[STATS_CURRENT]) + dataBytes[STATS_TOTAL]; + } + return current - dataBytes[STATS_CURRENT]; + } + } + + /** Only STATS_UNPLUGGED works properly */ + public long getMobileTcpBytesSent(int which) { + return getTcpBytes(NetStat.getMobileTxBytes(), mMobileDataTx, which); + } + + /** Only STATS_UNPLUGGED works properly */ + public long getMobileTcpBytesReceived(int which) { + return getTcpBytes(NetStat.getMobileRxBytes(), mMobileDataRx, which); + } + + /** Only STATS_UNPLUGGED works properly */ + public long getTotalTcpBytesSent(int which) { + return getTcpBytes(NetStat.getTotalTxBytes(), mTotalDataTx, which); + } + + /** Only STATS_UNPLUGGED works properly */ + public long getTotalTcpBytesReceived(int which) { + return getTcpBytes(NetStat.getTotalRxBytes(), mTotalDataRx, which); + } + @Override public int getDischargeStartLevel() { synchronized(this) { @@ -2567,7 +2820,7 @@ public final class BatteryStatsImpl extends BatteryStats { public void removeUidStatsLocked(int uid) { mUidStats.remove(uid); } - + /** * Retrieve the statistics object for a particular process, creating * if needed. @@ -2577,6 +2830,24 @@ public final class BatteryStatsImpl extends BatteryStats { return u.getProcessStatsLocked(name); } + /** + * Retrieve the statistics object for a particular process, given + * the name of the process. + * @param name process name + * @return the statistics object for the process + */ + public Uid.Proc getProcessStatsLocked(String name, int pid) { + int uid; + if (mUidCache.containsKey(name)) { + uid = mUidCache.get(name); + } else { + uid = Process.getUidForPid(pid); + mUidCache.put(name, uid); + } + Uid u = getUidStatsLocked(uid); + return u.getProcessStatsLocked(name); + } + /** * Retrieve the statistics object for a particular process, creating * if needed. @@ -2752,6 +3023,10 @@ public final class BatteryStatsImpl extends BatteryStats { u.mWifiTurnedOnTimer.readSummaryFromParcelLocked(in); u.mFullWifiLockOut = false; u.mFullWifiLockTimer.readSummaryFromParcelLocked(in); + u.mAudioTurnedOn = false; + u.mAudioTurnedOnTimer.readSummaryFromParcelLocked(in); + u.mVideoTurnedOn = false; + u.mVideoTurnedOnTimer.readSummaryFromParcelLocked(in); u.mScanWifiLockOut = false; u.mScanWifiLockTimer.readSummaryFromParcelLocked(in); u.mWifiMulticastEnabled = false; @@ -2888,6 +3163,8 @@ public final class BatteryStatsImpl extends BatteryStats { u.mWifiTurnedOnTimer.writeSummaryFromParcelLocked(out, NOWREAL); u.mFullWifiLockTimer.writeSummaryFromParcelLocked(out, NOWREAL); + u.mAudioTurnedOnTimer.writeSummaryFromParcelLocked(out, NOWREAL); + u.mVideoTurnedOnTimer.writeSummaryFromParcelLocked(out, NOWREAL); u.mScanWifiLockTimer.writeSummaryFromParcelLocked(out, NOWREAL); u.mWifiMulticastTimer.writeSummaryFromParcelLocked(out, NOWREAL); @@ -3046,11 +3323,24 @@ public final class BatteryStatsImpl extends BatteryStats { mDischargeCurrentLevel = in.readInt(); mLastWriteTime = in.readLong(); + mMobileDataRx[STATS_LAST] = in.readLong(); + mMobileDataRx[STATS_UNPLUGGED] = -1; + mMobileDataTx[STATS_LAST] = in.readLong(); + mMobileDataTx[STATS_UNPLUGGED] = -1; + mTotalDataRx[STATS_LAST] = in.readLong(); + mTotalDataRx[STATS_UNPLUGGED] = -1; + mTotalDataTx[STATS_LAST] = in.readLong(); + mTotalDataTx[STATS_UNPLUGGED] = -1; + + mRadioDataUptime = in.readLong(); + mRadioDataStart = -1; + mKernelWakelockStats.clear(); int NKW = in.readInt(); for (int ikw = 0; ikw < NKW; ikw++) { if (in.readInt() != 0) { String wakelockName = in.readString(); + in.readInt(); // Extra 0/1 written by Timer.writeTimerToParcel SamplingTimer kwlt = new SamplingTimer(mUnpluggables, mOnBattery, in); mKernelWakelockStats.put(wakelockName, kwlt); } @@ -3119,6 +3409,14 @@ public final class BatteryStatsImpl extends BatteryStats { out.writeInt(mDischargeCurrentLevel); out.writeLong(mLastWriteTime); + out.writeLong(getMobileTcpBytesReceived(STATS_UNPLUGGED)); + out.writeLong(getMobileTcpBytesSent(STATS_UNPLUGGED)); + out.writeLong(getTotalTcpBytesReceived(STATS_UNPLUGGED)); + out.writeLong(getTotalTcpBytesSent(STATS_UNPLUGGED)); + + // Write radio uptime for data + out.writeLong(getRadioDataUptimeMs()); + out.writeInt(mKernelWakelockStats.size()); for (Map.Entry ent : mKernelWakelockStats.entrySet()) { SamplingTimer kwlt = ent.getValue(); diff --git a/core/java/com/android/internal/os/PowerProfile.java b/core/java/com/android/internal/os/PowerProfile.java new file mode 100644 index 000000000000..4a8d8b182f90 --- /dev/null +++ b/core/java/com/android/internal/os/PowerProfile.java @@ -0,0 +1,238 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.os; + + +import android.content.Context; +import android.content.res.XmlResourceParser; + +import com.android.internal.util.XmlUtils; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; + +/** + * Reports power consumption values for various device activities. Reads values from an XML file. + * Customize the XML file for different devices. + * [hidden] + */ +public class PowerProfile { + + /** + * No power consumption, or accounted for elsewhere. + */ + public static final String POWER_NONE = "none"; + + /** + * Power consumption when CPU is in power collapse mode. + */ + public static final String POWER_CPU_IDLE = "cpu.idle"; + + /** + * Power consumption when CPU is running at normal speed. + */ + public static final String POWER_CPU_NORMAL = "cpu.normal"; + + /** + * Power consumption when CPU is running at full speed. + */ + public static final String POWER_CPU_FULL = "cpu.full"; + + /** + * Power consumption when WiFi driver is scanning for networks. + */ + public static final String POWER_WIFI_SCAN = "wifi.scan"; + + /** + * Power consumption when WiFi driver is on. + */ + public static final String POWER_WIFI_ON = "wifi.on"; + + /** + * Power consumption when WiFi driver is transmitting/receiving. + */ + public static final String POWER_WIFI_ACTIVE = "wifi.active"; + + /** + * Power consumption when GPS is on. + */ + public static final String POWER_GPS_ON = "gps.on"; + + /** + * Power consumption when Bluetooth driver is on. + */ + public static final String POWER_BLUETOOTH_ON = "bluetooth.on"; + + /** + * Power consumption when Bluetooth driver is transmitting/receiving. + */ + public static final String POWER_BLUETOOTH_ACTIVE = "bluetooth.active"; + + /** + * Power consumption when screen is on, not including the backlight power. + */ + public static final String POWER_SCREEN_ON = "screen.on"; + + /** + * Power consumption when cell radio is on but not on a call. + */ + public static final String POWER_RADIO_ON = "radio.on"; + + /** + * Power consumption when talking on the phone. + */ + public static final String POWER_RADIO_ACTIVE = "radio.active"; + + /** + * Power consumption at full backlight brightness. If the backlight is at + * 50% brightness, then this should be multiplied by 0.5 + */ + public static final String POWER_SCREEN_FULL = "screen.full"; + + /** + * Power consumed by the audio hardware when playing back audio content. This is in addition + * to the CPU power, probably due to a DSP and / or amplifier. + */ + public static final String POWER_AUDIO = "dsp.audio"; + + /** + * Power consumed by any media hardware when playing back video content. This is in addition + * to the CPU power, probably due to a DSP. + */ + public static final String POWER_VIDEO = "dsp.video"; + + static final HashMap sPowerMap = new HashMap(); + + private static final String TAG_DEVICE = "device"; + private static final String TAG_ITEM = "item"; + private static final String TAG_ARRAY = "array"; + private static final String TAG_ARRAYITEM = "value"; + private static final String ATTR_NAME = "name"; + + public PowerProfile(Context context) { + // Read the XML file for the given profile (normally only one per + // device) + if (sPowerMap.size() == 0) { + readPowerValuesFromXml(context); + } + } + + private void readPowerValuesFromXml(Context context) { + int id = com.android.internal.R.xml.power_profile; + XmlResourceParser parser = context.getResources().getXml(id); + boolean parsingArray = false; + ArrayList array = new ArrayList(); + String arrayName = null; + + try { + XmlUtils.beginDocument(parser, TAG_DEVICE); + + while (true) { + XmlUtils.nextElement(parser); + + String element = parser.getName(); + if (element == null) break; + + if (parsingArray && !element.equals(TAG_ARRAYITEM)) { + // Finish array + sPowerMap.put(arrayName, array.toArray(new Double[array.size()])); + parsingArray = false; + } + if (element.equals(TAG_ARRAY)) { + parsingArray = true; + array.clear(); + arrayName = parser.getAttributeValue(null, ATTR_NAME); + } else if (element.equals(TAG_ITEM) || element.equals(TAG_ARRAYITEM)) { + String name = null; + if (!parsingArray) name = parser.getAttributeValue(null, ATTR_NAME); + if (parser.next() == XmlPullParser.TEXT) { + String power = parser.getText(); + double value = 0; + try { + value = Double.valueOf(power); + } catch (NumberFormatException nfe) { + } + if (element.equals(TAG_ITEM)) { + sPowerMap.put(name, value); + } else if (parsingArray) { + array.add(value); + } + } + } + } + if (parsingArray) { + sPowerMap.put(arrayName, array.toArray(new Double[array.size()])); + } + } catch (XmlPullParserException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + parser.close(); + } + } + + /** + * Returns the average current in mA consumed by the subsystem + * @param type the subsystem type + * @return the average current in milliAmps. + */ + public double getAveragePower(String type) { + if (sPowerMap.containsKey(type)) { + Object data = sPowerMap.get(type); + if (data instanceof Double[]) { + return ((Double[])data)[0]; + } else { + return (Double) sPowerMap.get(type); + } + } else { + return 0; + } + } + + /** + * Returns the average current in mA consumed by the subsystem for the given level. + * @param type the subsystem type + * @param level the level of power at which the subsystem is running. For instance, the + * signal strength of the cell network between 0 and 4 (if there are 4 bars max.). + * If there is no data for multiple levels, the level is ignored. + * @return the average current in milliAmps. + */ + public double getAveragePower(String type, int level) { + if (sPowerMap.containsKey(type)) { + Object data = sPowerMap.get(type); + if (data instanceof Double[]) { + final Double[] values = (Double[]) data; + if (values.length > level && level >= 0) { + return values[level]; + } else if (level < 0) { + return 0; + } else { + return values[values.length - 1]; + } + } else { + return (Double) data; + } + } else { + return 0; + } + } +} diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index ac8b58934168..f67a235b0736 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -467,7 +467,7 @@ public class ZygoteInit { "--setuid=1000", "--setgid=1000", "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,3001,3002,3003", - "--capabilities=121715744,121715744", + "--capabilities=130104352,130104352", "--runtime-init", "--nice-name=system_server", "com.android.server.SystemServer", diff --git a/core/java/com/android/internal/util/BitwiseInputStream.java b/core/java/com/android/internal/util/BitwiseInputStream.java index 4757919f23f5..86f74f302518 100644 --- a/core/java/com/android/internal/util/BitwiseInputStream.java +++ b/core/java/com/android/internal/util/BitwiseInputStream.java @@ -65,30 +65,31 @@ public class BitwiseInputStream { /** * Read some data and increment the current position. * - * @param bits the amount of data to read (gte 0, lte 8) + * The 8-bit limit on access to bitwise streams is intentional to + * avoid endianness issues. * + * @param bits the amount of data to read (gte 0, lte 8) * @return byte of read data (possibly partially filled, from lsb) */ - public byte read(int bits) throws AccessException { + public int read(int bits) throws AccessException { int index = mPos >>> 3; int offset = 16 - (mPos & 0x07) - bits; // &7==%8 if ((bits < 0) || (bits > 8) || ((mPos + bits) > mEnd)) { throw new AccessException("illegal read " + "(pos " + mPos + ", end " + mEnd + ", bits " + bits + ")"); } - int data = (mBuf[index] & 0x00FF) << 8; - if (offset < 8) data |= (mBuf[index + 1] & 0xFF); + int data = (mBuf[index] & 0xFF) << 8; + if (offset < 8) data |= mBuf[index + 1] & 0xFF; data >>>= offset; data &= (-1 >>> (32 - bits)); mPos += bits; - return (byte)data; + return data; } /** * Read data in bulk into a byte array and increment the current position. * * @param bits the amount of data to read - * * @return newly allocated byte array of read data */ public byte[] readByteArray(int bits) throws AccessException { diff --git a/core/java/com/android/internal/util/BitwiseOutputStream.java b/core/java/com/android/internal/util/BitwiseOutputStream.java index 1b974ce4c9ee..70c0be81a56a 100644 --- a/core/java/com/android/internal/util/BitwiseOutputStream.java +++ b/core/java/com/android/internal/util/BitwiseOutputStream.java @@ -82,6 +82,9 @@ public class BitwiseOutputStream { /** * Write some data and increment the current position. * + * The 8-bit limit on access to bitwise streams is intentional to + * avoid endianness issues. + * * @param bits the amount of data to write (gte 0, lte 8) * @param data to write, will be masked to expose only bits param from lsb */ @@ -95,8 +98,8 @@ public class BitwiseOutputStream { int offset = 16 - (mPos & 0x07) - bits; // &7==%8 data <<= offset; mPos += bits; - mBuf[index] |= (data >>> 8); - if (offset < 8) mBuf[index + 1] |= (data & 0x00FF); + mBuf[index] |= data >>> 8; + if (offset < 8) mBuf[index + 1] |= data & 0xFF; } /** diff --git a/core/java/com/google/android/net/GoogleHttpClient.java b/core/java/com/google/android/net/GoogleHttpClient.java index 871c925478e4..922f5bef8a49 100644 --- a/core/java/com/google/android/net/GoogleHttpClient.java +++ b/core/java/com/google/android/net/GoogleHttpClient.java @@ -37,6 +37,10 @@ import org.apache.http.client.HttpClient; import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.conn.ClientConnectionManager; +import org.apache.http.conn.scheme.LayeredSocketFactory; +import org.apache.http.conn.scheme.Scheme; +import org.apache.http.conn.scheme.SchemeRegistry; +import org.apache.http.conn.scheme.SocketFactory; import org.apache.http.impl.client.EntityEnclosingRequestWrapper; import org.apache.http.impl.client.RequestWrapper; import org.apache.http.params.HttpParams; @@ -44,6 +48,8 @@ import org.apache.http.protocol.HttpContext; import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache; import java.io.IOException; +import java.net.InetAddress; +import java.net.Socket; import java.net.URI; import java.net.URISyntaxException; @@ -66,25 +72,22 @@ public class GoogleHttpClient implements HttpClient { private final AndroidHttpClient mClient; private final ContentResolver mResolver; - private final String mUserAgent; + private final String mAppName, mUserAgent; + private final ThreadLocal mConnectionAllocated = new ThreadLocal(); /** - * Create an HTTP client. Normally one client is shared throughout an app. - * @param resolver to use for accessing URL rewriting rules. - * @param userAgent to report in your HTTP requests. - * @deprecated Use {@link #GoogleHttpClient(android.content.ContentResolver, String, boolean)} + * Create an HTTP client without SSL session persistence. + * @deprecated Use {@link #GoogleHttpClient(android.content.Context, String, boolean)} */ public GoogleHttpClient(ContentResolver resolver, String userAgent) { mClient = AndroidHttpClient.newInstance(userAgent); mResolver = resolver; - mUserAgent = userAgent; + mUserAgent = mAppName = userAgent; } /** - * GoogleHttpClient(Context, String, boolean) - without SSL session - * persistence. - * - * @deprecated use Context instead of ContentResolver. + * Create an HTTP client without SSL session persistence. + * @deprecated Use {@link #GoogleHttpClient(android.content.Context, String, boolean)} */ public GoogleHttpClient(ContentResolver resolver, String appAndVersion, boolean gzipCapable) { @@ -111,21 +114,72 @@ public class GoogleHttpClient implements HttpClient { * headers. Needed because Google servers require gzip in the User-Agent * in order to return gzip'd content. */ - public GoogleHttpClient(Context context, String appAndVersion, - boolean gzipCapable) { - this(context.getContentResolver(), SSLClientSessionCacheFactory.getCache(context), + public GoogleHttpClient(Context context, String appAndVersion, boolean gzipCapable) { + this(context.getContentResolver(), + SSLClientSessionCacheFactory.getCache(context), appAndVersion, gzipCapable); } - private GoogleHttpClient(ContentResolver resolver, SSLClientSessionCache cache, + private GoogleHttpClient(ContentResolver resolver, + SSLClientSessionCache cache, String appAndVersion, boolean gzipCapable) { String userAgent = appAndVersion + " (" + Build.DEVICE + " " + Build.ID + ")"; if (gzipCapable) { userAgent = userAgent + "; gzip"; } + mClient = AndroidHttpClient.newInstance(userAgent, cache); mResolver = resolver; + mAppName = appAndVersion; mUserAgent = userAgent; + + // Wrap all the socket factories with the appropriate wrapper. (Apache + // HTTP, curse its black and stupid heart, inspects the SocketFactory to + // see if it's a LayeredSocketFactory, so we need two wrapper classes.) + SchemeRegistry registry = getConnectionManager().getSchemeRegistry(); + for (String name : registry.getSchemeNames()) { + Scheme scheme = registry.unregister(name); + SocketFactory sf = scheme.getSocketFactory(); + if (sf instanceof LayeredSocketFactory) { + sf = new WrappedLayeredSocketFactory((LayeredSocketFactory) sf); + } else { + sf = new WrappedSocketFactory(sf); + } + registry.register(new Scheme(name, sf, scheme.getDefaultPort())); + } + } + + /** + * Delegating wrapper for SocketFactory records when sockets are connected. + * We use this to know whether a connection was created vs reused, to + * gather per-app statistics about connection reuse rates. + * (Note, we record only *connection*, not *creation* of sockets -- + * what we care about is the network overhead of an actual TCP connect.) + */ + private class WrappedSocketFactory implements SocketFactory { + private SocketFactory mDelegate; + private WrappedSocketFactory(SocketFactory delegate) { mDelegate = delegate; } + public final Socket createSocket() throws IOException { return mDelegate.createSocket(); } + public final boolean isSecure(Socket s) { return mDelegate.isSecure(s); } + + public final Socket connectSocket( + Socket s, String h, int p, + InetAddress la, int lp, HttpParams params) throws IOException { + mConnectionAllocated.set(Boolean.TRUE); + return mDelegate.connectSocket(s, h, p, la, lp, params); + } + } + + /** Like WrappedSocketFactory, but for the LayeredSocketFactory subclass. */ + private class WrappedLayeredSocketFactory + extends WrappedSocketFactory implements LayeredSocketFactory { + private LayeredSocketFactory mDelegate; + private WrappedLayeredSocketFactory(LayeredSocketFactory sf) { super(sf); mDelegate = sf; } + + public final Socket createSocket(Socket s, String host, int port, boolean autoClose) + throws IOException { + return mDelegate.createSocket(s, host, port, autoClose); + } } /** @@ -140,24 +194,21 @@ public class GoogleHttpClient implements HttpClient { public HttpResponse executeWithoutRewriting( HttpUriRequest request, HttpContext context) throws IOException { - String code = "Error"; + int code = -1; long start = SystemClock.elapsedRealtime(); try { HttpResponse response; - // TODO: if we're logging network stats, and if the apache library is configured - // to follow redirects, count each redirect as an additional round trip. + mConnectionAllocated.set(null); - // see if we're logging network stats. - boolean logNetworkStats = NetworkStatsEntity.shouldLogNetworkStats(); + if (NetworkStatsEntity.shouldLogNetworkStats()) { + // TODO: if we're logging network stats, and if the apache library is configured + // to follow redirects, count each redirect as an additional round trip. - if (logNetworkStats) { int uid = android.os.Process.myUid(); long startTx = NetStat.getUidTxBytes(uid); long startRx = NetStat.getUidRxBytes(uid); response = mClient.execute(request, context); - code = Integer.toString(response.getStatusLine().getStatusCode()); - HttpEntity origEntity = response == null ? null : response.getEntity(); if (origEntity != null) { // yeah, we compute the same thing below. we do need to compute this here @@ -165,30 +216,39 @@ public class GoogleHttpClient implements HttpClient { long now = SystemClock.elapsedRealtime(); long elapsed = now - start; NetworkStatsEntity entity = new NetworkStatsEntity(origEntity, - mUserAgent, uid, startTx, startRx, + mAppName, uid, startTx, startRx, elapsed /* response latency */, now /* processing start time */); response.setEntity(entity); } } else { response = mClient.execute(request, context); - code = Integer.toString(response.getStatusLine().getStatusCode()); } + code = response.getStatusLine().getStatusCode(); return response; - } catch (IOException e) { - code = "IOException"; - throw e; } finally { // Record some statistics to the checkin service about the outcome. // Note that this is only describing execute(), not body download. + // We assume the database writes are much faster than network I/O, + // and not worth running in a background thread or anything. try { long elapsed = SystemClock.elapsedRealtime() - start; ContentValues values = new ContentValues(); - values.put(Checkin.Stats.TAG, - Checkin.Stats.Tag.HTTP_STATUS + ":" + - mUserAgent + ":" + code); values.put(Checkin.Stats.COUNT, 1); values.put(Checkin.Stats.SUM, elapsed / 1000.0); + + values.put(Checkin.Stats.TAG, Checkin.Stats.Tag.HTTP_REQUEST + ":" + mAppName); + mResolver.insert(Checkin.Stats.CONTENT_URI, values); + + // No sockets and no exceptions means we successfully reused a connection + if (mConnectionAllocated.get() == null && code >= 0) { + values.put(Checkin.Stats.TAG, Checkin.Stats.Tag.HTTP_REUSED + ":" + mAppName); + mResolver.insert(Checkin.Stats.CONTENT_URI, values); + } + + String status = code < 0 ? "IOException" : Integer.toString(code); + values.put(Checkin.Stats.TAG, + Checkin.Stats.Tag.HTTP_STATUS + ":" + mAppName + ":" + status); mResolver.insert(Checkin.Stats.CONTENT_URI, values); } catch (Exception e) { Log.e(TAG, "Error recording stats", e); diff --git a/core/java/com/google/android/util/GoogleWebContentHelper.java b/core/java/com/google/android/util/GoogleWebContentHelper.java index 291142008934..8291e2964dc1 100644 --- a/core/java/com/google/android/util/GoogleWebContentHelper.java +++ b/core/java/com/google/android/util/GoogleWebContentHelper.java @@ -130,7 +130,18 @@ public class GoogleWebContentHelper { mWebView.loadUrl(mSecureUrl); return this; } - + + /** + * Loads data into the webview and also provides a failback url + * @return This {@link GoogleWebContentHelper} so methods can be chained. + */ + public GoogleWebContentHelper loadDataWithFailUrl(String base, String data, + String mimeType, String encoding, String failUrl) { + ensureViews(); + mWebView.loadDataWithBaseURL(base, data, mimeType, encoding, failUrl); + return this; + } + /** * Helper to handle the back key. Returns true if the back key was handled, * otherwise returns false. diff --git a/core/jni/Android.mk b/core/jni/Android.mk index 4839b6f1d991..888cb1163997 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -19,6 +19,7 @@ LOCAL_SRC_FILES:= \ ActivityManager.cpp \ AndroidRuntime.cpp \ CursorWindow.cpp \ + Time.cpp \ com_google_android_gles_jni_EGLImpl.cpp \ com_google_android_gles_jni_GLImpl.cpp.arm \ android_opengl_GLES10.cpp \ @@ -117,7 +118,10 @@ LOCAL_SRC_FILES:= \ android_location_GpsLocationProvider.cpp \ com_android_internal_os_ZygoteInit.cpp \ com_android_internal_graphics_NativeUtils.cpp \ - android_backup_FileBackupHelper.cpp + android_backup_BackupDataInput.cpp \ + android_backup_BackupDataOutput.cpp \ + android_backup_FileBackupHelperBase.cpp \ + android_backup_BackupHelperDispatcher.cpp LOCAL_C_INCLUDES += \ $(JNI_H_INCLUDE) \ @@ -164,8 +168,7 @@ LOCAL_SHARED_LIBRARIES := \ libicui18n \ libicudata \ libmedia \ - libwpa_client \ - libemoji + libwpa_client ifeq ($(BOARD_HAVE_BLUETOOTH),true) LOCAL_C_INCLUDES += \ diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index aa6450d153c2..c81530122995 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -155,7 +155,10 @@ extern int register_android_ddm_DdmHandleNativeHeap(JNIEnv *env); extern int register_com_android_internal_os_ZygoteInit(JNIEnv* env); extern int register_android_util_Base64(JNIEnv* env); extern int register_android_location_GpsLocationProvider(JNIEnv* env); -extern int register_android_backup_FileBackupHelper(JNIEnv *env); +extern int register_android_backup_BackupDataInput(JNIEnv *env); +extern int register_android_backup_BackupDataOutput(JNIEnv *env); +extern int register_android_backup_FileBackupHelperBase(JNIEnv *env); +extern int register_android_backup_BackupHelperDispatcher(JNIEnv *env); static AndroidRuntime* gCurRuntime = NULL; @@ -1126,7 +1129,10 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_ddm_DdmHandleNativeHeap), REG_JNI(register_android_util_Base64), REG_JNI(register_android_location_GpsLocationProvider), - REG_JNI(register_android_backup_FileBackupHelper), + REG_JNI(register_android_backup_BackupDataInput), + REG_JNI(register_android_backup_BackupDataOutput), + REG_JNI(register_android_backup_FileBackupHelperBase), + REG_JNI(register_android_backup_BackupHelperDispatcher), }; /* diff --git a/libs/ui/Time.cpp b/core/jni/Time.cpp similarity index 99% rename from libs/ui/Time.cpp rename to core/jni/Time.cpp index b5539135facd..f3037f383039 100644 --- a/libs/ui/Time.cpp +++ b/core/jni/Time.cpp @@ -1,4 +1,4 @@ -#include +#include "TimeUtils.h" #include #include diff --git a/include/utils/TimeUtils.h b/core/jni/TimeUtils.h similarity index 100% rename from include/utils/TimeUtils.h rename to core/jni/TimeUtils.h diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp index 65f44d504257..af8ecf5cccc3 100644 --- a/core/jni/android/graphics/Bitmap.cpp +++ b/core/jni/android/graphics/Bitmap.cpp @@ -28,7 +28,7 @@ typedef void (*FromColorProc)(void* dst, const SkColor src[], int width, static void FromColor_D32(void* dst, const SkColor src[], int width, int, int) { SkPMColor* d = (SkPMColor*)dst; - + for (int i = 0; i < width; i++) { *d++ = SkPreMultiplyColor(*src++); } @@ -37,7 +37,7 @@ static void FromColor_D32(void* dst, const SkColor src[], int width, static void FromColor_D565(void* dst, const SkColor src[], int width, int x, int y) { uint16_t* d = (uint16_t*)dst; - + DITHER_565_SCAN(y); for (int stop = x + width; x < stop; x++) { SkColor c = *src++; @@ -49,7 +49,7 @@ static void FromColor_D565(void* dst, const SkColor src[], int width, static void FromColor_D4444(void* dst, const SkColor src[], int width, int x, int y) { SkPMColor16* d = (SkPMColor16*)dst; - + DITHER_4444_SCAN(y); for (int stop = x + width; x < stop; x++) { SkPMColor c = SkPreMultiplyColor(*src++); @@ -80,14 +80,14 @@ bool GraphicsJNI::SetPixels(JNIEnv* env, jintArray srcColors, SkAutoLockPixels alp(dstBitmap); void* dst = dstBitmap.getPixels(); FromColorProc proc = ChooseFromColorProc(dstBitmap.config()); - + if (NULL == dst || NULL == proc) { return false; } - + const jint* array = env->GetIntArrayElements(srcColors, NULL); const SkColor* src = (const SkColor*)array + srcOffset; - + // reset to to actual choice from caller dst = dstBitmap.getAddr(x, y); // now copy/convert each scanline @@ -96,7 +96,7 @@ bool GraphicsJNI::SetPixels(JNIEnv* env, jintArray srcColors, src += srcStride; dst = (char*)dst + dstBitmap.rowBytes(); } - + env->ReleaseIntArrayElements(srcColors, const_cast(array), JNI_ABORT); return true; @@ -212,7 +212,7 @@ static jobject Bitmap_creator(JNIEnv* env, jobject, jintArray jColors, doThrowIAE(env, "width and height must be > 0"); return NULL; } - + if (NULL != jColors) { size_t n = env->GetArrayLength(jColors); if (n < SkAbs32(stride) * (size_t)height) { @@ -222,7 +222,7 @@ static jobject Bitmap_creator(JNIEnv* env, jobject, jintArray jColors, } SkBitmap bitmap; - + bitmap.setConfig(config, width, height); if (!GraphicsJNI::setJavaPixelRef(env, &bitmap, NULL)) { return NULL; @@ -232,7 +232,7 @@ static jobject Bitmap_creator(JNIEnv* env, jobject, jintArray jColors, GraphicsJNI::SetPixels(env, jColors, offset, stride, 0, 0, width, height, bitmap); } - + return GraphicsJNI::createBitmap(env, new SkBitmap(bitmap), isMutable, NULL); } @@ -245,7 +245,7 @@ static jobject Bitmap_copy(JNIEnv* env, jobject, const SkBitmap* src, if (!src->copyTo(&result, dstConfig, &allocator)) { return NULL; } - + return GraphicsJNI::createBitmap(env, new SkBitmap(result), isMutable, NULL); } @@ -324,15 +324,15 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) { SkDebugf("-------- unparcel parcel is NULL\n"); return NULL; } - + android::Parcel* p = android::parcelForJavaObject(env, parcel); - + const bool isMutable = p->readInt32() != 0; const SkBitmap::Config config = (SkBitmap::Config)p->readInt32(); const int width = p->readInt32(); const int height = p->readInt32(); const int rowBytes = p->readInt32(); - + if (SkBitmap::kARGB_8888_Config != config && SkBitmap::kRGB_565_Config != config && SkBitmap::kARGB_4444_Config != config && @@ -355,7 +355,7 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) { ctable = new SkColorTable(src, count); } } - + if (!GraphicsJNI::setJavaPixelRef(env, bitmap, ctable)) { ctable->safeUnref(); delete bitmap; @@ -368,7 +368,7 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) { bitmap->lockPixels(); memcpy(bitmap->getPixels(), p->readInplace(size), size); bitmap->unlockPixels(); - + return GraphicsJNI::createBitmap(env, bitmap, isMutable, NULL); } @@ -381,7 +381,7 @@ static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject, } android::Parcel* p = android::parcelForJavaObject(env, parcel); - + p->writeInt32(isMutable); p->writeInt32(bitmap->config()); p->writeInt32(bitmap->width()); @@ -413,7 +413,7 @@ static jobject Bitmap_extractAlpha(JNIEnv* env, jobject clazz, jintArray offsetXY) { SkIPoint offset; SkBitmap* dst = new SkBitmap; - + src->extractAlpha(dst, paint, &offset); if (offsetXY != 0 && env->GetArrayLength(offsetXY) >= 2) { int* array = env->GetIntArrayElements(offsetXY, NULL); @@ -421,7 +421,7 @@ static jobject Bitmap_extractAlpha(JNIEnv* env, jobject clazz, array[1] = offset.fY; env->ReleaseIntArrayElements(offsetXY, array, 0); } - + return GraphicsJNI::createBitmap(env, dst, true, NULL); } @@ -439,7 +439,7 @@ static int Bitmap_getPixel(JNIEnv* env, jobject, const SkBitmap* bitmap, if (NULL == src) { return 0; } - + SkColor dst[1]; proc(dst, src, 1, bitmap->getColorTable()); return dst[0]; @@ -449,7 +449,7 @@ static void Bitmap_getPixels(JNIEnv* env, jobject, const SkBitmap* bitmap, jintArray pixelArray, int offset, int stride, int x, int y, int width, int height) { SkAutoLockPixels alp(*bitmap); - + ToColorProc proc = ChooseToColorProc(*bitmap); if (NULL == proc) { return; @@ -498,7 +498,7 @@ static void Bitmap_copyPixelsToBuffer(JNIEnv* env, jobject, const SkBitmap* bitmap, jobject jbuffer) { SkAutoLockPixels alp(*bitmap); const void* src = bitmap->getPixels(); - + if (NULL != src) { android::AutoBufferPointer abp(env, jbuffer, JNI_TRUE); @@ -511,7 +511,7 @@ static void Bitmap_copyPixelsFromBuffer(JNIEnv* env, jobject, const SkBitmap* bitmap, jobject jbuffer) { SkAutoLockPixels alp(*bitmap); void* dst = bitmap->getPixels(); - + if (NULL != dst) { android::AutoBufferPointer abp(env, jbuffer, JNI_FALSE); // the java side has already checked that buffer is large enough @@ -519,6 +519,11 @@ static void Bitmap_copyPixelsFromBuffer(JNIEnv* env, jobject, } } +static void Bitmap_prepareToDraw(JNIEnv* env, jobject, SkBitmap* bitmap) { + bitmap->lockPixels(); + bitmap->unlockPixels(); +} + /////////////////////////////////////////////////////////////////////////////// #include @@ -552,7 +557,8 @@ static JNINativeMethod gBitmapMethods[] = { { "nativeCopyPixelsToBuffer", "(ILjava/nio/Buffer;)V", (void*)Bitmap_copyPixelsToBuffer }, { "nativeCopyPixelsFromBuffer", "(ILjava/nio/Buffer;)V", - (void*)Bitmap_copyPixelsFromBuffer } + (void*)Bitmap_copyPixelsFromBuffer }, + { "nativePrepareToDraw", "(I)V", (void*)Bitmap_prepareToDraw } }; #define kClassPathName "android/graphics/Bitmap" diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp index 1fd15d687baf..137707fa93bf 100644 --- a/core/jni/android/graphics/BitmapFactory.cpp +++ b/core/jni/android/graphics/BitmapFactory.cpp @@ -311,7 +311,7 @@ static SkPixelRef* installPixelRef(SkBitmap* bitmap, SkStream* stream, int sampleSize) { SkPixelRef* pr; // only use ashmem for large images, since mmaps come at a price - if (bitmap->getSize() >= 32 * 65536) { + if (bitmap->getSize() >= 32 * 1024) { pr = new SkImageRef_ashmem(stream, bitmap->config(), sampleSize); } else { pr = new SkImageRef_GlobalPool(stream, bitmap->config(), sampleSize); @@ -520,7 +520,10 @@ static jobject nativeDecodeFileDescriptor(JNIEnv* env, jobject clazz, */ AutoFDSeek as(descriptor); - return doDecode(env, stream, padding, bitmapFactoryOptions, true); + /* Allow purgeable iff we own the FD, i.e., in the puregeable and + shareable case. + */ + return doDecode(env, stream, padding, bitmapFactoryOptions, weOwnTheFD); } /* make a deep copy of the asset, and return it as a stream, or NULL if there diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp index 76e6f028d7b6..d1fe83edce66 100644 --- a/core/jni/android/graphics/Paint.cpp +++ b/core/jni/android/graphics/Paint.cpp @@ -69,6 +69,8 @@ public: static void reset(JNIEnv* env, jobject clazz, SkPaint* obj) { obj->reset(); + // utf16 is required for java + obj->setTextEncoding(SkPaint::kUTF16_TextEncoding); } static void assign(JNIEnv* env, jobject clazz, SkPaint* dst, const SkPaint* src) { diff --git a/core/jni/android_backup_BackupDataInput.cpp b/core/jni/android_backup_BackupDataInput.cpp new file mode 100644 index 000000000000..cf8a8e8a5efa --- /dev/null +++ b/core/jni/android_backup_BackupDataInput.cpp @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "FileBackupHelper_native" +#include + +#include "JNIHelp.h" +#include + +#include + +namespace android +{ + +// java.io.FileDescriptor +static jfieldID s_descriptorField = 0; + +// android.backup.BackupDataInput$EntityHeader +static jfieldID s_keyField = 0; +static jfieldID s_dataSizeField = 0; + +static int +ctor_native(JNIEnv* env, jobject clazz, jobject fileDescriptor) +{ + int err; + + int fd = env->GetIntField(fileDescriptor, s_descriptorField); + if (fd == -1) { + return NULL; + } + + return (int)new BackupDataReader(fd); +} + +static void +dtor_native(JNIEnv* env, jobject clazz, int r) +{ + delete (BackupDataReader*)r; +} + +static jint +readNextHeader_native(JNIEnv* env, jobject clazz, int r, jobject entity) +{ + int err; + bool done; + BackupDataReader* reader = (BackupDataReader*)r; + + int type = 0; + + err = reader->ReadNextHeader(&done, &type); + if (done) { + return 1; + } + + if (err != 0) { + return err < 0 ? err : -1; + } + + switch (type) { + case BACKUP_HEADER_ENTITY_V1: + { + String8 key; + size_t dataSize; + err = reader->ReadEntityHeader(&key, &dataSize); + if (err != 0) { + return err < 0 ? err : -1; + } + // TODO: Set the fields in the entity object + jstring keyStr = env->NewStringUTF(key.string()); + env->SetObjectField(entity, s_keyField, keyStr); + env->SetIntField(entity, s_dataSizeField, dataSize); + return 0; + } + default: + LOGD("Unknown header type: 0x%08x\n", type); + return -1; + } + + // done + return 1; +} + +static jint +readEntityData_native(JNIEnv* env, jobject clazz, int r, jbyteArray data, int offset, int size) +{ + int err; + BackupDataReader* reader = (BackupDataReader*)r; + + if (env->GetArrayLength(data) < (size+offset)) { + // size mismatch + return -1; + } + + jbyte* dataBytes = env->GetByteArrayElements(data, NULL); + if (dataBytes == NULL) { + return -2; + } + + err = reader->ReadEntityData(dataBytes+offset, size); + + env->ReleaseByteArrayElements(data, dataBytes, 0); + + return err; +} + +static jint +skipEntityData_native(JNIEnv* env, jobject clazz, int r) +{ + int err; + BackupDataReader* reader = (BackupDataReader*)r; + + err = reader->SkipEntityData(); + + return err; +} + +static const JNINativeMethod g_methods[] = { + { "ctor", "(Ljava/io/FileDescriptor;)I", (void*)ctor_native }, + { "dtor", "(I)V", (void*)dtor_native }, + { "readNextHeader_native", "(ILandroid/backup/BackupDataInput$EntityHeader;)I", + (void*)readNextHeader_native }, + { "readEntityData_native", "(I[BII)I", (void*)readEntityData_native }, + { "skipEntityData_native", "(I)I", (void*)skipEntityData_native }, +}; + +int register_android_backup_BackupDataInput(JNIEnv* env) +{ + //LOGD("register_android_backup_BackupDataInput"); + + jclass clazz; + + clazz = env->FindClass("java/io/FileDescriptor"); + LOG_FATAL_IF(clazz == NULL, "Unable to find class java.io.FileDescriptor"); + s_descriptorField = env->GetFieldID(clazz, "descriptor", "I"); + LOG_FATAL_IF(s_descriptorField == NULL, + "Unable to find descriptor field in java.io.FileDescriptor"); + + clazz = env->FindClass("android/backup/BackupDataInput$EntityHeader"); + LOG_FATAL_IF(clazz == NULL, "Unable to find class android.backup.BackupDataInput.EntityHeader"); + s_keyField = env->GetFieldID(clazz, "key", "Ljava/lang/String;"); + LOG_FATAL_IF(s_keyField == NULL, + "Unable to find key field in android.backup.BackupDataInput.EntityHeader"); + s_dataSizeField = env->GetFieldID(clazz, "dataSize", "I"); + LOG_FATAL_IF(s_dataSizeField == NULL, + "Unable to find dataSize field in android.backup.BackupDataInput.EntityHeader"); + + return AndroidRuntime::registerNativeMethods(env, "android/backup/BackupDataInput", + g_methods, NELEM(g_methods)); +} + +} diff --git a/core/jni/android_backup_BackupDataOutput.cpp b/core/jni/android_backup_BackupDataOutput.cpp new file mode 100644 index 000000000000..d02590e62e69 --- /dev/null +++ b/core/jni/android_backup_BackupDataOutput.cpp @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "FileBackupHelper_native" +#include + +#include "JNIHelp.h" +#include + +#include + +namespace android +{ + +static jfieldID s_descriptorField = 0; + +static int +ctor_native(JNIEnv* env, jobject clazz, jobject fileDescriptor) +{ + int err; + + int fd = env->GetIntField(fileDescriptor, s_descriptorField); + if (fd == -1) { + return NULL; + } + + return (int)new BackupDataWriter(fd); +} + +static void +dtor_native(JNIEnv* env, jobject clazz, int w) +{ + delete (BackupDataWriter*)w; +} + +static jint +writeEntityHeader_native(JNIEnv* env, jobject clazz, int w, jstring key, int dataSize) +{ + int err; + BackupDataWriter* writer = (BackupDataWriter*)w; + + const char* keyUTF = env->GetStringUTFChars(key, NULL); + if (keyUTF == NULL) { + return -1; + } + + err = writer->WriteEntityHeader(String8(keyUTF), dataSize); + + env->ReleaseStringUTFChars(key, keyUTF); + + return err; +} + +static jint +writeEntityData_native(JNIEnv* env, jobject clazz, int w, jbyteArray data, int size) +{ + int err; + BackupDataWriter* writer = (BackupDataWriter*)w; + + if (env->GetArrayLength(data) > size) { + // size mismatch + return -1; + } + + jbyte* dataBytes = env->GetByteArrayElements(data, NULL); + if (dataBytes == NULL) { + return -1; + } + + err = writer->WriteEntityData(dataBytes, size); + + env->ReleaseByteArrayElements(data, dataBytes, JNI_ABORT); + + return err; +} + +static void +setKeyPrefix_native(JNIEnv* env, jobject clazz, int w, jstring keyPrefixObj) +{ + int err; + BackupDataWriter* writer = (BackupDataWriter*)w; + + const char* keyPrefixUTF = env->GetStringUTFChars(keyPrefixObj, NULL); + String8 keyPrefix(keyPrefixUTF ? keyPrefixUTF : ""); + + writer->SetKeyPrefix(keyPrefix); + + env->ReleaseStringUTFChars(keyPrefixObj, keyPrefixUTF); +} + +static const JNINativeMethod g_methods[] = { + { "ctor", "(Ljava/io/FileDescriptor;)I", (void*)ctor_native }, + { "dtor", "(I)V", (void*)dtor_native }, + { "writeEntityHeader_native", "(ILjava/lang/String;I)I", (void*)writeEntityHeader_native }, + { "writeEntityData_native", "(I[BI)I", (void*)writeEntityData_native }, + { "setKeyPrefix_native", "(ILjava/lang/String;)V", (void*)setKeyPrefix_native }, +}; + +int register_android_backup_BackupDataOutput(JNIEnv* env) +{ + //LOGD("register_android_backup_BackupDataOutput"); + + jclass clazz; + + clazz = env->FindClass("java/io/FileDescriptor"); + LOG_FATAL_IF(clazz == NULL, "Unable to find class java.io.FileDescriptor"); + s_descriptorField = env->GetFieldID(clazz, "descriptor", "I"); + LOG_FATAL_IF(s_descriptorField == NULL, + "Unable to find descriptor field in java.io.FileDescriptor"); + + return AndroidRuntime::registerNativeMethods(env, "android/backup/BackupDataOutput", + g_methods, NELEM(g_methods)); +} + +} diff --git a/core/jni/android_backup_BackupHelperDispatcher.cpp b/core/jni/android_backup_BackupHelperDispatcher.cpp new file mode 100644 index 000000000000..2e3f0b969127 --- /dev/null +++ b/core/jni/android_backup_BackupHelperDispatcher.cpp @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "BackupHelperDispatcher_native" +#include + +#include "JNIHelp.h" +#include + +#include +#include +#include + + +#define VERSION_1_HEADER 0x01706c48 // 'Hlp'1 little endian + +namespace android +{ + +struct chunk_header_v1 { + int headerSize; + int version; + int dataSize; // corresponds to Header.chunkSize + int nameLength; // not including the NULL terminator, which is not written to the file +}; + +// java.io.FileDescriptor +static jfieldID s_descriptorField = 0; +static jfieldID s_chunkSizeField = 0; +static jfieldID s_keyPrefixField = 0; + +static int +readHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj) +{ + chunk_header_v1 flattenedHeader; + int fd; + ssize_t amt; + String8 keyPrefix; + char* buf; + + fd = env->GetIntField(fdObj, s_descriptorField); + + amt = read(fd, &flattenedHeader.headerSize, sizeof(flattenedHeader.headerSize)); + if (amt != sizeof(flattenedHeader.headerSize)) { + return -1; + } + + int remainingHeader = flattenedHeader.headerSize - sizeof(flattenedHeader.headerSize); + + if (flattenedHeader.headerSize < (int)sizeof(chunk_header_v1)) { + LOGW("Skipping unknown header: %d bytes", flattenedHeader.headerSize); + if (remainingHeader > 0) { + lseek(fd, remainingHeader, SEEK_CUR); + // >0 means skip this chunk + return 1; + } + } + + amt = read(fd, &flattenedHeader.version, + sizeof(chunk_header_v1)-sizeof(flattenedHeader.headerSize)); + if (amt <= 0) { + LOGW("Failed reading chunk header"); + return -1; + } + remainingHeader -= sizeof(chunk_header_v1)-sizeof(flattenedHeader.headerSize); + + if (flattenedHeader.version != VERSION_1_HEADER) { + LOGW("Skipping unknown header version: 0x%08x, %d bytes", flattenedHeader.version, + flattenedHeader.headerSize); + if (remainingHeader > 0) { + lseek(fd, remainingHeader, SEEK_CUR); + // >0 means skip this chunk + return 1; + } + } + +#if 0 + LOGD("chunk header:"); + LOGD(" headerSize=%d", flattenedHeader.headerSize); + LOGD(" version=0x%08x", flattenedHeader.version); + LOGD(" dataSize=%d", flattenedHeader.dataSize); + LOGD(" nameLength=%d", flattenedHeader.nameLength); +#endif + + if (flattenedHeader.dataSize < 0 || flattenedHeader.nameLength < 0 || + remainingHeader < flattenedHeader.nameLength) { + LOGW("Malformed V1 header remainingHeader=%d dataSize=%d nameLength=%d", remainingHeader, + flattenedHeader.dataSize, flattenedHeader.nameLength); + return -1; + } + + buf = keyPrefix.lockBuffer(flattenedHeader.nameLength); + if (buf == NULL) { + LOGW("unable to allocate %d bytes", flattenedHeader.nameLength); + return -1; + } + + amt = read(fd, buf, flattenedHeader.nameLength); + buf[flattenedHeader.nameLength] = 0; + + keyPrefix.unlockBuffer(flattenedHeader.nameLength); + + remainingHeader -= flattenedHeader.nameLength; + + if (remainingHeader > 0) { + lseek(fd, remainingHeader, SEEK_CUR); + } + + env->SetIntField(headerObj, s_chunkSizeField, flattenedHeader.dataSize); + env->SetObjectField(headerObj, s_keyPrefixField, env->NewStringUTF(keyPrefix.string())); + + return 0; +} + +static int +skipChunk_native(JNIEnv* env, jobject clazz, jobject fdObj, jint bytesToSkip) +{ + int fd; + + fd = env->GetIntField(fdObj, s_descriptorField); + + lseek(fd, bytesToSkip, SEEK_CUR); + + return 0; +} + +static int +padding_len(int len) +{ + len = len % 4; + return len == 0 ? len : 4 - len; +} + +static int +allocateHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj) +{ + int pos; + jstring nameObj; + int nameLength; + int namePadding; + int headerSize; + int fd; + + fd = env->GetIntField(fdObj, s_descriptorField); + + nameObj = (jstring)env->GetObjectField(headerObj, s_keyPrefixField); + + nameLength = env->GetStringUTFLength(nameObj); + namePadding = padding_len(nameLength); + + headerSize = sizeof(chunk_header_v1) + nameLength + namePadding; + + pos = lseek(fd, 0, SEEK_CUR); + + lseek(fd, headerSize, SEEK_CUR); + + return pos; +} + +static int +writeHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj, jint pos) +{ + int err; + chunk_header_v1 header; + int fd; + int namePadding; + int prevPos; + jstring nameObj; + const char* buf; + + fd = env->GetIntField(fdObj, s_descriptorField); + prevPos = lseek(fd, 0, SEEK_CUR); + + nameObj = (jstring)env->GetObjectField(headerObj, s_keyPrefixField); + header.nameLength = env->GetStringUTFLength(nameObj); + namePadding = padding_len(header.nameLength); + + header.headerSize = sizeof(chunk_header_v1) + header.nameLength + namePadding; + header.version = VERSION_1_HEADER; + header.dataSize = prevPos - (pos + header.headerSize); + + lseek(fd, pos, SEEK_SET); + err = write(fd, &header, sizeof(chunk_header_v1)); + if (err != sizeof(chunk_header_v1)) { + return errno; + } + + buf = env->GetStringUTFChars(nameObj, NULL); + err = write(fd, buf, header.nameLength); + env->ReleaseStringUTFChars(nameObj, buf); + if (err != header.nameLength) { + return errno; + } + + if (namePadding != 0) { + int zero = 0; + err = write(fd, &zero, namePadding); + if (err != namePadding) { + return errno; + } + } + + lseek(fd, prevPos, SEEK_SET); + return 0; +} + +static const JNINativeMethod g_methods[] = { + { "readHeader_native", + "(Landroid/backup/BackupHelperDispatcher$Header;Ljava/io/FileDescriptor;)I", + (void*)readHeader_native }, + { "skipChunk_native", + "(Ljava/io/FileDescriptor;I)I", + (void*)skipChunk_native }, + { "allocateHeader_native", + "(Landroid/backup/BackupHelperDispatcher$Header;Ljava/io/FileDescriptor;)I", + (void*)allocateHeader_native }, + { "writeHeader_native", + "(Landroid/backup/BackupHelperDispatcher$Header;Ljava/io/FileDescriptor;I)I", + (void*)writeHeader_native }, +}; + +int register_android_backup_BackupHelperDispatcher(JNIEnv* env) +{ + jclass clazz; + + clazz = env->FindClass("java/io/FileDescriptor"); + LOG_FATAL_IF(clazz == NULL, "Unable to find class java.io.FileDescriptor"); + s_descriptorField = env->GetFieldID(clazz, "descriptor", "I"); + LOG_FATAL_IF(s_descriptorField == NULL, + "Unable to find descriptor field in java.io.FileDescriptor"); + + clazz = env->FindClass("android/backup/BackupHelperDispatcher$Header"); + LOG_FATAL_IF(clazz == NULL, + "Unable to find class android.backup.BackupHelperDispatcher.Header"); + s_chunkSizeField = env->GetFieldID(clazz, "chunkSize", "I"); + LOG_FATAL_IF(s_chunkSizeField == NULL, + "Unable to find chunkSize field in android.backup.BackupHelperDispatcher.Header"); + s_keyPrefixField = env->GetFieldID(clazz, "keyPrefix", "Ljava/lang/String;"); + LOG_FATAL_IF(s_keyPrefixField == NULL, + "Unable to find keyPrefix field in android.backup.BackupHelperDispatcher.Header"); + + return AndroidRuntime::registerNativeMethods(env, "android/backup/BackupHelperDispatcher", + g_methods, NELEM(g_methods)); +} + +} diff --git a/core/jni/android_backup_FileBackupHelper.cpp b/core/jni/android_backup_FileBackupHelper.cpp deleted file mode 100644 index c6de3a52f69b..000000000000 --- a/core/jni/android_backup_FileBackupHelper.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define LOG_TAG "FileBackupHelper_native" -#include - -#include "JNIHelp.h" -#include - -#include - -namespace android -{ - -static jfieldID s_descriptorField = 0; - -static int -performBackup_native(JNIEnv* env, jobject clazz, jstring basePath, jobject oldState, jobject data, - jobject newState, jobjectArray files) -{ - int err; - - // all parameters have already been checked against null - LOGD("oldState=%p newState=%p data=%p\n", oldState, newState, data); - int oldStateFD = oldState != NULL ? env->GetIntField(oldState, s_descriptorField) : -1; - int newStateFD = env->GetIntField(newState, s_descriptorField); - int dataFD = env->GetIntField(data, s_descriptorField); - - char const* basePathUTF = env->GetStringUTFChars(basePath, NULL); - LOGD("basePathUTF=\"%s\"\n", basePathUTF); - const int fileCount = env->GetArrayLength(files); - char const** filesUTF = (char const**)malloc(sizeof(char*)*fileCount); - for (int i=0; iGetStringUTFChars((jstring)env->GetObjectArrayElement(files, i), NULL); - } - - err = back_up_files(oldStateFD, dataFD, newStateFD, basePathUTF, filesUTF, fileCount); - - for (int i=0; iReleaseStringUTFChars((jstring)env->GetObjectArrayElement(files, i), filesUTF[i]); - } - free(filesUTF); - env->ReleaseStringUTFChars(basePath, basePathUTF); - - return err; -} - -static const JNINativeMethod g_methods[] = { - { "performBackup_native", - "(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;" - "Ljava/io/FileDescriptor;[Ljava/lang/String;)I", - (void*)performBackup_native }, -}; - -int register_android_backup_FileBackupHelper(JNIEnv* env) -{ - LOGD("register_android_backup_FileBackupHelper"); - - jclass clazz; - - clazz = env->FindClass("java/io/FileDescriptor"); - LOG_FATAL_IF(clazz == NULL, "Unable to find class java.io.FileDescriptor"); - s_descriptorField = env->GetFieldID(clazz, "descriptor", "I"); - LOG_FATAL_IF(s_descriptorField == NULL, - "Unable to find descriptor field in java.io.FileDescriptor"); - - return AndroidRuntime::registerNativeMethods(env, "android/backup/FileBackupHelper", - g_methods, NELEM(g_methods)); -} - -} diff --git a/core/jni/android_backup_FileBackupHelperBase.cpp b/core/jni/android_backup_FileBackupHelperBase.cpp new file mode 100644 index 000000000000..8225a36b4164 --- /dev/null +++ b/core/jni/android_backup_FileBackupHelperBase.cpp @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "FileBackupHelper_native" +#include + +#include "JNIHelp.h" +#include + +#include + +namespace android +{ + +// java.io.FileDescriptor +static jfieldID s_descriptorField = 0; + +static int +ctor(JNIEnv* env, jobject clazz) +{ + return (int)new RestoreHelperBase(); +} + +static void +dtor(JNIEnv* env, jobject clazz, jint ptr) +{ + delete (RestoreHelperBase*)ptr; +} + +static int +performBackup_native(JNIEnv* env, jobject clazz, jobject oldState, int data, + jobject newState, jobjectArray files, jobjectArray keys) +{ + int err; + + // all parameters have already been checked against null + int oldStateFD = oldState != NULL ? env->GetIntField(oldState, s_descriptorField) : -1; + int newStateFD = env->GetIntField(newState, s_descriptorField); + BackupDataWriter* dataStream = (BackupDataWriter*)data; + + const int fileCount = env->GetArrayLength(files); + char const** filesUTF = (char const**)malloc(sizeof(char*)*fileCount); + for (int i=0; iGetStringUTFChars((jstring)env->GetObjectArrayElement(files, i), NULL); + } + + const int keyCount = env->GetArrayLength(keys); + char const** keysUTF = (char const**)malloc(sizeof(char*)*keyCount); + for (int i=0; iGetStringUTFChars((jstring)env->GetObjectArrayElement(keys, i), NULL); + } + + err = back_up_files(oldStateFD, dataStream, newStateFD, filesUTF, keysUTF, fileCount); + + for (int i=0; iReleaseStringUTFChars((jstring)env->GetObjectArrayElement(files, i), filesUTF[i]); + } + free(filesUTF); + + for (int i=0; iReleaseStringUTFChars((jstring)env->GetObjectArrayElement(keys, i), keysUTF[i]); + } + free(keysUTF); + + return err; +} + + +static int +writeFile_native(JNIEnv* env, jobject clazz, jint ptr, jstring filenameObj, int backupReaderPtr) +{ + int err; + RestoreHelperBase* restore = (RestoreHelperBase*)ptr; + BackupDataReader* reader = (BackupDataReader*)backupReaderPtr; + char const* filename; + + filename = env->GetStringUTFChars(filenameObj, NULL); + + err = restore->WriteFile(String8(filename), reader); + + env->ReleaseStringUTFChars(filenameObj, filename); + + return err; +} + +static int +writeSnapshot_native(JNIEnv* env, jobject clazz, jint ptr, jobject fileDescriptor) +{ + int err; + + RestoreHelperBase* restore = (RestoreHelperBase*)ptr; + int fd = env->GetIntField(fileDescriptor, s_descriptorField); + + err = restore->WriteSnapshot(fd); + + return err; +} + +static const JNINativeMethod g_methods[] = { + { "ctor", "()I", (void*)ctor }, + { "dtor", "(I)V", (void*)dtor }, + { "performBackup_native", + "(Ljava/io/FileDescriptor;ILjava/io/FileDescriptor;[Ljava/lang/String;[Ljava/lang/String;)I", + (void*)performBackup_native }, + { "writeFile_native", "(ILjava/lang/String;I)I", (void*)writeFile_native }, + { "writeSnapshot_native", "(ILjava/io/FileDescriptor;)I", (void*)writeSnapshot_native }, +}; + +int register_android_backup_FileBackupHelperBase(JNIEnv* env) +{ + jclass clazz; + + clazz = env->FindClass("java/io/FileDescriptor"); + LOG_FATAL_IF(clazz == NULL, "Unable to find class java.io.FileDescriptor"); + s_descriptorField = env->GetFieldID(clazz, "descriptor", "I"); + LOG_FATAL_IF(s_descriptorField == NULL, + "Unable to find descriptor field in java.io.FileDescriptor"); + + return AndroidRuntime::registerNativeMethods(env, "android/backup/FileBackupHelperBase", + g_methods, NELEM(g_methods)); +} + +} diff --git a/core/jni/android_bluetooth_Database.cpp b/core/jni/android_bluetooth_Database.cpp index 136c9a328d55..73b8efd3e3f9 100644 --- a/core/jni/android_bluetooth_Database.cpp +++ b/core/jni/android_bluetooth_Database.cpp @@ -53,6 +53,7 @@ static void initializeNativeDataNative(JNIEnv* env, jobject object) { LOGE("Could not get onto the system bus!"); dbus_error_free(&err); } + dbus_connection_set_exit_on_disconnect(conn, FALSE); } #endif } diff --git a/core/jni/android_emoji_EmojiFactory.cpp b/core/jni/android_emoji_EmojiFactory.cpp index 59f63a83cac5..7d6e24fa2567 100644 --- a/core/jni/android_emoji_EmojiFactory.cpp +++ b/core/jni/android_emoji_EmojiFactory.cpp @@ -1,7 +1,7 @@ #include "SkTypes.h" #include "SkImageDecoder.h" -#define LOG_TAG "DoCoMoEmojiFactory_jni" +#define LOG_TAG "EmojiFactory_jni" #include #include @@ -13,15 +13,11 @@ namespace android { -// Note: This class is originally developed so that libandroid_runtime does -// not have to depend on libemoji which is optional library. However, we -// cannot use this class, since current (2009-02-16) bionic libc does not allow -// dlopen()-ing inside dlopen(), while not only this class but also libemoji -// uses dlopen(). class EmojiFactoryCaller { public: - EmojiFactoryCaller(); + EmojiFactoryCaller() {} virtual ~EmojiFactoryCaller(); + bool Init(); EmojiFactory *TryCallGetImplementation(const char* name); EmojiFactory *TryCallGetAvailableImplementation(); private: @@ -30,35 +26,45 @@ class EmojiFactoryCaller { EmojiFactory *(*m_get_available_implementation)(); }; -EmojiFactoryCaller::EmojiFactoryCaller() { +bool EmojiFactoryCaller::Init() { + const char* error_msg; m_handle = dlopen("libemoji.so", RTLD_LAZY | RTLD_LOCAL); - const char* error_str = dlerror(); - if (error_str) { - LOGI("Failed to load libemoji.so: %s", error_str); - return; + + if (m_handle == NULL) { + error_msg = "Failed to load libemoji.so"; + goto FAIL; } m_get_implementation = reinterpret_cast( dlsym(m_handle, "GetImplementation")); - error_str = dlerror(); - if (error_str) { - LOGE("Failed to get symbol of GetImplementation: %s", error_str); - dlclose(m_handle); - m_handle = NULL; - return; + if (m_get_implementation == NULL) { + error_msg = "Failed to get symbol of GetImplementation"; + goto FAIL; } m_get_available_implementation = reinterpret_cast( dlsym(m_handle,"GetAvailableImplementation")); - error_str = dlerror(); - if (error_str) { - LOGE("Failed to get symbol of GetAvailableImplementation: %s", error_str); + if (m_get_available_implementation == NULL) { + error_msg = "Failed to get symbol of GetAvailableImplementation"; + goto FAIL; + } + + return true; + +FAIL: + const char* error_str = dlerror(); + if (error_str == NULL) { + error_str = "unknown reason"; + } + + LOGE("%s: %s", error_msg, error_str); + if (m_handle != NULL) { dlclose(m_handle); m_handle = NULL; - return; } + return false; } EmojiFactoryCaller::~EmojiFactoryCaller() { @@ -82,10 +88,9 @@ EmojiFactory *EmojiFactoryCaller::TryCallGetAvailableImplementation() { return m_get_available_implementation(); } -// Note: bionic libc's dlopen() does not allow recursive dlopen(). So currently -// we cannot use EmojiFactoryCaller here. -// static EmojiFactoryCaller* gCaller; -// static pthread_once_t g_once = PTHREAD_ONCE_INIT; +static EmojiFactoryCaller* gCaller; +static pthread_once_t g_once = PTHREAD_ONCE_INIT; +static bool lib_emoji_factory_is_ready; static jclass gString_class; @@ -95,9 +100,10 @@ static jmethodID gBitmap_constructorMethodID; static jclass gEmojiFactory_class; static jmethodID gEmojiFactory_constructorMethodID; -// static void InitializeCaller() { -// gCaller = new EmojiFactoryCaller(); -// } +static void InitializeCaller() { + gCaller = new EmojiFactoryCaller(); + lib_emoji_factory_is_ready = gCaller->Init(); +} static jobject create_java_EmojiFactory( JNIEnv* env, EmojiFactory* factory, jstring name) { @@ -116,19 +122,23 @@ static jobject create_java_EmojiFactory( static jobject android_emoji_EmojiFactory_newInstance( JNIEnv* env, jobject clazz, jstring name) { - // pthread_once(&g_once, InitializeCaller); - if (NULL == name) { return NULL; } + pthread_once(&g_once, InitializeCaller); + if (!lib_emoji_factory_is_ready) { + return NULL; + } const jchar* jchars = env->GetStringChars(name, NULL); jsize len = env->GetStringLength(name); String8 str(String16(jchars, len)); - // EmojiFactory *factory = gCaller->TryCallGetImplementation(str.string()); - EmojiFactory *factory = EmojiFactory::GetImplementation(str.string()); - + EmojiFactory *factory = gCaller->TryCallGetImplementation(str.string()); + // EmojiFactory *factory = EmojiFactory::GetImplementation(str.string()); + if (NULL == factory) { + return NULL; + } env->ReleaseStringChars(name, jchars); return create_java_EmojiFactory(env, factory, name); @@ -136,10 +146,13 @@ static jobject android_emoji_EmojiFactory_newInstance( static jobject android_emoji_EmojiFactory_newAvailableInstance( JNIEnv* env, jobject clazz) { - // pthread_once(&g_once, InitializeCaller); + pthread_once(&g_once, InitializeCaller); + if (!lib_emoji_factory_is_ready) { + return NULL; + } - // EmojiFactory *factory = gCaller->TryCallGetAvailableImplementation(); - EmojiFactory *factory = EmojiFactory::GetAvailableImplementation(); + EmojiFactory *factory = gCaller->TryCallGetAvailableImplementation(); + // EmojiFactory *factory = EmojiFactory::GetAvailableImplementation(); if (NULL == factory) { return NULL; } diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp index c10799316b81..77a8a7286c63 100644 --- a/core/jni/android_hardware_Camera.cpp +++ b/core/jni/android_hardware_Camera.cpp @@ -38,12 +38,6 @@ enum CallbackMessageID { kErrorCallback = 5 }; -enum CameraError { - kCameraErrorUnknown = 1, - kCameraErrorMediaServer = 100 -}; - - struct fields_t { jfieldID context; jfieldID surface; @@ -53,19 +47,33 @@ struct fields_t { static fields_t fields; static Mutex sLock; -struct camera_context_t { +// provides persistent context for calls from native code to Java +class JNICameraContext: public CameraListener +{ +public: + JNICameraContext(JNIEnv* env, jobject weak_this, jclass clazz, const sp& camera); + ~JNICameraContext() { release(); } + virtual void notify(int32_t msgType, int32_t ext1, int32_t ext2); + virtual void postData(int32_t msgType, const sp& dataPtr); + sp getCamera() { Mutex::Autolock _l(mLock); return mCamera; } + void release(); + +private: + void copyAndPost(JNIEnv* env, const sp& dataPtr, int msgType); + jobject mCameraJObjectWeak; // weak reference to java object jclass mCameraJClass; // strong reference to java class sp mCamera; // strong reference to native object + Mutex mLock; }; -sp get_native_camera(JNIEnv *env, jobject thiz, camera_context_t** pContext) +sp get_native_camera(JNIEnv *env, jobject thiz, JNICameraContext** pContext) { sp camera; Mutex::Autolock _l(sLock); - camera_context_t* context = reinterpret_cast(env->GetIntField(thiz, fields.context)); + JNICameraContext* context = reinterpret_cast(env->GetIntField(thiz, fields.context)); if (context != NULL) { - camera = context->mCamera; + camera = context->getCamera(); } LOGV("get_native_camera: context=%p, camera=%p", context, camera.get()); if (camera == 0) { @@ -76,30 +84,108 @@ sp get_native_camera(JNIEnv *env, jobject thiz, camera_context_t** pCont return camera; } -static void err_callback(status_t err, void *cookie) +JNICameraContext::JNICameraContext(JNIEnv* env, jobject weak_this, jclass clazz, const sp& camera) { - camera_context_t* context = reinterpret_cast(cookie); - if ((context == NULL) || (context->mCamera == 0)) return; + mCameraJObjectWeak = env->NewGlobalRef(weak_this); + mCameraJClass = (jclass)env->NewGlobalRef(clazz); + mCamera = camera; +} - LOGV("err_callback: context=%p, camera=%p", context, context->mCamera.get()); +void JNICameraContext::release() +{ + LOGV("release"); + Mutex::Autolock _l(mLock); + JNIEnv *env = AndroidRuntime::getJNIEnv(); - int error; - switch (err) { - case DEAD_OBJECT: - error = kCameraErrorMediaServer; - break; - default: - error = kCameraErrorUnknown; - break; + if (mCameraJObjectWeak != NULL) { + env->DeleteGlobalRef(mCameraJObjectWeak); + mCameraJObjectWeak = NULL; + } + if (mCameraJClass != NULL) { + env->DeleteGlobalRef(mCameraJClass); + mCameraJClass = NULL; + } + mCamera.clear(); +} + +void JNICameraContext::notify(int32_t msgType, int32_t ext1, int32_t ext2) +{ + LOGV("notify"); + + // VM pointer will be NULL if object is released + Mutex::Autolock _l(mLock); + if (mCameraJObjectWeak == NULL) { + LOGW("callback on dead camera object"); + return; + } + JNIEnv *env = AndroidRuntime::getJNIEnv(); + env->CallStaticVoidMethod(mCameraJClass, fields.post_event, + mCameraJObjectWeak, msgType, ext1, ext2); +} + +void JNICameraContext::copyAndPost(JNIEnv* env, const sp& dataPtr, int msgType) +{ + jbyteArray obj = NULL; + + // allocate Java byte array and copy data + if (dataPtr != NULL) { + ssize_t offset; + size_t size; + sp heap = dataPtr->getMemory(&offset, &size); + LOGV("postData: off=%d, size=%d", offset, size); + uint8_t *heapBase = (uint8_t*)heap->base(); + + if (heapBase != NULL) { + uint8_t *data = heapBase + offset; + obj = env->NewByteArray(size); + if (obj == NULL) { + LOGE("Couldn't allocate byte array for JPEG data"); + env->ExceptionClear(); + } else { + jbyte *bytes = env->GetByteArrayElements(obj, NULL); + memcpy(bytes, data, size); + env->ReleaseByteArrayElements(obj, bytes, 0); + + } + } else { + LOGE("image heap is NULL"); + } + } + + // post image data to Java + env->CallStaticVoidMethod(mCameraJClass, fields.post_event, + mCameraJObjectWeak, msgType, 0, 0, obj); + if (obj) { + env->DeleteLocalRef(obj); } +} +void JNICameraContext::postData(int32_t msgType, const sp& dataPtr) +{ + // VM pointer will be NULL if object is released + Mutex::Autolock _l(mLock); JNIEnv *env = AndroidRuntime::getJNIEnv(); - if (env == NULL) { - LOGE("err_callback on dead VM"); + if (mCameraJObjectWeak == NULL) { + LOGW("callback on dead camera object"); return; } - env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event, - context->mCameraJObjectWeak, kErrorCallback, error, 0, NULL); + + // return data based on callback type + switch(msgType) { + case CAMERA_MSG_VIDEO_FRAME: + // should never happen + break; + // don't return raw data to Java + case CAMERA_MSG_RAW_IMAGE: + LOGV("rawCallback"); + env->CallStaticVoidMethod(mCameraJClass, fields.post_event, + mCameraJObjectWeak, msgType, 0, 0, NULL); + break; + default: + LOGV("dataCallback(%d, %p)", msgType, dataPtr.get()); + copyAndPost(env, dataPtr, msgType); + break; + } } // connect to camera service @@ -115,33 +201,24 @@ static void android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, jobj // make sure camera hardware is alive if (camera->getStatus() != NO_ERROR) { - jniThrowException(env, "java/io/IOException", "Camera initialization failed"); + jniThrowException(env, "java/lang/RuntimeException", "Camera initialization failed"); return; } jclass clazz = env->GetObjectClass(thiz); if (clazz == NULL) { - LOGE("Can't find android/hardware/Camera"); - // XXX no idea what to throw here, can this even happen? - jniThrowException(env, "java/lang/Exception", NULL); + jniThrowException(env, "java/lang/RuntimeException", "Can't find android/hardware/Camera"); return; } // We use a weak reference so the Camera object can be garbage collected. // The reference is only used as a proxy for callbacks. - camera_context_t* context = new camera_context_t; - context->mCameraJObjectWeak = env->NewGlobalRef(weak_this); - context->mCameraJClass = (jclass)env->NewGlobalRef(clazz); - context->mCamera = camera; + sp context = new JNICameraContext(env, weak_this, clazz, camera); + context->incStrong(thiz); + camera->setListener(context); // save context in opaque field - env->SetIntField(thiz, fields.context, (int)context); - - LOGV("native_setup: mCameraJObjectWeak=%x, camera_obj=%x, context=%p", - (int)context->mCameraJObjectWeak, (int)thiz, context); - - // set error callback - camera->setErrorCallback(err_callback, context); + env->SetIntField(thiz, fields.context, (int)context.get()); } // disconnect from camera service @@ -150,11 +227,11 @@ static void android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, jobj // finalizer is invoked later. static void android_hardware_Camera_release(JNIEnv *env, jobject thiz) { - camera_context_t* context = NULL; + JNICameraContext* context = NULL; sp camera; { Mutex::Autolock _l(sLock); - context = reinterpret_cast(env->GetIntField(thiz, fields.context)); + context = reinterpret_cast(env->GetIntField(thiz, fields.context)); // Make sure we do not attempt to callback on a deleted Java object. env->SetIntField(thiz, fields.context, 0); @@ -162,21 +239,18 @@ static void android_hardware_Camera_release(JNIEnv *env, jobject thiz) // clean up if release has not been called before if (context != NULL) { - camera = context->mCamera; - context->mCamera.clear(); + camera = context->getCamera(); + context->release(); LOGV("native_release: context=%p camera=%p", context, camera.get()); // clear callbacks if (camera != NULL) { - camera->setPreviewCallback(NULL, NULL, FRAME_CALLBACK_FLAG_NOOP); - camera->setErrorCallback(NULL, NULL); + camera->setPreviewCallbackFlags(FRAME_CALLBACK_FLAG_NOOP); camera->disconnect(); - env->DeleteGlobalRef(context->mCameraJObjectWeak); - env->DeleteGlobalRef(context->mCameraJClass); } // remove context to prevent further Java access - delete context; + context->decStrong(thiz); } } @@ -186,54 +260,15 @@ static void android_hardware_Camera_setPreviewDisplay(JNIEnv *env, jobject thiz, sp camera = get_native_camera(env, thiz, NULL); if (camera == 0) return; - sp surface = reinterpret_cast(env->GetIntField(jSurface, fields.surface)); + sp surface = NULL; + if (jSurface != NULL) { + surface = reinterpret_cast(env->GetIntField(jSurface, fields.surface)); + } if (camera->setPreviewDisplay(surface) != NO_ERROR) { jniThrowException(env, "java/io/IOException", "setPreviewDisplay failed"); } } -static void preview_callback(const sp& mem, void *cookie) -{ - LOGV("preview_callback"); - JNIEnv *env = AndroidRuntime::getJNIEnv(); - if (env == NULL) { - LOGE("preview_callback on dead VM"); - return; - } - camera_context_t* context = reinterpret_cast(cookie); - if ((context == NULL) || (context->mCamera == 0)) { - LOGW("context or camera is NULL in preview_callback"); - return; - } - LOGV("native_release: context=%p camera=%p", context, context->mCamera.get()); - - int arg1 = 0, arg2 = 0; - jobject obj = NULL; - - ssize_t offset; - size_t size; - sp heap = mem->getMemory(&offset, &size); - - uint8_t *data = ((uint8_t *)heap->base()) + offset; - - jbyteArray array = env->NewByteArray(size); - if (array == NULL) { - LOGE("Couldn't allocate byte array for YUV data"); - env->ExceptionClear(); - return; - } - - jbyte *bytes = env->GetByteArrayElements(array, NULL); - memcpy(bytes, data, size); - env->ReleaseByteArrayElements(array, bytes, 0); - - obj = array; - - env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event, - context->mCameraJObjectWeak, kPreviewCallback, arg1, arg2, obj); - env->DeleteLocalRef(array); -} - static void android_hardware_Camera_startPreview(JNIEnv *env, jobject thiz) { LOGV("startPreview"); @@ -241,7 +276,7 @@ static void android_hardware_Camera_startPreview(JNIEnv *env, jobject thiz) if (camera == 0) return; if (camera->startPreview() != NO_ERROR) { - jniThrowException(env, "java/io/IOException", "startPreview failed"); + jniThrowException(env, "java/lang/RuntimeException", "startPreview failed"); return; } } @@ -269,7 +304,7 @@ static void android_hardware_Camera_setHasPreviewCallback(JNIEnv *env, jobject t // Important: Only install preview_callback if the Java code has called // setPreviewCallback() with a non-null value, otherwise we'd pay to memcpy // each preview frame for nothing. - camera_context_t* context; + JNICameraContext* context; sp camera = get_native_camera(env, thiz, &context); if (camera == 0) return; @@ -279,130 +314,32 @@ static void android_hardware_Camera_setHasPreviewCallback(JNIEnv *env, jobject t } else { callback_flag = FRAME_CALLBACK_FLAG_NOOP; } - camera->setPreviewCallback(installed ? preview_callback : NULL, context, callback_flag); -} - -static void autofocus_callback_impl(bool success, void *cookie) -{ - LOGV("autoFocusCallback"); - camera_context_t* context = reinterpret_cast(cookie); - - JNIEnv *env = AndroidRuntime::getJNIEnv(); - if (env == NULL) { - LOGE("autofocus_callback on dead VM"); - return; - } - env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event, - context->mCameraJObjectWeak, kAutoFocusCallback, success, 0, NULL); + camera->setPreviewCallbackFlags(callback_flag); } static void android_hardware_Camera_autoFocus(JNIEnv *env, jobject thiz) { LOGV("autoFocus"); - camera_context_t* context; + JNICameraContext* context; sp c = get_native_camera(env, thiz, &context); if (c == 0) return; - c->setAutoFocusCallback(autofocus_callback_impl, context); if (c->autoFocus() != NO_ERROR) { - jniThrowException(env, "java/io/IOException", "autoFocus failed"); - } -} - -static void jpeg_callback(const sp& mem, void *cookie) -{ - LOGV("jpegCallback"); - camera_context_t* context = reinterpret_cast(cookie); - - JNIEnv *env = AndroidRuntime::getJNIEnv(); - if (env == NULL) { - LOGE("jpeg`_callback on dead VM"); - return; - } - int arg1 = 0, arg2 = 0; - jobject obj = NULL; - - if (mem == NULL) { - env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event, - context->mCameraJObjectWeak, kJpegCallback, arg1, arg2, NULL); - return; + jniThrowException(env, "java/lang/RuntimeException", "autoFocus failed"); } - ssize_t offset; - size_t size; - sp heap = mem->getMemory(&offset, &size); - LOGV("jpeg_callback: mem off=%d, size=%d", offset, size); - - uint8_t *heap_base = (uint8_t *)heap->base(); - if (heap_base == NULL) { - LOGE("YUV heap is NULL"); - return; - } - - uint8_t *data = heap_base + offset; - - jbyteArray array = env->NewByteArray(size); - if (array == NULL) { - LOGE("Couldn't allocate byte array for JPEG data"); - env->ExceptionClear(); - return; - } - - jbyte *bytes = env->GetByteArrayElements(array, NULL); - memcpy(bytes, data, size); - env->ReleaseByteArrayElements(array, bytes, 0); - - obj = array; - - env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event, - context->mCameraJObjectWeak, kJpegCallback, arg1, arg2, obj); - env->DeleteLocalRef(array); -} - -static void shutter_callback_impl(void *cookie) -{ - LOGV("shutterCallback"); - camera_context_t* context = reinterpret_cast(cookie); - - JNIEnv *env = AndroidRuntime::getJNIEnv(); - if (env == NULL) { - LOGE("shutter_callback on dead VM"); - return; - } - env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event, - context->mCameraJObjectWeak, kShutterCallback, 0, 0, NULL); -} - -static void raw_callback(const sp& mem __attribute__((unused)), - void *cookie) -{ - LOGV("rawCallback"); - camera_context_t* context = reinterpret_cast(cookie); - - JNIEnv *env = AndroidRuntime::getJNIEnv(); - if (env == NULL) { - LOGE("raw_callback on dead VM"); - return; - } - env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event, - context->mCameraJObjectWeak, kRawCallback, 0, 0, NULL); } static void android_hardware_Camera_takePicture(JNIEnv *env, jobject thiz) { LOGV("takePicture"); - camera_context_t* context; + JNICameraContext* context; sp camera = get_native_camera(env, thiz, &context); if (camera == 0) return; - camera->setShutterCallback(shutter_callback_impl, context); - camera->setRawCallback(raw_callback, context); - camera->setJpegCallback(jpeg_callback, context); if (camera->takePicture() != NO_ERROR) { - jniThrowException(env, "java/io/IOException", "takePicture failed"); + jniThrowException(env, "java/lang/RuntimeException", "takePicture failed"); return; } - - return; } static void android_hardware_Camera_setParameters(JNIEnv *env, jobject thiz, jstring params) @@ -418,7 +355,7 @@ static void android_hardware_Camera_setParameters(JNIEnv *env, jobject thiz, jst env->ReleaseStringCritical(params, str); } if (camera->setParameters(params8) != NO_ERROR) { - jniThrowException(env, "java/lang/IllegalArgumentException", "setParameters failed"); + jniThrowException(env, "java/lang/RuntimeException", "setParameters failed"); return; } } diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp index 75aa458035bd..3e27978ec02e 100644 --- a/core/jni/android_hardware_SensorManager.cpp +++ b/core/jni/android_hardware_SensorManager.cpp @@ -14,9 +14,13 @@ * limitations under the License. */ -#define LOG_TAG "Sensors" +#define LOG_TAG "SensorManager" + +#define LOG_NDEBUG 0 +#include "utils/Log.h" #include +#include #include "jni.h" #include "JNIHelp.h" @@ -106,12 +110,33 @@ sensors_data_uninit(JNIEnv *env, jclass clazz) } static jint -sensors_data_open(JNIEnv *env, jclass clazz, jobject fdo) +sensors_data_open(JNIEnv *env, jclass clazz, jobjectArray fdArray, jintArray intArray) { jclass FileDescriptor = env->FindClass("java/io/FileDescriptor"); - jfieldID offset = env->GetFieldID(FileDescriptor, "descriptor", "I"); - int fd = env->GetIntField(fdo, offset); - return sSensorDevice->data_open(sSensorDevice, fd); // doesn't take ownership of fd + jfieldID fieldOffset = env->GetFieldID(FileDescriptor, "descriptor", "I"); + int numFds = (fdArray ? env->GetArrayLength(fdArray) : 0); + int numInts = (intArray ? env->GetArrayLength(intArray) : 0); + native_handle_t* handle = native_handle_create(numFds, numInts); + int offset = 0; + + for (int i = 0; i < numFds; i++) { + jobject fdo = env->GetObjectArrayElement(fdArray, i); + if (fdo) { + handle->data[offset++] = env->GetIntField(fdo, fieldOffset); + } else { + handle->data[offset++] = -1; + } + } + if (numInts > 0) { + jint* ints = env->GetIntArrayElements(intArray, 0); + for (int i = 0; i < numInts; i++) { + handle->data[offset++] = ints[i]; + } + env->ReleaseIntArrayElements(intArray, ints, 0); + } + + // doesn't take ownership of the native handle + return sSensorDevice->data_open(sSensorDevice, handle); } static jint @@ -157,7 +182,7 @@ static JNINativeMethod gMethods[] = { (void*)sensors_module_get_next_sensor }, {"sensors_data_init", "()I", (void*)sensors_data_init }, {"sensors_data_uninit", "()I", (void*)sensors_data_uninit }, - {"sensors_data_open", "(Ljava/io/FileDescriptor;)I", (void*)sensors_data_open }, + {"sensors_data_open", "([Ljava/io/FileDescriptor;[I)I", (void*)sensors_data_open }, {"sensors_data_close", "()I", (void*)sensors_data_close }, {"sensors_data_poll", "([F[I[J)I", (void*)sensors_data_poll }, }; diff --git a/core/jni/android_location_GpsLocationProvider.cpp b/core/jni/android_location_GpsLocationProvider.cpp old mode 100644 new mode 100755 index 004b0e3ea07e..bf0bd65eddbc --- a/core/jni/android_location_GpsLocationProvider.cpp +++ b/core/jni/android_location_GpsLocationProvider.cpp @@ -176,7 +176,7 @@ static jboolean android_location_GpsLocationProvider_start(JNIEnv* env, jobject { int result = sGpsInterface->set_position_mode(positionMode, (singleFix ? 0 : fixFrequency)); if (result) { - return result; + return false; } return (sGpsInterface->start() == 0); @@ -270,6 +270,12 @@ static void android_location_GpsLocationProvider_inject_time(JNIEnv* env, jobjec sGpsInterface->inject_time(time, timeReference, uncertainty); } +static void android_location_GpsLocationProvider_inject_location(JNIEnv* env, jobject obj, + jdouble latitude, jdouble longitude, jfloat accuracy) +{ + sGpsInterface->inject_location(latitude, longitude, accuracy); +} + static jboolean android_location_GpsLocationProvider_supports_xtra(JNIEnv* env, jobject obj) { if (!sGpsXtraInterface) { @@ -330,13 +336,15 @@ static void android_location_GpsLocationProvider_agps_data_conn_failed(JNIEnv* e } static void android_location_GpsLocationProvider_set_agps_server(JNIEnv* env, jobject obj, - jint type, jint addr, jint port) + jint type, jstring hostname, jint port) { if (!sAGpsInterface) { sAGpsInterface = (const AGpsInterface*)sGpsInterface->get_extension(AGPS_INTERFACE); } if (sAGpsInterface) { - sAGpsInterface->set_server(type, addr, port); + const char *c_hostname = env->GetStringUTFChars(hostname, NULL); + sAGpsInterface->set_server(type, c_hostname, port); + env->ReleaseStringUTFChars(hostname, c_hostname); } } @@ -353,12 +361,13 @@ static JNINativeMethod sMethods[] = { {"native_wait_for_event", "()V", (void*)android_location_GpsLocationProvider_wait_for_event}, {"native_read_sv_status", "([I[F[F[F[I)I", (void*)android_location_GpsLocationProvider_read_sv_status}, {"native_inject_time", "(JJI)V", (void*)android_location_GpsLocationProvider_inject_time}, + {"native_inject_location", "(DDF)V", (void*)android_location_GpsLocationProvider_inject_location}, {"native_supports_xtra", "()Z", (void*)android_location_GpsLocationProvider_supports_xtra}, {"native_inject_xtra_data", "([BI)V", (void*)android_location_GpsLocationProvider_inject_xtra_data}, {"native_agps_data_conn_open", "(Ljava/lang/String;)V", (void*)android_location_GpsLocationProvider_agps_data_conn_open}, {"native_agps_data_conn_closed", "()V", (void*)android_location_GpsLocationProvider_agps_data_conn_closed}, {"native_agps_data_conn_failed", "()V", (void*)android_location_GpsLocationProvider_agps_data_conn_failed}, - {"native_set_agps_server", "(III)V", (void*)android_location_GpsLocationProvider_set_agps_server}, + {"native_set_agps_server", "(ILjava/lang/String;I)V", (void*)android_location_GpsLocationProvider_set_agps_server}, }; int register_android_location_GpsLocationProvider(JNIEnv* env) diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp index 288433af6a0d..e71e3481862e 100644 --- a/core/jni/android_media_AudioRecord.cpp +++ b/core/jni/android_media_AudioRecord.cpp @@ -45,8 +45,6 @@ struct fields_t { jmethodID postNativeEventInJava; //... event post callback method int PCM16; //... format constants int PCM8; //... format constants - int SOURCE_DEFAULT; //... record source constants - int SOURCE_MIC; //... record source constants jfieldID nativeRecorderInJavaObj; // provides access to the C++ AudioRecord object jfieldID nativeCallbackCookie; // provides access to the AudioRecord callback data }; @@ -66,7 +64,7 @@ struct audiorecord_callback_cookie { #define AUDIORECORD_ERROR_SETUP_ZEROFRAMECOUNT -16 #define AUDIORECORD_ERROR_SETUP_INVALIDCHANNELCOUNT -17 #define AUDIORECORD_ERROR_SETUP_INVALIDFORMAT -18 -#define AUDIORECORD_ERROR_SETUP_INVALIDSTREAMTYPE -19 +#define AUDIORECORD_ERROR_SETUP_INVALIDSOURCE -19 #define AUDIORECORD_ERROR_SETUP_NATIVEINITFAILED -20 jint android_media_translateRecorderErrorCode(int code) { @@ -154,17 +152,16 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, int frameSize = nbChannels * bytesPerSample; size_t frameCount = buffSizeInBytes / frameSize; - // compare the source against the Java constants - AudioRecord::stream_type arSource; - if (source == javaAudioRecordFields.SOURCE_DEFAULT) { - arSource = AudioRecord::DEFAULT_INPUT; - } else if (source == javaAudioRecordFields.SOURCE_MIC) { - arSource = AudioRecord::MIC_INPUT; - } else { + // convert and check input source value + // input_source values defined in AudioRecord.h are equal to + // JAVA MediaRecord.AudioSource values minus 1. + AudioRecord::input_source arSource = (AudioRecord::input_source)(source - 1); + if (arSource < AudioRecord::DEFAULT_INPUT || + arSource >= AudioRecord::NUM_INPUT_SOURCES) { LOGE("Error creating AudioRecord: unknown source."); - return AUDIORECORD_ERROR_SETUP_INVALIDSTREAMTYPE; + return AUDIORECORD_ERROR_SETUP_INVALIDSOURCE; } - + audiorecord_callback_cookie *lpCallbackData = NULL; AudioRecord* lpRecorder = NULL; @@ -511,8 +508,6 @@ static JNINativeMethod gMethods[] = { #define JAVA_POSTEVENT_CALLBACK_NAME "postEventFromNative" #define JAVA_CONST_PCM16_NAME "ENCODING_PCM_16BIT" #define JAVA_CONST_PCM8_NAME "ENCODING_PCM_8BIT" -#define JAVA_CONST_SOURCEDEFAULT_NAME "SOURCE_DEFAULT" -#define JAVA_CONST_SOURCEMIC_NAME "SOURCE_MIC" #define JAVA_NATIVERECORDERINJAVAOBJ_FIELD_NAME "mNativeRecorderInJavaObj" #define JAVA_NATIVECALLBACKINFO_FIELD_NAME "mNativeCallbackCookie" @@ -583,17 +578,6 @@ int register_android_media_AudioRecord(JNIEnv *env) return -1; } - // Get the recording source constants from the AudioRecord class - if ( !android_media_getIntConstantFromClass(env, javaAudioRecordFields.audioRecordClass, - kClassPathName, - JAVA_CONST_SOURCEDEFAULT_NAME, &(javaAudioRecordFields.SOURCE_DEFAULT)) - || !android_media_getIntConstantFromClass(env, javaAudioRecordFields.audioRecordClass, - kClassPathName, - JAVA_CONST_SOURCEMIC_NAME, &(javaAudioRecordFields.SOURCE_MIC)) ) { - // error log performed in getIntConstantFromClass() - return -1; - } - return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); } diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp index 42ada5450744..e7d4694a2aaf 100644 --- a/core/jni/android_media_AudioTrack.cpp +++ b/core/jni/android_media_AudioTrack.cpp @@ -539,16 +539,17 @@ static jint android_media_AudioTrack_get_native_frame_count(JNIEnv *env, jobjec // ---------------------------------------------------------------------------- -static void android_media_AudioTrack_set_playback_rate(JNIEnv *env, jobject thiz, +static jint android_media_AudioTrack_set_playback_rate(JNIEnv *env, jobject thiz, jint sampleRateInHz) { AudioTrack *lpTrack = (AudioTrack *)env->GetIntField( thiz, javaAudioTrackFields.nativeTrackInJavaObj); if (lpTrack) { - lpTrack->setSampleRate(sampleRateInHz); + return android_media_translateErrorCode(lpTrack->setSampleRate(sampleRateInHz)); } else { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve AudioTrack pointer for setSampleRate()"); + return AUDIOTRACK_ERROR; } } @@ -788,7 +789,7 @@ static JNINativeMethod gMethods[] = { {"native_get_native_frame_count", "()I", (void *)android_media_AudioTrack_get_native_frame_count}, {"native_set_playback_rate", - "(I)V", (void *)android_media_AudioTrack_set_playback_rate}, + "(I)I", (void *)android_media_AudioTrack_set_playback_rate}, {"native_get_playback_rate", "()I", (void *)android_media_AudioTrack_get_playback_rate}, {"native_set_marker_pos","(I)I", (void *)android_media_AudioTrack_set_marker_pos}, diff --git a/core/jni/android_net_wifi_Wifi.cpp b/core/jni/android_net_wifi_Wifi.cpp index 25670df9d373..9f93e2f042d1 100644 --- a/core/jni/android_net_wifi_Wifi.cpp +++ b/core/jni/android_net_wifi_Wifi.cpp @@ -317,8 +317,13 @@ static jint android_net_wifi_getRssiCommand(JNIEnv* env, jobject clazz) } // reply comes back in the form " rssi XX" where XX is the // number we're interested in. if we're associating, it returns "OK". + // beware - can contain spaces. if (strcmp(reply, "OK") != 0) { - sscanf(reply, "%*s %*s %d", &rssi); + char* lastSpace = strrchr(reply, ' '); + // lastSpace should be preceded by "rssi" and followed by the value + if (lastSpace && !strncmp(lastSpace - 4, "rssi", 4)) { + sscanf(lastSpace + 1, "%d", &rssi); + } } return (jint)rssi; } diff --git a/core/jni/android_opengl_GLES10.cpp b/core/jni/android_opengl_GLES10.cpp index 482d8eb1b88b..2685d7595e32 100644 --- a/core/jni/android_opengl_GLES10.cpp +++ b/core/jni/android_opengl_GLES10.cpp @@ -133,6 +133,19 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) commit ? 0 : JNI_ABORT); } +static void * +getDirectBufferPointer(JNIEnv *_env, jobject buffer) { + char* buf = (char*) _env->GetDirectBufferAddress(buffer); + if (buf) { + jint position = _env->GetIntField(buffer, positionID); + jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + buf += position << elementSizeShift; + } else { + _env->ThrowNew(IAEClass, "Must use a native order direct Buffer"); + } + return (void*) buf; +} + static int getNumCompressedTextureFormats() { int numCompressedTextureFormats = 0; @@ -305,9 +318,8 @@ android_glColorPointerBounds__IIILjava_nio_Buffer_2I GLvoid *pointer = (GLvoid *) 0; if (pointer_buf) { - pointer = (GLvoid *) _env->GetDirectBufferAddress(pointer_buf); + pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf); if ( ! pointer ) { - _env->ThrowNew(IAEClass, "Must use a native order direct Buffer"); return; } } @@ -2779,9 +2791,8 @@ android_glNormalPointerBounds__IILjava_nio_Buffer_2I GLvoid *pointer = (GLvoid *) 0; if (pointer_buf) { - pointer = (GLvoid *) _env->GetDirectBufferAddress(pointer_buf); + pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf); if ( ! pointer ) { - _env->ThrowNew(IAEClass, "Must use a native order direct Buffer"); return; } } @@ -3034,9 +3045,8 @@ android_glTexCoordPointerBounds__IIILjava_nio_Buffer_2I GLvoid *pointer = (GLvoid *) 0; if (pointer_buf) { - pointer = (GLvoid *) _env->GetDirectBufferAddress(pointer_buf); + pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf); if ( ! pointer ) { - _env->ThrowNew(IAEClass, "Must use a native order direct Buffer"); return; } } @@ -3392,9 +3402,8 @@ android_glVertexPointerBounds__IIILjava_nio_Buffer_2I GLvoid *pointer = (GLvoid *) 0; if (pointer_buf) { - pointer = (GLvoid *) _env->GetDirectBufferAddress(pointer_buf); + pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf); if ( ! pointer ) { - _env->ThrowNew(IAEClass, "Must use a native order direct Buffer"); return; } } diff --git a/core/jni/android_os_MemoryFile.cpp b/core/jni/android_os_MemoryFile.cpp index edf7dc45991b..8643393f7e8a 100644 --- a/core/jni/android_os_MemoryFile.cpp +++ b/core/jni/android_os_MemoryFile.cpp @@ -26,7 +26,7 @@ namespace android { -static jint android_os_MemoryFile_open(JNIEnv* env, jobject clazz, jstring name, jint length) +static jobject android_os_MemoryFile_open(JNIEnv* env, jobject clazz, jstring name, jint length) { const char* namestr = (name ? env->GetStringUTFChars(name, NULL) : NULL); @@ -37,37 +37,52 @@ static jint android_os_MemoryFile_open(JNIEnv* env, jobject clazz, jstring name, if (name) env->ReleaseStringUTFChars(name, namestr); - if (result < 0) + if (result < 0) { jniThrowException(env, "java/io/IOException", "ashmem_create_region failed"); - return result; + return NULL; + } + + return jniCreateFileDescriptor(env, result); } -static jint android_os_MemoryFile_mmap(JNIEnv* env, jobject clazz, jint fd, jint length) +static jint android_os_MemoryFile_mmap(JNIEnv* env, jobject clazz, jobject fileDescriptor, + jint length, jint prot) { - jint result = (jint)mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); + int fd = jniGetFDFromFileDescriptor(env, fileDescriptor); + jint result = (jint)mmap(NULL, length, prot, MAP_SHARED, fd, 0); if (!result) jniThrowException(env, "java/io/IOException", "mmap failed"); return result; } -static void android_os_MemoryFile_close(JNIEnv* env, jobject clazz, jint fd) +static void android_os_MemoryFile_munmap(JNIEnv* env, jobject clazz, jint addr, jint length) +{ + int result = munmap((void *)addr, length); + if (result < 0) + jniThrowException(env, "java/io/IOException", "munmap failed"); +} + +static void android_os_MemoryFile_close(JNIEnv* env, jobject clazz, jobject fileDescriptor) { - close(fd); + int fd = jniGetFDFromFileDescriptor(env, fileDescriptor); + if (fd >= 0) { + jniSetFileDescriptorOfFD(env, fileDescriptor, -1); + close(fd); + } } static jint android_os_MemoryFile_read(JNIEnv* env, jobject clazz, - jint fd, jint address, jbyteArray buffer, jint srcOffset, jint destOffset, + jobject fileDescriptor, jint address, jbyteArray buffer, jint srcOffset, jint destOffset, jint count, jboolean unpinned) { + int fd = jniGetFDFromFileDescriptor(env, fileDescriptor); if (unpinned && ashmem_pin_region(fd, 0, 0) == ASHMEM_WAS_PURGED) { ashmem_unpin_region(fd, 0, 0); jniThrowException(env, "java/io/IOException", "ashmem region was purged"); return -1; } - jbyte* bytes = env->GetByteArrayElements(buffer, 0); - memcpy(bytes + destOffset, (const char *)address + srcOffset, count); - env->ReleaseByteArrayElements(buffer, bytes, 0); + env->SetByteArrayRegion(buffer, destOffset, count, (const jbyte *)address + srcOffset); if (unpinned) { ashmem_unpin_region(fd, 0, 0); @@ -76,18 +91,17 @@ static jint android_os_MemoryFile_read(JNIEnv* env, jobject clazz, } static jint android_os_MemoryFile_write(JNIEnv* env, jobject clazz, - jint fd, jint address, jbyteArray buffer, jint srcOffset, jint destOffset, + jobject fileDescriptor, jint address, jbyteArray buffer, jint srcOffset, jint destOffset, jint count, jboolean unpinned) { + int fd = jniGetFDFromFileDescriptor(env, fileDescriptor); if (unpinned && ashmem_pin_region(fd, 0, 0) == ASHMEM_WAS_PURGED) { ashmem_unpin_region(fd, 0, 0); jniThrowException(env, "java/io/IOException", "ashmem region was purged"); return -1; } - jbyte* bytes = env->GetByteArrayElements(buffer, 0); - memcpy((char *)address + destOffset, bytes + srcOffset, count); - env->ReleaseByteArrayElements(buffer, bytes, 0); + env->GetByteArrayRegion(buffer, srcOffset, count, (jbyte *)address + destOffset); if (unpinned) { ashmem_unpin_region(fd, 0, 0); @@ -95,21 +109,45 @@ static jint android_os_MemoryFile_write(JNIEnv* env, jobject clazz, return count; } -static void android_os_MemoryFile_pin(JNIEnv* env, jobject clazz, jint fd, jboolean pin) +static void android_os_MemoryFile_pin(JNIEnv* env, jobject clazz, jobject fileDescriptor, jboolean pin) { + int fd = jniGetFDFromFileDescriptor(env, fileDescriptor); int result = (pin ? ashmem_pin_region(fd, 0, 0) : ashmem_unpin_region(fd, 0, 0)); if (result < 0) { jniThrowException(env, "java/io/IOException", NULL); } } +static jboolean android_os_MemoryFile_is_ashmem_region(JNIEnv* env, jobject clazz, + jobject fileDescriptor) { + int fd = jniGetFDFromFileDescriptor(env, fileDescriptor); + // Use ASHMEM_GET_SIZE to find out if the fd refers to an ashmem region. + // ASHMEM_GET_SIZE should succeed for all ashmem regions, and the kernel + // should return ENOTTY for all other valid file descriptors + int result = ashmem_get_size_region(fd); + if (result < 0) { + if (errno == ENOTTY) { + // ENOTTY means that the ioctl does not apply to this object, + // i.e., it is not an ashmem region. + return JNI_FALSE; + } + // Some other error, throw exception + jniThrowIOException(env, errno); + return JNI_FALSE; + } + return JNI_TRUE; +} + static const JNINativeMethod methods[] = { - {"native_open", "(Ljava/lang/String;I)I", (void*)android_os_MemoryFile_open}, - {"native_mmap", "(II)I", (void*)android_os_MemoryFile_mmap}, - {"native_close", "(I)V", (void*)android_os_MemoryFile_close}, - {"native_read", "(II[BIIIZ)I", (void*)android_os_MemoryFile_read}, - {"native_write", "(II[BIIIZ)V", (void*)android_os_MemoryFile_write}, - {"native_pin", "(IZ)V", (void*)android_os_MemoryFile_pin}, + {"native_open", "(Ljava/lang/String;I)Ljava/io/FileDescriptor;", (void*)android_os_MemoryFile_open}, + {"native_mmap", "(Ljava/io/FileDescriptor;II)I", (void*)android_os_MemoryFile_mmap}, + {"native_munmap", "(II)V", (void*)android_os_MemoryFile_munmap}, + {"native_close", "(Ljava/io/FileDescriptor;)V", (void*)android_os_MemoryFile_close}, + {"native_read", "(Ljava/io/FileDescriptor;I[BIIIZ)I", (void*)android_os_MemoryFile_read}, + {"native_write", "(Ljava/io/FileDescriptor;I[BIIIZ)V", (void*)android_os_MemoryFile_write}, + {"native_pin", "(Ljava/io/FileDescriptor;Z)V", (void*)android_os_MemoryFile_pin}, + {"native_is_ashmem_region", "(Ljava/io/FileDescriptor;)Z", + (void*)android_os_MemoryFile_is_ashmem_region} }; static const char* const kClassPathName = "android/os/MemoryFile"; diff --git a/core/jni/android_server_BluetoothA2dpService.cpp b/core/jni/android_server_BluetoothA2dpService.cpp index fe94642e258f..91a8e8e60353 100644 --- a/core/jni/android_server_BluetoothA2dpService.cpp +++ b/core/jni/android_server_BluetoothA2dpService.cpp @@ -84,6 +84,7 @@ static bool initNative(JNIEnv* env, jobject object) { dbus_error_free(&err); return false; } + dbus_connection_set_exit_on_disconnect(nat->conn, FALSE); #endif /*HAVE_BLUETOOTH*/ return true; } diff --git a/core/jni/android_server_BluetoothDeviceService.cpp b/core/jni/android_server_BluetoothDeviceService.cpp index b6e979811e26..58ae4f60a78d 100644 --- a/core/jni/android_server_BluetoothDeviceService.cpp +++ b/core/jni/android_server_BluetoothDeviceService.cpp @@ -109,6 +109,7 @@ static bool initializeNativeDataNative(JNIEnv* env, jobject object) { dbus_error_free(&err); return false; } + dbus_connection_set_exit_on_disconnect(nat->conn, FALSE); nat->adapter = BLUEZ_ADAPTER_OBJECT_NAME; #endif /*HAVE_BLUETOOTH*/ diff --git a/core/jni/android_server_BluetoothEventLoop.cpp b/core/jni/android_server_BluetoothEventLoop.cpp index 7c5da5bdb564..ad24136ac28f 100644 --- a/core/jni/android_server_BluetoothEventLoop.cpp +++ b/core/jni/android_server_BluetoothEventLoop.cpp @@ -132,6 +132,7 @@ static void initializeNativeDataNative(JNIEnv* env, jobject object) { LOGE("%s: Could not get onto the system bus!", __FUNCTION__); dbus_error_free(&err); } + dbus_connection_set_exit_on_disconnect(nat->conn, FALSE); } #endif } @@ -161,6 +162,19 @@ static const DBusObjectPathVTable agent_vtable = { NULL, agent_event_filter, NULL, NULL, NULL, NULL }; +static unsigned int unix_events_to_dbus_flags(short events) { + return (events & DBUS_WATCH_READABLE ? POLLIN : 0) | + (events & DBUS_WATCH_WRITABLE ? POLLOUT : 0) | + (events & DBUS_WATCH_ERROR ? POLLERR : 0) | + (events & DBUS_WATCH_HANGUP ? POLLHUP : 0); +} + +static short dbus_flags_to_unix_events(unsigned int flags) { + return (flags & POLLIN ? DBUS_WATCH_READABLE : 0) | + (flags & POLLOUT ? DBUS_WATCH_WRITABLE : 0) | + (flags & POLLERR ? DBUS_WATCH_ERROR : 0) | + (flags & POLLHUP ? DBUS_WATCH_HANGUP : 0); +} static jboolean setUpEventLoop(native_data_t *nat) { LOGV(__FUNCTION__); @@ -384,8 +398,7 @@ static void handleWatchAdd(native_data_t *nat) { read(nat->controlFdR, &newFD, sizeof(int)); read(nat->controlFdR, &flags, sizeof(unsigned int)); read(nat->controlFdR, &watch, sizeof(DBusWatch *)); - int events = (flags & DBUS_WATCH_READABLE ? POLLIN : 0) - | (flags & DBUS_WATCH_WRITABLE ? POLLOUT : 0); + short events = dbus_flags_to_unix_events(flags); for (int y = 0; ypollMemberCount; y++) { if ((nat->pollData[y].fd == newFD) && @@ -429,8 +442,7 @@ static void handleWatchRemove(native_data_t *nat) { read(nat->controlFdR, &removeFD, sizeof(int)); read(nat->controlFdR, &flags, sizeof(unsigned int)); - int events = (flags & DBUS_WATCH_READABLE ? POLLIN : 0) - | (flags & DBUS_WATCH_WRITABLE ? POLLOUT : 0); + short events = dbus_flags_to_unix_events(flags); for (int y = 0; y < nat->pollMemberCount; y++) { if ((nat->pollData[y].fd == removeFD) && @@ -494,13 +506,12 @@ static void *eventLoopMain(void *ptr) { } } } else { - int event = nat->pollData[i].revents; - int flags = (event & POLLIN ? DBUS_WATCH_READABLE : 0) | - (event & POLLOUT ? DBUS_WATCH_WRITABLE : 0); - dbus_watch_handle(nat->watchData[i], event); - nat->pollData[i].revents = 0; - // can only do one - it may have caused a 'remove' - break; + short events = nat->pollData[i].revents; + unsigned int flags = unix_events_to_dbus_flags(events); + dbus_watch_handle(nat->watchData[i], flags); + nat->pollData[i].revents = 0; + // can only do one - it may have caused a 'remove' + break; } } while (dbus_connection_dispatch(nat->conn) == diff --git a/core/jni/android_text_format_Time.cpp b/core/jni/android_text_format_Time.cpp index 923e1aa05cc8..98f4e035c0c9 100644 --- a/core/jni/android_text_format_Time.cpp +++ b/core/jni/android_text_format_Time.cpp @@ -23,7 +23,7 @@ #include "jni.h" #include "utils/misc.h" #include "android_runtime/AndroidRuntime.h" -#include +#include "TimeUtils.h" #include #include @@ -44,6 +44,7 @@ static jfieldID g_timezoneField = 0; static jfieldID g_shortMonthsField = 0; static jfieldID g_longMonthsField = 0; +static jfieldID g_longStandaloneMonthsField = 0; static jfieldID g_shortWeekdaysField = 0; static jfieldID g_longWeekdaysField = 0; static jfieldID g_timeOnlyFormatField = 0; @@ -193,6 +194,7 @@ static jstring android_text_format_Time_format(JNIEnv* env, jobject This, static jobject js_locale_previous = NULL; static struct strftime_locale locale; static jstring js_mon[12], js_month[12], js_wday[7], js_weekday[7]; + static jstring js_standalone_month[12]; static jstring js_X_fmt, js_x_fmt, js_c_fmt, js_am, js_pm, js_date_fmt; Time t; @@ -206,8 +208,10 @@ static jstring android_text_format_Time_format(JNIEnv* env, jobject This, for (int i = 0; i < 12; i++) { env->ReleaseStringUTFChars(js_mon[i], locale.mon[i]); env->ReleaseStringUTFChars(js_month[i], locale.month[i]); + env->ReleaseStringUTFChars(js_standalone_month[i], locale.standalone_month[i]); env->DeleteGlobalRef(js_mon[i]); env->DeleteGlobalRef(js_month[i]); + env->DeleteGlobalRef(js_standalone_month[i]); } for (int i = 0; i < 7; i++) { @@ -245,6 +249,12 @@ static jstring android_text_format_Time_format(JNIEnv* env, jobject This, locale.month[i] = env->GetStringUTFChars(js_month[i], NULL); } + ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longStandaloneMonthsField); + for (int i = 0; i < 12; i++) { + js_standalone_month[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i)); + locale.standalone_month[i] = env->GetStringUTFChars(js_standalone_month[i], NULL); + } + ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_shortWeekdaysField); for (int i = 0; i < 7; i++) { js_wday[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i)); @@ -639,6 +649,7 @@ int register_android_text_format_Time(JNIEnv* env) g_shortMonthsField = env->GetStaticFieldID(timeClass, "sShortMonths", "[Ljava/lang/String;"); g_longMonthsField = env->GetStaticFieldID(timeClass, "sLongMonths", "[Ljava/lang/String;"); + g_longStandaloneMonthsField = env->GetStaticFieldID(timeClass, "sLongStandaloneMonths", "[Ljava/lang/String;"); g_shortWeekdaysField = env->GetStaticFieldID(timeClass, "sShortWeekdays", "[Ljava/lang/String;"); g_longWeekdaysField = env->GetStaticFieldID(timeClass, "sLongWeekdays", "[Ljava/lang/String;"); g_timeOnlyFormatField = env->GetStaticFieldID(timeClass, "sTimeOnlyFormat", "Ljava/lang/String;"); diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp index d147bcc883c2..2d90ba49aecc 100644 --- a/core/jni/android_util_AssetManager.cpp +++ b/core/jni/android_util_AssetManager.cpp @@ -535,7 +535,7 @@ static void android_content_AssetManager_setConfiguration(JNIEnv* env, jobject c jint keyboard, jint keyboardHidden, jint navigation, jint screenWidth, jint screenHeight, - jint sdkVersion) + jint screenLayout, jint sdkVersion) { AssetManager* am = assetManagerForJavaObject(env, clazz); if (am == NULL) { @@ -557,6 +557,7 @@ static void android_content_AssetManager_setConfiguration(JNIEnv* env, jobject c config.navigation = (uint8_t)navigation; config.screenWidth = (uint16_t)screenWidth; config.screenHeight = (uint16_t)screenHeight; + config.screenLayout = (uint8_t)screenLayout; config.sdkVersion = (uint16_t)sdkVersion; config.minorVersion = 0; am->setConfiguration(config, locale8); @@ -1567,7 +1568,7 @@ static JNINativeMethod gAssetManagerMethods[] = { (void*) android_content_AssetManager_setLocale }, { "getLocales", "()[Ljava/lang/String;", (void*) android_content_AssetManager_getLocales }, - { "setConfiguration", "(IILjava/lang/String;IIIIIIIII)V", + { "setConfiguration", "(IILjava/lang/String;IIIIIIIIII)V", (void*) android_content_AssetManager_setConfiguration }, { "getResourceIdentifier","(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I", (void*) android_content_AssetManager_getResourceIdentifier }, diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp index d760feb3a3aa..aee0ed7f42f8 100644 --- a/core/jni/android_util_Process.cpp +++ b/core/jni/android_util_Process.cpp @@ -50,8 +50,6 @@ pid_t gettid() { return syscall(__NR_gettid);} #undef __KERNEL__ #endif -#define ENABLE_CGROUP_ERR_LOGGING 0 - /* * List of cgroup names which map to ANDROID_TGROUP_ values in Thread.h * and Process.java @@ -198,50 +196,82 @@ jint android_os_Process_getGidForName(JNIEnv* env, jobject clazz, jstring name) static int add_pid_to_cgroup(int pid, int grp) { - FILE *fp; + int fd; char path[255]; - int rc; + char text[64]; - sprintf(path, "/dev/cpuctl/%s/tasks", (cgroup_names[grp] ? cgroup_names[grp] : "")); + sprintf(path, "/dev/cpuctl/%s/tasks", + (cgroup_names[grp] ? cgroup_names[grp] : "")); - if (!(fp = fopen(path, "w"))) { -#if ENABLE_CGROUP_ERR_LOGGING - LOGW("Unable to open %s (%s)\n", path, strerror(errno)); -#endif - return -errno; + if ((fd = open(path, O_WRONLY)) < 0) + return -1; + + sprintf(text, "%d", pid); + if (write(fd, text, strlen(text)) < 0) { + close(fd); + return -1; } - rc = fprintf(fp, "%d", pid); - fclose(fp); + close(fd); + return 0; +} - if (rc < 0) { -#if ENABLE_CGROUP_ERR_LOGGING - LOGW("Unable to move pid %d to cgroup %s (%s)\n", pid, - (cgroup_names[grp] ? cgroup_names[grp] : ""), - strerror(errno)); -#endif +void android_os_Process_setThreadGroup(JNIEnv* env, jobject clazz, int pid, jint grp) +{ + if (grp > ANDROID_TGROUP_MAX || grp < 0) { + signalExceptionForGroupError(env, clazz, EINVAL); + return; } - return (rc < 0) ? errno : 0; + if (add_pid_to_cgroup(pid, grp)) { + // If the thread exited on us, don't generate an exception + if (errno != ESRCH && errno != ENOENT) + signalExceptionForGroupError(env, clazz, errno); + } } -void android_os_Process_setThreadGroup(JNIEnv* env, jobject clazz, int pid, jint grp) +void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jint grp) { + DIR *d; + FILE *fp; + char proc_path[255]; + struct dirent *de; + if (grp > ANDROID_TGROUP_MAX || grp < 0) { signalExceptionForGroupError(env, clazz, EINVAL); return; } - if (add_pid_to_cgroup(pid, grp)) - signalExceptionForGroupError(env, clazz, errno); + sprintf(proc_path, "/proc/%d/task", pid); + if (!(d = opendir(proc_path))) { + // If the process exited on us, don't generate an exception + if (errno != ENOENT) + signalExceptionForGroupError(env, clazz, errno); + return; + } + + while ((de = readdir(d))) { + if (de->d_name[0] == '.') + continue; + + if (add_pid_to_cgroup(atoi(de->d_name), grp)) { + // If the thread exited on us, ignore it and keep going + if (errno != ESRCH && errno != ENOENT) { + signalExceptionForGroupError(env, clazz, errno); + closedir(d); + return; + } + } + } + closedir(d); } void android_os_Process_setThreadPriority(JNIEnv* env, jobject clazz, jint pid, jint pri) { - if (pri == ANDROID_PRIORITY_BACKGROUND) { + if (pri >= ANDROID_PRIORITY_BACKGROUND) { add_pid_to_cgroup(pid, ANDROID_TGROUP_BG_NONINTERACT); - } else if (getpriority(PRIO_PROCESS, pid) == ANDROID_PRIORITY_BACKGROUND) { + } else if (getpriority(PRIO_PROCESS, pid) >= ANDROID_PRIORITY_BACKGROUND) { add_pid_to_cgroup(pid, ANDROID_TGROUP_DEFAULT); } @@ -466,7 +496,7 @@ void android_os_Process_readProcLines(JNIEnv* env, jobject clazz, jstring fileSt const String8& field = fields[i]; if (strncmp(p, field.string(), field.length()) == 0) { p += field.length(); - while (*p == ' ') p++; + while (*p == ' ' || *p == '\t') p++; char* num = p; while (*p >= '0' && *p <= '9') p++; skipToEol = *p != '\n'; @@ -820,6 +850,7 @@ static const JNINativeMethod methods[] = { {"setThreadPriority", "(I)V", (void*)android_os_Process_setCallingThreadPriority}, {"getThreadPriority", "(I)I", (void*)android_os_Process_getThreadPriority}, {"setThreadGroup", "(II)V", (void*)android_os_Process_setThreadGroup}, + {"setProcessGroup", "(II)V", (void*)android_os_Process_setProcessGroup}, {"setOomAdj", "(II)Z", (void*)android_os_Process_setOomAdj}, {"setArgV0", "(Ljava/lang/String;)V", (void*)android_os_Process_setArgV0}, {"setUid", "(I)I", (void*)android_os_Process_setUid}, diff --git a/core/jni/com_google_android_gles_jni_GLImpl.cpp b/core/jni/com_google_android_gles_jni_GLImpl.cpp index 11822e014d9c..89b1f96879e5 100644 --- a/core/jni/com_google_android_gles_jni_GLImpl.cpp +++ b/core/jni/com_google_android_gles_jni_GLImpl.cpp @@ -45,9 +45,11 @@ static jclass OOMEClass; static jclass UOEClass; static jclass IAEClass; static jclass AIOOBEClass; +static jclass G11ImplClass; static jmethodID getBasePointerID; static jmethodID getBaseArrayID; static jmethodID getBaseArrayOffsetID; +static jmethodID allowIndirectBuffersID; static jfieldID positionID; static jfieldID limitID; static jfieldID elementSizeShiftID; @@ -63,13 +65,17 @@ nativeClassInitBuffer(JNIEnv *_env) jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); + jclass g11impClassLocal = _env->FindClass("com/google/android/gles_jni/GLImpl"); + G11ImplClass = (jclass) _env->NewGlobalRef(g11impClassLocal); + getBasePointerID = _env->GetStaticMethodID(nioAccessClass, "getBasePointer", "(Ljava/nio/Buffer;)J"); getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - + allowIndirectBuffersID = _env->GetStaticMethodID(g11impClassLocal, + "allowIndirectBuffers", "(Ljava/lang/String;)Z"); positionID = _env->GetFieldID(bufferClass, "position", "I"); limitID = _env->GetFieldID(bufferClass, "limit", "I"); elementSizeShiftID = @@ -119,6 +125,9 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining) *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, getBaseArrayID, buffer); + if (*array == NULL) { + return (void*) NULL; + } offset = _env->CallStaticIntMethod(nioAccessClass, getBaseArrayOffsetID, buffer); data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0); @@ -133,6 +142,45 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) commit ? 0 : JNI_ABORT); } +extern "C" { +extern char* __progname; +} + +static bool +allowIndirectBuffers(JNIEnv *_env) { + static jint sIndirectBufferCompatability; + if (sIndirectBufferCompatability == 0) { + jobject appName = _env->NewStringUTF(::__progname); + sIndirectBufferCompatability = _env->CallStaticBooleanMethod(G11ImplClass, allowIndirectBuffersID, appName) ? 2 : 1; + } + return sIndirectBufferCompatability == 2; +} + +static void * +getDirectBufferPointer(JNIEnv *_env, jobject buffer) { + if (!buffer) { + return NULL; + } + void* buf = _env->GetDirectBufferAddress(buffer); + if (buf) { + jint position = _env->GetIntField(buffer, positionID); + jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); + buf = ((char*) buf) + (position << elementSizeShift); + } else { + if (allowIndirectBuffers(_env)) { + jarray array = 0; + jint remaining; + buf = getPointer(_env, buffer, &array, &remaining); + if (array) { + releasePointer(_env, array, buf, 0); + } + } else { + _env->ThrowNew(IAEClass, "Must use a native order direct Buffer"); + } + } + return buf; +} + static int getNumCompressedTextureFormats() { int numCompressedTextureFormats = 0; @@ -305,9 +353,8 @@ android_glColorPointerBounds__IIILjava_nio_Buffer_2I GLvoid *pointer = (GLvoid *) 0; if (pointer_buf) { - pointer = (GLvoid *) _env->GetDirectBufferAddress(pointer_buf); + pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf); if ( ! pointer ) { - _env->ThrowNew(IAEClass, "Must use a native order direct Buffer"); return; } } @@ -2779,9 +2826,8 @@ android_glNormalPointerBounds__IILjava_nio_Buffer_2I GLvoid *pointer = (GLvoid *) 0; if (pointer_buf) { - pointer = (GLvoid *) _env->GetDirectBufferAddress(pointer_buf); + pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf); if ( ! pointer ) { - _env->ThrowNew(IAEClass, "Must use a native order direct Buffer"); return; } } @@ -3034,9 +3080,8 @@ android_glTexCoordPointerBounds__IIILjava_nio_Buffer_2I GLvoid *pointer = (GLvoid *) 0; if (pointer_buf) { - pointer = (GLvoid *) _env->GetDirectBufferAddress(pointer_buf); + pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf); if ( ! pointer ) { - _env->ThrowNew(IAEClass, "Must use a native order direct Buffer"); return; } } @@ -3392,9 +3437,8 @@ android_glVertexPointerBounds__IIILjava_nio_Buffer_2I GLvoid *pointer = (GLvoid *) 0; if (pointer_buf) { - pointer = (GLvoid *) _env->GetDirectBufferAddress(pointer_buf); + pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf); if ( ! pointer ) { - _env->ThrowNew(IAEClass, "Must use a native order direct Buffer"); return; } } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index bff6b9dfda5e..599360f06244 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -175,6 +175,22 @@ android:label="@string/permlab_writeDictionary" android:description="@string/permdesc_writeDictionary" /> + + + + + + @@ -220,12 +236,6 @@ android:label="@string/permlab_installLocationProvider" android:description="@string/permdesc_installLocationProvider" /> - - - @@ -388,12 +398,12 @@ android:label="@string/permgrouplab_storage" android:description="@string/permgroupdesc_storage" /> - - + + android:protectionLevel="dangerous" /> @@ -650,6 +660,13 @@ android:description="@string/permdesc_changeWifiState" android:label="@string/permlab_changeWifiState" /> + + + - - - - - - - - - + + + + + + + @@ -988,6 +1000,7 @@ android:hasCode="false" android:label="@string/android_system_label" android:allowClearUserData="false" + android:backupAgent="com.android.internal.backup.SystemBackupAgent" android:icon="@drawable/ic_launcher_android"> + + + diff --git a/core/res/res/anim/slide_out_down.xml b/core/res/res/anim/slide_out_down.xml new file mode 100644 index 000000000000..9b8d5b7919a2 --- /dev/null +++ b/core/res/res/anim/slide_out_down.xml @@ -0,0 +1,23 @@ + + + + diff --git a/core/res/res/drawable/call_contact.png b/core/res/res/drawable/call_contact.png new file mode 100644 index 0000000000000000000000000000000000000000..1abeb5da3bcb26f167a8fc5fba79710405e5feb4 GIT binary patch literal 1025 zcmeAS@N?(olHy`uVBq!ia0y~yV2}f04mJh`25W{(JaZG%Q-e|yQz{EjrrIztFfaCWaSW-rbtK$7$0tzY-+9a8{Pe7zu+?!#ogzFU zJa0^jP>|!67UJ&Dkm6ModL$^V*rDKLE6m9$E!eLcE$FSYf;H4PG_>8?_~a0atrh2uH&A2#3~FL3hja&Dr{cvsoy)xGPhQEg`t0sT=}0cQJ&ZS_ zC!}3`(Ad!$a3Fk3DNC2iMOls*v$#jiW*57^yF^=eT;vxhSh1=_<^$tgk&D3-%=w=E z;LnlUz^)aw+i{umsbe<+)qfi+U3U4x`sDNfmWsXpCHvcpU!}fTf9UG!(B_(DL2Hv$ z^NJ;RUpRVn{RY13mCF;89NK%=**ok@Jh@Te{Z>iq%QFqSnfcY%hTEC`sQdW6y(Lg* zU6EQqjq#EtovS?V*hOvGwzFscOQXputqP3>(kmH&oG)aQ zG5>XC$nrmrXE-QNyLvjSYkKmx>$|fZy3Spcyyo=OecBVU8DSJibTFRbv%9K--TO?vUKkNC|H`gD0ESy>Q{FUwV2rfax z3EqM$ViooTWcJJE>9QWaGuhWqVv_ok3A4B?eRr*6S{XL?a_N*WPlG1-t#*m>`&g1w zJbm+4;m+>+>siw5Rr51htv~$O5M|orGyUyn!?}JFpWet_dg+O@sk75W&4`pApET;? zy1z#7oO;IL>oRVurV^uXpDnh$<@1m<;}Xo|@ib@ln{#Ao$GI@2jpu#+ zr8fRZ-8Ah_OC`76t^lzkzI%?&ouH`3^N6EZByLyVnq`q8D`sC>CiE=(hg`?xiltn| z(R?xQ-Da|BB`_IHwPXB$wNUW-|De;Wo6blDt$bvf>6&x&sO38CJ-=oitnqAH+F!Cu zZu+D2LtEXSlw0(yw>=W`o8wRXQP(?qzp6bGn%9@)d)2&G&*R;4_{(JaZG%Q-e|yQz{EjrrIztu<&`hIEGZ*nls%xLnKh7Ej=w=*j&29?Xhv-md+>_ zM;DhZf}+y8ERG^NIUOfV2Ko0Y32d*a$2Q2?Su&rR2clGMk zuOd-b&MRARervv*AU=b^{vf{r*QQUl8cf}umd|6E%NIHv-_Iq+eZDby%d+mrBK7Al zJnA@aq~^f6g6V34#EC~|0~9tfHAyTqeIRDR6W96L!CZoQa*EWMhDf91g)DoR`!gz) zEpA`9@IYK>4`&SfYK;xu+$mFkx3b=OF0$6=;?qyjhN8kt;~Sz1*be=lAiC;z7S~!9 z{hjlT@3{9TFM0R2IE81@^YdTabhkh2+8Uu_;r}rIpnjb|LEzf8J2nfK6uenDyVkiW z?#1I-%M-rxX;;WwaNTQQWbNWbx2%s&kasJR`rAC z%e>n1E(yMNyLnpi!_;Zt4EQdI2wYq`FH-qn<>`Zr9Qs1NW=(JJT<2jv((i4{=GR%N ze>=oc`Pj3QBK?e7FL#J<>3m>&=kmlEf4}$^s6GqSaDDCcwf5YZZix*-dv-fVSs&`O zirU=sD)Xz|(eiIn&wg_*t>F~Cc^{2f2o>R$!Djbog!b|d!ewPnd_X^ z_ipv;MXyU%os<$)ROg-L!1c4yr80V7Qh$*Km)(~4f)3FUtjn+Lik!sZ8`_l->#%*< z-v2vh76TkOo_eloibWO-!+PK*wpz*B;JRsDzDb1bR8hZrucxZb$?|Vf zsaC$T2;CYF3<7wep?s#%yfrj`Im{t*PNoZ z^e{crDW9uj(v|8v=S7;b?smazX^&abXZ9<-VfnoI1jqHOx|5f0vRrtnH|k*M^G6m3 z{XUEJweNVIs%5LRx%}6L<;OLbEuUjDd(8!lgHaXM7KivY&k}qyTj<5g+A{V(jMHu& z-^ACF_9#Z^ndXM+gJPeT~9{w*6S$i@tFfe$!`njxgN@xNAJdO)8 literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/progress.xml b/core/res/res/drawable/progress.xml deleted file mode 100644 index d2705209be75..000000000000 --- a/core/res/res/drawable/progress.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - diff --git a/core/res/res/drawable/progress_circular_background.png b/core/res/res/drawable/progress_circular_background.png deleted file mode 100644 index 7c637fd602d9ccebe8ba3d86f3f27b2abe103a0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2044 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F2BR01_lv4 zq}24xJX<9N1qCIA%oJOta8q9c-vZ~}1OnC3`zAn+mIn+=ATH zl0=1y+?>2(s|s5su$fkQ#a19;eI*63l9Fs&B}b5D3K6~m3eNdOsR|}~hPufH#wH3T zW_m{EMwaGgItsywB??}Nc?w463PuJ7<_bneR)&UFCWZ=7pk&9TprBw=l#*r@` z9GBGMHD-sK=oQqNuOY)0C^7C`-Al`S&EJ`iUFUl@fa1J)M0qI0hgs{~Hu0Pc!u_V$7Q1rPIRCI2y;3-Drv%iI*cY}!wsdSCG%%1>|tPF z5Cs(u;6w|`4k4MjsSM`&hDQ1Z=2wqq#4s>0$bb|C=ckpFCl;kLU`f(5uDLNYFfdzq zx;TbpG+v#xzv!}qz_EJEv;yJK%n8+Vy3`gf3S#wjac2Ee$>8Jae93{ivf+Y*-c8#4EZqvD?_ZSk7k%) zN8@#e<+6K2UN8t6ENpTSZS?tB-`l|@l*(e}`jbacRb`s*BfSrj_1eAKK@TijJNNb+ zkbE7TyTzj+{inFAxD|`sI$v4avNy$3_MV7dzVS4BjT{IM_wKF-YUGVY`&WXXEIz z`Y3}1TN+<&`T88E@H-EE5vYJR}-TpmA zR_e=a&(wyC0#P?(H}5*jyT!6n`gED%hQI>F2gZH@r_FZcD(qWuFMwBQRi=RE?cY;u z4WBeI`#1lXVrz6@>!#q2+Yj?alfG16+S<+P&@|CZy*ME?%h2e6$X_-grrLJK(-++T ze-%!c#cHy>k=={YHbq=s>$hlOOUsO?8kTiNO!gC3_{?@X=1%83Va=tFro=El+3&Bbr+lGJ`{#kC*C`Rx;^r$^PCv2VPiqhBKJoZzSJ{Q0 zOp&S#@n}}|x->0Rbe6ATp^NLe($HQV<&Ecmy-v}5WHy!a@vhWs0u|@0POquWI-*s2 zYK?;M?>qnAKRhp``GM0i$>()R!OkoJrK`VYl&zQInV_{-%PFVmX0o)R;N>@)jvx4! zRr^tCmcWT*>6tHff0NwwXV+O4%bjtzmruS_`Gw;FfcH9y85}Sb4q9e E00ri#TL1t6 diff --git a/core/res/res/drawable/progress_circular_background_small.png b/core/res/res/drawable/progress_circular_background_small.png deleted file mode 100644 index 6b8ba9b4390697c706251447167aa1c443b6c568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 484 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpRmSQK*5DpFwjv9`X4h9AW z&H|6fVg?3oArNM~bhqvg0|SF-iEBiOb5UwyNoIbYLP%zADucPcp{2foIn$B%u?!3h zG9U%P`DrEPiAAXljw$&`sS0kHMXBZaMcKs)&cVhruDLNYFfiJBx;Tbd^e(-s7<4#5 zfbBtl37ac_fQ@V7E#`n$CZ6&I^W+!`BtC>RCSEwexMG#oyhR2tO$90wZ*7<<@*~|y z|NZ&@|8mO8&7@xywlJ1$n7czpzT#+cNrv(RHj8MZmCk*$Q~vdaxte%|?>^{rNoGl@ zl;pg}DZGodzFj!TvdM){#PYZHshaxdA3W!5mdyJ&?VBynMgA?8ebE+cI`ewGb*AlL zjk{EPbxW^}wllAiH2a@Vr_&hiPh41Qd7;JQ^4TlT*Ktlvv*tcguNWM%ylX|*>x@r4 zpC247;63bNoS%64yjS_9sOhJJU3Z5TUcYi9zw4M@?{CdbaSP5C#z?(;yi09Xso|j| zGJNy9&fodF_@?o@$hl_1IhxCk=YMEeT@*aGJ$R4$2BR01_lv4 zq}24xJX<9N1qCIA%oJOta8q9c-vZ~}1OnC3`zAn+mIn+=ATH zl0=1y+?>2(s|s5su$fkQ#a19;eI*63l9Fs&B}b5D3K6~m3eNdOsR|}~hPufH#wH3T zW_m{EMwaGgItsywB??}Nc?w463PuJ7<_bneR)&UFCWZ=7pk&9TprBw=l#*r@` z9GBGMHD-sK=oQqNuOY)0C^7C`-Al`S&EJ`iUFUl@fa1J)M0qI0hgs{~Hu0Pc!u_V$7Q1rPIRCI2y;3-Drv%iI*cY}!wsdSCG%%1>|tPF z5Cs(u;6w|`4k4MjsSM`&hDQ1Z=2wqq#4s>0$bb|C=ckpFCl;kLU`f(5uDLNYFtF5n zx;TbpG@hMxwp+$k;#htDd-pqckE}@w3q0fKm~?@aKk33`4?U#{fhi5<{`2-!d{E#J z+*9%4nSJ8F_Ps6w2fg{M+|0T<a)t5)sawLNY5{1YveT<{0*M zp0|uPzuh-)CUc8ij<)CYhV2d08`&E}4>as=6#O8u;oIJwcp16(9eKv+$MAdKKaHb*c1Uey z-@=^9qVTftLGXhnbM2V-Y?m*~uxwDhv&UlYu9dtVxeT894Dw8`EiSty)-^T1OwF7a zBE3kgVF`bOw@8|EzQ2ca$ozfp*Y_7_U-F9=FlJP#W!d9r*!NwSK{$aw;@N|OU)SUJ zv)?(UyS#bkxhy9cE`^u14;Gm_r06&tVNmAZ_+UNjgx&vc<>vpH)xKhBq(CsEN-WF0 zB`+$qO1r(D`PMZ@tA#hVH<;Gv|5IY#b|&Y>6Ww ztMjxjhFn(A*;?YctH+z&DE^Sq4v&rZ^qI^XPN#iKjt=$>`N*N7r0~-9L1foG{#3;~ zkL=eo&7XNQ&-iw#b8LH17RO%h9?dFy7lpQ;x6asQrte;((VhGCuTaC1;vFZ&tLmK+ z?LN=Hec*X6Z+WOG*Hw-^P9HCE?p^Qom)m&v?d=V2Vpr>rJGK~gosuh9X5al+lWm9l%^J}s6P3%u zoedA@@93P3c*iO5gg|HH^t%vwfj8$H5vc zsq6!vW%rZ?eKjvMWn#GhsE7TtW=FfKt@_H(jGasTmYcFOoOvVmfj#xGW=H9RJxi`` zGe$m8L`Vaf2_|3dIYsu5f8U3X% zR7^HEF5&r}tS;Iqp=2k|@%7xSt$XcEnF5*bGn;El_rBivbH}~NQa+0`rXOwF3U5DF zzVvLh;DVt1HF5njYMRSc-agoLN%YdOYD?|xq7&w&qEX)35leT!* zm9O#ApUQsy lT0il>_tvn5kJtQXSQ}}j*S`8-7y| - - - - - - - - - - - - - - - + diff --git a/core/java/android/app/IIntentSender.aidl b/core/res/res/drawable/progress_large_white.xml similarity index 61% rename from core/java/android/app/IIntentSender.aidl rename to core/res/res/drawable/progress_large_white.xml index 53e135ab1bb0..c690ed4e0e9a 100644 --- a/core/java/android/app/IIntentSender.aidl +++ b/core/res/res/drawable/progress_large_white.xml @@ -1,6 +1,8 @@ -/* //device/java/android/android/app/IActivityPendingResult.aidl + + + diff --git a/core/res/res/drawable/progress_medium.xml b/core/res/res/drawable/progress_medium.xml index 92aebb51a512..eb1bd50d17d7 100644 --- a/core/res/res/drawable/progress_medium.xml +++ b/core/res/res/drawable/progress_medium.xml @@ -1,43 +1,25 @@ - - - - - - - - - - - - - + diff --git a/core/res/res/drawable/progress_indeterminate.xml b/core/res/res/drawable/progress_medium_white.xml similarity index 54% rename from core/res/res/drawable/progress_indeterminate.xml rename to core/res/res/drawable/progress_medium_white.xml index 1bf715e51269..b4f9b318a902 100644 --- a/core/res/res/drawable/progress_indeterminate.xml +++ b/core/res/res/drawable/progress_medium_white.xml @@ -1,8 +1,8 @@ - - - - - - - + diff --git a/core/res/res/drawable/progress_small.xml b/core/res/res/drawable/progress_small.xml index e5b0021d59cf..e0ee5e47d830 100644 --- a/core/res/res/drawable/progress_small.xml +++ b/core/res/res/drawable/progress_small.xml @@ -1,45 +1,25 @@ - - - - - - - - - - - - - - - + diff --git a/core/res/res/drawable/progress_small_titlebar.xml b/core/res/res/drawable/progress_small_titlebar.xml index cf8e41cb373d..8cfba864b5b2 100644 --- a/core/res/res/drawable/progress_small_titlebar.xml +++ b/core/res/res/drawable/progress_small_titlebar.xml @@ -1,45 +1,25 @@ - - - - - - - - - - - - - - - + diff --git a/core/java/android/app/IIntentReceiver.aidl b/core/res/res/drawable/progress_small_white.xml old mode 100755 new mode 100644 similarity index 52% rename from core/java/android/app/IIntentReceiver.aidl rename to core/res/res/drawable/progress_small_white.xml index 5f5d0eb133e5..8cfba864b5b2 --- a/core/java/android/app/IIntentReceiver.aidl +++ b/core/res/res/drawable/progress_small_white.xml @@ -1,6 +1,8 @@ + + + diff --git a/core/res/res/drawable/rate_star_big_half.png b/core/res/res/drawable/rate_star_big_half.png index e73ca799b398845d84d09bf9f518f28e678998f3..9762292a40a6cf6c00256a056f7aa9f3e5574377 100644 GIT binary patch delta 795 zcmX@XxruFpO1)%>YeY$Kep*R+Vo@rCV@iHfs)A>3VtQ&&YGO)d;mK4R1_q`po-U3d z6}R5ZIGrsVD01xl5>K8alYk8p0!kibP8nhAeE#!^A9F3xy!&&F?xGBrkUKM5??%cC zF5K1s!0#4YOowBJ*FurpQXj9WCdSv_pSv@|{rEZG=eN!rVy=(ROXoPLf8X}`9pkGK z$xn`ROz?M>jQF?MEK)<{(LQErsYRb7+-h0NHm^yYxXSR4WP5ht{f1VhlC_K5F70F3 zZMZ(QGqCAaf~V*@){vc7FPC0oW}RKJJe6Te0mI{Ut?X>u?5~xbUg$qxg5$>3?NMz$ zj~3a#V*LCl%3*3WUtjCq`W@S}H@tqoRirsup!Aet+1pvq$~qRyF4^$m*~~^hN6m#1 z@2mOG+gd&UAXvJvG{bq#*BHI?5~?{g-!L>zgZB<7ydqv)hLMd=?%Skv1wJCS;K!n@3VCJyS3kT zKhusj-tC+gm#0kDS|Ka_rknGCX=ct!o&9T9Er_wM7c5|#6CJgnC^`6M*e)keSKfuBbWfJM)qt(E?}Dw-#7nE^FFDw!QOqOy^2Llyf!g?u zOJ@5@xo6c2JTAF$)X+5HkKo$xac{XVUU$93+bs9s)4w;m%erM&bv!?{WcsNR*25*U zB`xpO@4NTIZA+NytzWK}cgW1&o6Ee_sppI;L(z9XtB^$@sk_eo$q>EyaPgNJ{!*_` zyGW?SM>UcqIS; delta 1204 zcmdnQc7k()Na+){A8`@`Qp^>X*7|D|0+rBslezPomSTZ3c_C zYzeUcG|B8)s!!G3IpOP)pD9nyoWw1DZ@2vOfA{|1?Jw4wq8~ZQJXDH#%9D*}nYQ{j zq^W3Y-u_U+8Bn&^HpTpwGgDdS&)|cxoYdwtULSb*)}9I99&RocqJ!&&!K?Lb2-`0c2~{*%972ph+(_4;JLE7D3 zw?ozAI}?--C|))>o}QNG7Ir6BclG_kIdKUhFXH)+%B?i5N&C?q)4OHYq!8_}jbRTg z7YJu)ED7Vg8gwA_0sn)ng^b!;(xoc`73K+cL{*+&&hay(d!OK2)_T6R0kxttL~rbW z@;6*zt+p8Rx93s^Rv1hQG1$JgF8Yu`&(FiP?fHCr%nQ~_tYo*BxMO8ww&!l?-B-J} zzi*3BdZ4#cw{lkv@0TAbd~?|AjCme!%baDtDr?oV>RnaK-oD*t{UNWAVYP3wJa3-w zeIMzK?~|;>rh<Wb0@_CFjJ4X@w+;crxZVD*7-Lgk%PnE~~Z zlAm`O*nH_zQDv<^-8P+}&(3d$&WgoG&(;{|FrHd2>sz;gi-V!`fZhX>fXH+AXR(&D z>|pxCcZQLB(Tq=ZOPQuEO$w8Wo7g9Lys+x9?nB$BHSKlW~l;G4d@-60#o7E`3-sh>VvzFc~*GxFp zy=iLD#1JFVso4zrx8hjTju>0$o$ro|-+fWeD|6zmAgx7Tbzj=8x>-U&@iE;V5ql>*(a~1-u{d%!8`tkp?J_r>s|8P@yrgC3ATvhp9m-y;1CV$QlhoasaSxj|; z(ZcioZ;jfJ#aTCh>Omu^3%X4{pX$R5-m%YP+18=`l(EX}-xP&%JMkO)|15cIpy4hp R#=yY9;OXk;vd$@?2>`sxCy4+6 diff --git a/core/res/res/drawable/rate_star_big_off.png b/core/res/res/drawable/rate_star_big_off.png index b4dfa9dd3ae100ce351cbc22e4de7639bb2ac767..6b5039fc73a46ed8bc136c7ae5834295925a71c7 100644 GIT binary patch delta 464 zcmaFF+|M$>vwowei(^Q|tv55Q^I8l9+Qd^PvaRxE4%OOa;ytza3D2A^<0W2v4pT!s zH_L{u@}1hXHseH($uy4s8^@T-CQfwQa4D(&m#sd>uYLAEG9Dfb7T(4k5~`Zd{Xzdj z_sP$xk$LNG*#0=Vees!t${%=aK60*!*ip_ktv}?HWeE4ot4YE2x?9eiSUO{p;d7sj zla;)`vny{kVvTs>WEgt3D<_0Id{t@4iqy5UF0|}m^v@LjQ@eVn-M{~WdszRo?Z32D zHGT`ja_$>8i_RvU+B7AhPx^b-o7Hz2zH#mSY!vn;k$u9(lLb2#XDhciOt7*EvKQW| zo!zi_9?SmZ9q|E^*OaiBH_ocp6}LWo)=Br;#<>p+E@VGu+HH7ee!!_y`vvC+d97CE zeGtXA!e3V7ZJcL;%(A_Gp2E*7PIg2d%=q>w$1$htXwSj<1x>2^nwIt?yqwon8p3wZ z)X3l4Fp;xOApKKbfCG0`Yqae8LrThm4@%t@PP<}#`NPb$Cw(?5DQ~RW?|3nn)3fHK zWlpj_i_yG3;ZSu!w&NYj@7w2`0=GwvDvn^GwDr@q;Ai##J6 a!^i6_TRsUNQej|VVDNPHb6Mw<&;$S=uh(1v delta 419 zcmeBYdBi-yv%baC#WAGf){_}~^9~t^wD!8P*;p|1#2Q^;=Jvk-Uo%4D6oa!^o6(d; zzLis~E^STOsbcZAcd5arFsJVS(!w7j&h!oaBABD|PoYQJ-F(*&L<4?gjOykC=(is4_a)9P@bM z9j>z6hml8A59Vx{Rx)*7?VT-lTlT%Ybus^5Li1Pc)t_g*b6sLpt9(K`)_&{0E${Sh zNGttkIp+EL!MTll!)6PvG7acy>#;1*X)fOH^U#ieY1=F>@s$tUem|_w6p=n<-f#Nl zs9N)F)!nUzyJw${il?pV*5plu?tDvrx!28-W6Q=v6% zO`TWzV$V)uefUr4gZ}$1T00^*E3Gdsb89*&xZrW~o-322tj@1UvV690g>w5mRj$5+-&@(stC8u)mg{!LESK*>$k!VetNyp#P*v@(mnpo$ e*(=Y;#vof9lltIpX9@!Y1B0ilpUXO@geCyk2g5G_ diff --git a/core/res/res/drawable/rate_star_big_on.png b/core/res/res/drawable/rate_star_big_on.png index 7442c93c411cb7ab9e6c3effa857c19498e14c7f..a972db27486bf56c6b48ad993202179c97af34ee 100644 GIT binary patch delta 970 zcmaFJ|A2jhO1)%>YeY$Kep*R+Vo@rCV@iHfs)A>3VtQ&&YGO)d;mK4R1_tIPPZ!6K zid%0Yy#0j(C2TLVZ)rQu(8b9mvOTY>{y^rVX-9hdkF>t!H+XQURX=J`MvZH4{erw6 zeV)!;%hcAHIQjNu7+mUdVw~EjwYK)mkGq-Ox?56j&D^H5r~c&0xz_#G>HCiFeJ<@c zEj8z8+5xd#wY9=B`wwgWy~q5)CG5fPKV18Q=IyU`S~urtR2ie2@-OMA2kSQH35IVH z$i2_3{?*2DL9(>j=oX~M9VtKHn=G}$Wod_D_C@ZTNd4k>Dyy&FnR@fu zsco|kMmUG_?R&y9%O>8Z-tzXYDKl2{Zp{7TmYsUxRx4xkN;bo?f2`^bOw6ASW;p!+ z=Jz2~J?ujqCl@oOn^re96ElowP9c%VwUdS#&kWX_vjnk`Hff_q_1# zY}hJcT{ZKu=HBBudqdUP-LlGr?)_e#8h-DAeUWB&jI*d`ZNvA2GwYXpN_+Y+v2S^g z^y_s@J9$>Nrx$yQ#^~|I`b^#&-Zw|0-fLo2NuKh`CT^X(I%-J;EXN+k$1ZG*xg>6% z9^9zsT`+aeCwn=SB2J5@x*y7kUk~LQr`&OG*V`F$)7a_Bq?DZxSpIAbofUDZ?L(5* z?*lqhZ-$?~tL<*%qQ}SXD|5k1=Og>#6w~Q>o1UMXpfl^$*4-CV8dsDFhsW-_D4sp- z^tJk9TUf4pM+Lvtcp>uVP}S+|O*2;ZJ=we@xYf6K;uFpnNrv9RnOl<#BW4$AY2_X{ zlQzkbRmG%PgxN{HQU2hS!j07@lbWQGUd2St-*n@bnrh?HNY+JD4tOqmI_>$z`)*PD zSMELFer;iN?}-rCo~aqH&#%>C=)Np4+4Ih_hikVyNUr~M)7qTXd}8Ul1>$5(9Zw> delta 2003 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 S`GtXjfx*+&&t;ucLK6Tn#!gEB diff --git a/core/res/res/drawable/search_dropdown_background_apps.9.png b/core/res/res/drawable/search_dropdown_background_apps.9.png deleted file mode 100644 index 56b697d97b8e738ffa2aed8fc1c8dc4f5e87eb9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmeAS@N?(olHy`uVBq!ia0y~yU=U|uU=ZeDV_;yY-aTy_0|SF(iEBhjaDG}zd16s2 zgJVj5QmTSyZen_BP-R#zxNA?Tb-pbVp|L~8!e%|WCvdp*#=8f+^*~Gs(uvuq!d;Gq-T?=ai z&(z%S&-k{!M&SaV{2w8<@Pp?)!vjU`hJ}7rV_q!x_QOH_ry37#tn + + diff --git a/core/res/res/drawable/spinner_black_16.png b/core/res/res/drawable/spinner_black_16.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee33cea6fa7d1672d9ad3661782f873b3a02468 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+NS3%plmzFem6RtIr7}3C z%;RAN_?*KMEx1FJ-l~` zZ0Ib}QSjx8aJHJ}@ORrwkv|$$9GXSuc9&-E3@@(}o3_o*Z`-Dl+2wPe-0k1H^y&1#)n4u&-zJoo-n$c;A(Z(1!Dl{+7Ol-f z^Y+|fj5G@Wv0>xPy7IXKx9l6HPIz*>YYo@o$EuUnuC%9@ol>3lP-hm))x>37g`AaA urR|GWK69Gkf9lnBx6O+(Pu<^D&-m;}{@!hDBO(S>E3^S(XP_w=fH>l_tQ?oCUx&rdJ=bM0b{UHL+nz!HYb zNAKAFiTwyG%lO5bTzbPyv~HnuSmafv4c`1} zmTDcHoc9b0wMw%a7_ywIEmo}e75iWs!2P4y*7Do7LzAj61pAb1c)&L;`S%68NBlRW zgI(9Sq|Ny4w1;~>r)$UN844_yf9W0Mc;&@XEIgy}fOx{bnj_BhN`&6L-0^m)*b&al zC8s`l{OZ`aJ@>+u!h82;oI2kzy_D^5%f8D=1rdtQ{HNShw``Ou)=>R0d9|ALw$G;D z&mVfDwl5|#^k-Nb@9inOB+r-^Zh7)A$uM=T=E@x}TZNl-8NV|g;Y0IN7=(qZ4_vL{{`UOnwbQ3RdG2@lp1pg}IE3=E#GelF{r5}E)5Q0oH# literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/spinner_black_48.png b/core/res/res/drawable/spinner_black_48.png new file mode 100644 index 0000000000000000000000000000000000000000..3a681926b537f4fbf5d2f423dc724d03490be0ca GIT binary patch literal 1022 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4i*LmhQHi~JPZsBoCO|{#S9GG!XV7ZFl&wk z0|Ue7OlRkSfQ=<)&YM`?esg~PH#WJ0k1Lu*n#2QxqF1nZAN2oPakiQL)lHt? zi_aNOnR+BA=~JZL^>%5#8_W!^XC)katlh9`oy~sD8~YYA#QC4yVE-upTWkl@9tO{c z((E-1tJyi3vKYTid#$j5<;B|NlNnd2FVOxM$iP;b@%YuVurHOfmfaHhdg=A+ZG!P; zzcv+>@|13Q#QmU}`GH3FwyQIBy;o1(+){6T`uQ*Iz5am>RyW`5k}Vg1U;pn-%mH<8 zX$ymMz85DkFfb@2dj$D1FjT2BFf=qXF#P<_z|ioLfuYoZf#FpG1B2BJ1_tr`N%2SB z7#NsZJzX3_A`ZWuu{Zm+gT%3Vr)^0mH>NJ}){KqHXuFigaj;eB(Id_5?KzD)tsun6*H#W>* zy)MM5F12TZaA!-)j0K{MhS%5J{IFtPyw?Z)EK}zRlS3wl=;}vo4*cY(^l+a`f&N4R zr72I2Y~}3OdHI2~nU0FkGu5W~S<4MnzP@~@T%mI?e@E~&Gftt-mds9v30IYWpOM%n1HxY|Kp z?J&76`#F{8#U@rgU~RhMe1KJ3Rqg04{&n}ICR%@B+Q=Ps*+#ql(HgB?yj=|^8pWTq z&g{ya&bG(#;(`^uI@8tJ8cYAJonzM2uT!zMIrqPloJE$4fQ9A4KLHXi%F~5!TBT^+ z{@SJ~{wHYJuFR`ZL8-Ge4HHwg5&X>G5jC1jplW7-%Sf3&`77E7vneU|)|P(QsxAu?J% z{ruB1nB!MUOcK#uvOH*E9Z$#1Rf}eSi+SU5Lg&BxT(&ZxxDxz3(_-KL#d6Wh zj9s>BJgA<%Z}DM|`Pwfsb2NV*lv(`g?=FF>GJARw@7$g9>+i*ak|_ccDj#gM<&@Oo z{LZ((^5}=%#}k=5TQ=6ot-g|DwlDn9^Q_u%_4K)V3Vvb!QyI^0U2s}d%V5s-(3t8~FlvUu%)ISB<#MwxsQ1(WPB) gzaEe;R{781rE2K>bAH-V1_lNOPgg&ebxsLQ0PJJS?f?J) literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/spinner_black_76.png b/core/res/res/drawable/spinner_black_76.png new file mode 100644 index 0000000000000000000000000000000000000000..ec57460277a669e2623233a57ae57104024109c9 GIT binary patch literal 1086 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84i*LmhW}5h&oD4BNS3%plmzFem6RtIr7}3C zd%t* zcXxk3d}q_T2?a;gm-+0}N;x&fUuNQ#A6LcV|DKa?uGz1ykaVv|%YLsh)85Hef`*Ce z4n04e{LY2{OgYc7MZL6*gGIA;y@QaN`t#|Z{zP?uj=nfUf$QX*vQtNWo(rWZ`aiwp z!)-G8b#3S735<^33iCc~ZkqhraoxO(M!zY=8d^q~M)PVvI`gWjKX>}+EIYyGONyyN zW5Nb80YmYqIdkSjWW`=BSobt)!BIgDx3tSQ8}xb|jt6B&G0!@+Rd&5Y*plLvpO>(e zs9a}T{n+H^1kRVs7ZnE|+8G$;w)$~K!;RGIjF~#7dfpDxKULo7aSmu-&3tx-rNUgT zkH0#T4%j}ulyOXQqAA12d6vcOOD-Q{5Vw4g(d6*+aPqU(8x!{F@TR$Pc}f?uERxYW zeebg`)65BacM_g_uW~IgdCYNa>DF00b3F2|pDIYw_B)!R(RpZ(nyQNZqJx4RscIWS z{;XmA)R%HVaEYkGx2+cQCiYmIlDoUI&V=dg^q;=j3dVhRlsEs^dAikn!3`!AvA+EQ zHJJy0zPZ|N#2v7Q#p=l%dA0?$>m3#{rX8BFLaO~+Wvq3!{9gIrTbd?Kys&whyv(P0 zk&Gr^_(V>vPC0N+OY*Va`O0_F%XgG17keIgJB{;8#j(S!&bcBgDoUyig6VS#k7@G> zuByH(>~VmPS<>kDhZPLFCJXaP+~xL~zeH?$lEn&!yC)0F(^OJcg#2BllD5EDu7vH1 zvD<5wxET#rrqek!e)E6fXUd%${JQa8&bu4o%#XSGcHNeqe!yaq;4guVjn-?*N^@>M z-BtRseX7N+CYH4uUhar`l&8>owW@a4M3wm`B*bmrPc&4Sc3L6Zb!P6O0G>6fc{Tn^ zOIDak2X!yn-g0f{%>>Ot>EEaB-7@@}by(}I)bXwl^VO~O3TUyoIwiRTmWd3fvQdo6sTj4q$)!Ex3OyYOPxpBMd1zf#;R| zvS-}i=<{rHU)uqeX(5UmmI%)buHAJm2iyhSq z`M&b{hGypEL%05=PC3>4q+-KXN5!vScJ(FgxuW^y<)O4!aawDlf{&hBDk#~w=#qAP zHe=R(D!UWMt69g{jPfq{GdNEIVLwE-NcLoLq22WQ%mvv4FO#rfP B`wIX7 literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/progress_particle.png b/core/res/res/drawable/spinner_white_16.png similarity index 87% rename from core/res/res/drawable/progress_particle.png rename to core/res/res/drawable/spinner_white_16.png index 91601086918678421ead6276b506514263235ea0..dd2e1fd7da16d76dce2ffba5692e80ff202ba726 100644 GIT binary patch delta 282 zcmew)K11BBGr-TCmrII^fq{Y7)59f*fq_8)ggICk7#OzxGJnOuz`$AH5n0T@z%2~I zj105pNNhCg;l?CIhdqH(_WqM;vCqCnfj$bT&Lns@Bqi4?F!ztMRhR3>xa7}L3g z8nqk+z>FIsz(p$Iq^Q+SruVrkx%Cl|yzkB%&aamqBqCEKLDGH*QKWFfcH9y85}Sb4q9e0MM6l%m4rY delta 373 zcmbOs{z=@dGr-TCmrII^fq{Y7)59f*fq}sQggMw47#PBtezr3(FmM)lL>4nJa0`Jj zR$Ra@8}+db&7ilC}p|tJT=DVLBPY@{RiaUNT+;vUY#;V!V1wVwG z=GfsH|LDwm*PPyssk5gWvLDl!`dlgTw8}r$b%yGxLjDIfOg+V(`bFvl;|!y^&h+y4 z-9bM;IJ138Gh1%Do7=W}>W#mteyJf0jAi$}_^(k`X<%Sl!NsX?pq}jyFN4^-UUn(7 T@9!BH7#KWV{an^LB{Ts5_28O9 diff --git a/core/res/res/drawable/spinner_white_48.png b/core/res/res/drawable/spinner_white_48.png new file mode 100644 index 0000000000000000000000000000000000000000..d25a33e2453482616501841bc67f721e9dea35ce GIT binary patch literal 782 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 literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/stat_ecb_mode.png b/core/res/res/drawable/stat_ecb_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..a948770f7dfd182ec5055c26c0a76b6518c215d1 GIT binary patch literal 625 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZM7V_;z5QQ1G0fq{XsILO_JVcj{ImkbOH zY)RhkE(}o&kqlAE#s?2DFfecyctjR6FmMZlFeAgPIUobrOFVsD*>AG4a_E_c*05}1 zU|{^{>Eak-aeC_%-)t#IiH7;5N1Ly+1+z>P*|Q{TV*;O3Rr~~z?@DJ?mwLYc#}HhV z{jWvAMAIZ;ftRy+Xr>eoFGrBRTST_QLdOrU7sYM5?fl}@E3fq zd%JD-My=h{!NJ1Rp*Q`tE_avT^5$OFcHRSNyX*TEID#9OWq#Kaa1~^*K5($Tc_-)D zc;87UmrQKGe(1!ep4)HJEMz8~e}1y=l+o$zS#H~Jr~dzI_q6C|7(>Cw$4yBaGkj!v z-QBE3xF&k2Xoz*m)Y+))5mS@vHQGa%J#YH`#{^K_*_a=*d`DOd+>#mJ2&YtbP zc&}n#Cusc1~~nxmn9S@vsHv1noVpQmrjtQRgZwS!}?OZFe1GyRk44ofy`glX=O&z`&N| z?e4tga*ag@J*2 zr>Bc!h{y4})6VBhyNVpQ|9v>^n&+(2IW1eG1lF-!QDxfNK0!fYg}9e0Ur1KbDaOuV zOV^1%xC8kA@QT`os#s2O($95VG<8CZMaU|JThrRyws_{Q^vqS?SpH`2-KQIl{FH6a zp1-AP@yz8v_kFLuKQpo-&?j1+XTQBoP~@r_<*70v94eETtAqdKeZLhiTBm#G9`BJD z`6ZWMuFQ$Q=6O4_MZiN<@EPNtDO0qcI<9;oGU2ZHk#}2Uy(41&d`rqMOiE(1|KQoB zvh}HycCTp10?)|`91$PG4S1SEv|2e@H;c#q`qsH|QPUpRBdN4xRm%S;A0cX!4N6R8)w`s9CYS?_Yx;nyT4Zig*7HOesXm?4hfZ4k*ypb_F++33TwQ(L z$3Nx54t3dz&HJQrM>8Y(N^95YxY*dECcdk#zM9s%WV_<+f75?!+Usw>cI~mJ`k!-o z=RE!A&YwSSZOm0uSC_2FZjfIW=W6cTS5jX5;zXiU(5JgkPp_#g)j8bt($&b`eE(YY z+i%{;m|=F>eYxMqgU6RkN>%ksU(Z*VT;yH< zjn(le?;DFNj1JT9x@t{T;!rL+$-;kV!p@-1@cDL6FTcw(`YZY8#B$Bq8MirZ3A<=@ z1~i%0^D{!GR+ngTgBI_Z=W;>H--t)kwJOB~>SmSDW}8lne|_n|<=z z*6YV8a5#4zRr>y3WXIRb=XG{`7u0mTd#7ae_TcG{EwpaWHcgX1$CS{*W?O4pQdZI= zCb+62?ZT3vx?^48>MJEPcJVE9{I}KS=+dMBt*K{f9naO3efx5F%v!DO& n^=|&V=i&SI7tIwv^^eu?)48_u-FBV~3=9mOu6{1-oD!Mk44ofy`glX=O&z`&N| z?e4uHbm_Edv8{ zfv1aOh{y4}Q{pqCOGS>`pWLgv|F+3%-%EWhq8pobB?Oqcga@iuU$_}{{8zxiLkXLf zbM6zV`4IWbD(u^mmV*mk{W5rdEMaz&G>7QK-i1%g^w#mu-rYD=HTTw^I^VjT*V}V^ zFaL>Lo^P$czxbWy{@=FGtIz#Bcv-2@{nUfm&GVm%f1d2MdV<4(fSjKuM_1j=t~dOB z`b~(jz~_lVoi2T<PyUTt~Jam(OfEJwC?x9wnIe=!)_kFaj1yVWQXPVlP{(I73`2J zVYY4OlV@6QIPuB3CG$@|Kk#I`NBNWD^m{vRO>+serNPBE3;o) zJ;TzLnQP4kR}~q>i5?2vpG;eS@p)XisJfJe_vQM_zTW3f%DfEDT-J9zEb-M3k(a@l zQ^GtVbNA_Z>m(}r2hlM2j@j?UnHkZYM-`>^EUOZoJY0%0Ar)RP6l-ZvD z|LmP!=|43;jSg)ybaiL;SP-h@{GR{kIo9vQ}ft6_ zJm2ZkRQ~PlF@3)FInDx#KtaN;+?Tpvf`oZquSe*f2U6GTppD2Z`a8; zSG8Asl3MdKC$9C{RE<`FrbSvz7Xl3pnb|hplZf~83;Jjib3OIn^~iO9eh8P(t#p~b zAS16LOU^v@W5u7mMdllm-(8boXiFD(+kHv)Ra-;<@>;K{LO<`+PD`D5uE9}3g5|Qp z&m5uhi+|N;pZ&I-RnpdCSABWbcTcMh`wUq?)ug9 Rhk=2C!PC{xWt~$(69B47*r@;j literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/stat_sys_roaming_cdma_0.png b/core/res/res/drawable/stat_sys_roaming_cdma_0.png new file mode 100755 index 0000000000000000000000000000000000000000..c61cce774ec7ee105197f5e2e390adc06872352d GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0y~yU=U(pV36QoV_;zT9=g_$fq{XsILO_JVcj{ImkbOH zY)RhkE)4%caKYZ?lNlHoI14-?iy0WWg+Z8+Vb&Z81_lQ95>H=O_M5D1>?Sh%xcaU! zFfjb|ba4!^IQ@3YSuV#wf#dblC)7+1^75K@;80s{uge-6w$$vWj5&L|wtrwU6T8;+ zY2u-+GovTJv$Yf3WKf!QuKwS1`{HLl?Ek(Qi!tUzatdGk?y`b!P6O|SA6sTE2`QSA z%3P?wDfK}9`#B$XMaBK}UBIT38ejR6x@?MG zx_cijR$I7DX&P_mw*wcvRk&nYZWybqJ{6POI7xaTe~ha}ssI;vI{TT18S^@oHVD-- z>8PZ62Cr?eWt_papZSceqO=8bo#xL~lYU%Lu)5*uc0iENs`2aLAGh`P9Sgdo?qcxa e|NVU#<>&UAsRg}bp2xtzz~JfX=d#Wzp$PzQm6I(1 literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/stat_sys_roaming_cdma_flash.xml b/core/res/res/drawable/stat_sys_roaming_cdma_flash.xml new file mode 100644 index 000000000000..07dc4465ee32 --- /dev/null +++ b/core/res/res/drawable/stat_sys_roaming_cdma_flash.xml @@ -0,0 +1,25 @@ + + + + + + diff --git a/core/res/res/drawable/stat_sys_roaming_cdma_flash_anim0.png b/core/res/res/drawable/stat_sys_roaming_cdma_flash_anim0.png new file mode 100755 index 0000000000000000000000000000000000000000..d62502dcb78d27ddc91b8c97804b425dbc74d302 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0y~yU=U(pV36QoV_;zT9=g_$fq{XsILO_JVcj{ImkbOH zY)RhkE)4%caKYZ?lNlHoI14-?iy0WWg+Z8+Vb&Z81_lQ95>H=O_M5C6>>~Olje7za y7#PGnT^vI!PA4Zwur5vz>1hfy;A-P%U|_q!z{s5T%bJ0Kfx*+&&t;ucLK6V4E+bd~ literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/stat_sys_roaming_cdma_flash_anim1.png b/core/res/res/drawable/stat_sys_roaming_cdma_flash_anim1.png new file mode 100755 index 0000000000000000000000000000000000000000..c61cce774ec7ee105197f5e2e390adc06872352d GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0y~yU=U(pV36QoV_;zT9=g_$fq{XsILO_JVcj{ImkbOH zY)RhkE)4%caKYZ?lNlHoI14-?iy0WWg+Z8+Vb&Z81_lQ95>H=O_M5D1>?Sh%xcaU! zFfjb|ba4!^IQ@3YSuV#wf#dblC)7+1^75K@;80s{uge-6w$$vWj5&L|wtrwU6T8;+ zY2u-+GovTJv$Yf3WKf!QuKwS1`{HLl?Ek(Qi!tUzatdGk?y`b!P6O|SA6sTE2`QSA z%3P?wDfK}9`#B$XMaBK}UBIT38ejR6x@?MG zx_cijR$I7DX&P_mw*wcvRk&nYZWybqJ{6POI7xaTe~ha}ssI;vI{TT18S^@oHVD-- z>8PZ62Cr?eWt_papZSceqO=8bo#xL~lYU%Lu)5*uc0iENs`2aLAGh`P9Sgdo?qcxa e|NVU#<>&UAsRg}bp2xtzz~JfX=d#Wzp$PzQm6I(1 literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/stat_sys_signal_cdma_0.png b/core/res/res/drawable/stat_sys_signal_cdma_0.png new file mode 100755 index 0000000000000000000000000000000000000000..0ef7d534c3711c039d13ffec19c575592eb98868 GIT binary patch literal 701 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&z`&N| z?e41VVPaS zRWUQC1N9vd5pN$gHLaa_(r4Q#f%PBb%&S*dulk@`TvxoWIE|@hS^&d>%P&j%k3TL~ zJaXAxMYZKjN$h{KxqkIb4nho@ZocVW_xfmz9(!o$f9?Ykhkw@8CH3rO(D3Y7mU*x%FiiIF_JVmc0i)Ljpcly6Nh4AxnkEM1_q6# z8x`g~XJoK=zF^8e-pVCHx3?umify~CYc~6AsH#)P@2Lz9>#rY9F`B4fy*EzfhyhQ< zymqgpO+Rb?MW{{*vgEy+_x+(-_AIrxyl($}cOO#z9>>C2dw+i;hoXb#)Ty2wuXmO6 zCoaC|ur};)*4AAckA1e;u}*sBT?dKeO@-?ZZ_+6^cQM1nVD?$1a@nP==DO9BJX9`Z zZ4Fp|ePe{q1B<>Gl@f|bO)Y`9 z?h4EM_}a~%F5jB_LtHm!{}$~Xjm!}@vYk%!{(qmD$iexCN9S^>?8*?YdAD{%RqXQk z5f!O7-N0A4@9~MFg(j|n>#7zpIIIl$6{;b!@6Gq$H?|iDtXg%*fM<^1^84+FAFh7m zx%+P2y0F#ulTN05RQ~sI-t)ha>#v`G{83`Q_CKb$yEZ#zxlW`pFfcH9y85}Sb4q9e E0Q^NUe*gdg literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/stat_sys_signal_cdma_1.png b/core/res/res/drawable/stat_sys_signal_cdma_1.png new file mode 100755 index 0000000000000000000000000000000000000000..f4839d4954fea0a9d07718b2ede327e602821b13 GIT binary patch literal 714 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&z`&N| z?e4)#lXPi z<>}%W;&J@$)csjXfg;E1i?0f}s5J6u?2h0G&hR*(#S#>8^A}TQ&=bjTtZ%-lUUTzU z%Ac^+RZ3C8t!c@ITdLe#+dlrA9a1d0SnZha)b&#Ps^9-S_w(G&@&~IAFz?v0V};Y|9j}+L&cds&-SxS2|Dxqv+>d^ya6Rj zKWp}F*uTGDfGPQm-@(HMDjZB|lR5kQ`)%y)#UE`oaS(Bh$liGEQr6Zx2Uo9Nz1G!h zsnE5kLk1}}a>A~H-b!AYEdpC^=j!R}m#?j!eiABcK=#H_1g z9(%)-B6Y#FrVPgqM08n&Ky2`I7s!{t+P`ZuDmX-+B+|L&GpyW zu1yLK*}hAI5)CAB!aJv2@^xMtc6-;!pEdVxO85VpU8d^(&h`l7VvQ)ljn|ZxmQ1yr zcr9rjiOJg3#EsoJk?pYYM_R{3_o2W-g~$2byLa23*_@Al)yW>9BlcfLR_Fs?sFWu{Q{chg$^{wJuD_qzk U$`vLsFfcH9y85}Sb4q9e06RcGp8x;= literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/stat_sys_signal_cdma_2.png b/core/res/res/drawable/stat_sys_signal_cdma_2.png new file mode 100755 index 0000000000000000000000000000000000000000..e25a99cff692649d46b275c0e1e8fd73d26b81d1 GIT binary patch literal 706 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&z`&N| z?e4^p&Bs{Xy%F@=)N=z=>J7M#u*2bqZ@BZ9dpZ;+34EBPuvTJpf zl|R#ZEPr-5w+h%dEBvS`FaOTGfM>(@?d8HOj!JScp}H_@ynN;*RNmSbyu5tNoJQJTQX00c=)@+-QC^2u6+Fb zhQ|b41uwsxV&WSq80e+g^5EC6S)V_DUaRDJS!Av0R4>-0B3>(N1b^@8l}w%!v9RNL zC4-0Nb|KG6EDUQ+gHC;SHS2uxq@A{kBmu2o!OX_j-da1-L zz;OEMrh=n|Xa4@REtIjIrqUVxexs=1QjwrjcdouIV|-DzyDxL?#VG6bpCim-4_$Nd z^4xzv-Du{8_upl;r+P6=@lrj$=D68^R~_?7aqHO~)?bgVHhkUl)vEeIbeP4*$n~F} z9o>{Ov3thc*;B=~UH7{7di%7uDvB+q>*Y>&aaenJtu)Q=nlWXP0>_P;H#JkTb#vBF zy?r~Hq3!U(-xmG7$CDRnB$-G(H9G$}?9y9C6RF<#tx<0i%x34-az}rzoo~Q1^ZfJu z^XJdszhl;%dGq47MXi1Rv}or)!T�JpcKqO+I}v;lT4v`!m+XKPf-D=Pd&R1B0il KpUXO@geCyz>pPMF literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/stat_sys_signal_cdma_3.png b/core/res/res/drawable/stat_sys_signal_cdma_3.png new file mode 100755 index 0000000000000000000000000000000000000000..d828d99a5b0875603558711ff70b7f21d6c9f71f GIT binary patch literal 702 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&z`&N| z?e4LRXtj)1%a1@EvHd-6i{CS7Hq_YFhwF%WFJHcV$>o>-l>)pz{`yt5aLO*`Q++Da zPfsYSa<(j*!91G*stf?AZGtQ>zh;>hz>&>X**<{F;%(FM{eD0oo`|M^c30j%Z zqsYNDZ{9qQNiCv6OGTVGe*Lvu8}?d5)pOE-OnHGx99Eb zUZHKNJL62-lcKU)1oYIURSIPuSIR|Y*W54PzHv7H!6j4X%$-|URJ7@$P}0x0Qao%7 zJnhckO=P-k?d*hD7$=`(IsZA#={4h&(@*EOIz0>)adqE+=-Q>1CRekjPMFej8JAZ!v(x8=>s{cHGZ1K-_u3!GU_wRp3d}E&|X&IJwGLeyifq}u()z4*} HQ$iB}k44ofy`glX=O&z`&N| z?e4P!!X=^o0LLN6zfB*;6u~{ACfG*Slfr zt>sm%Tgq&<@ z+k?Gc#`|856YD-I&k(?{AVh0#)~qny>8Arizv?lav;6k^ukiCfq7J^3M7ob=Eev2- zDiSF2wCLXZ?-z5-Hpb`~O7#|4$gDa!kBOmB#+idrk>%LqjW#!4e_f|`u{8G9!-5Wr zzKKc?=QIa(olI%U+dg|c|D~dH2QAO5d0zW|YPm{_0E2@7OZj9L#|cUcbP0l+XkK4RZ!^ literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/stat_sys_signal_evdo_0.png b/core/res/res/drawable/stat_sys_signal_evdo_0.png new file mode 100755 index 0000000000000000000000000000000000000000..1b8aec7cfc806ba03a968847cf54c9eb1b765cac GIT binary patch literal 912 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&z`&N| z?e4!T!l6`K}a`tAQnj072oyp-p)mOGQS7`P&{%LoA zo}2x>_WkdBYl=Uwo;_#&T;-`pj=LANZhsvtq5a|6S82PHyp0hldu-&yxm|1Szn{2s z{)cIk&Q-FnT*BC9=kjPx?fzpO_Coh})pj4--pknjRsMSAr_;i}c~h=6@-SrlySF91 zMc{1F&OZtH`R_#=X6HN+j5#`O`gF#QMIC<2Kc|Ygo^LE<2-o7=^u8wlZQT5*RAyEq zkEK_m)j#?A`Ub8H$=H5-&YU?4OZOydJ2!^ZPFtHEonw2K>E_|f)j^(1&a9ivqOPuP zcr0LTnBg&j z-ML&SPK99$Cn#I5zrh-1Fyc>as;s*N5Mz+<5rz`*%gp zzsW`)J=ZNe!Qj(Pj;M?&uTqz7RpU9#)5+1qAd>TM&rEC6xeE?IyX-6X|I3XeetBCK z#;rT090dei1&>Mmj#+o4^YM(OOPAjGyvJYey4&JL0jBexZ``}bmQY$M+7Ptz$gyK= zfg&4s?|vO|^svDhpToy>GC#d|p^+#NHS?dRp7~CPa79n1V}&*jNj-`@&bO7lFTE{W zdpULW_19<4ohvFSIr8scUH+u|>;YaE-w6FGPw-l~zpualy7AOM*VTT=zscXYY}+xx UhPSgA7#J8lUHx3vIVCg!0NGKg5C8xG literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/stat_sys_signal_evdo_1.png b/core/res/res/drawable/stat_sys_signal_evdo_1.png new file mode 100755 index 0000000000000000000000000000000000000000..7ce01fd96a1b3c57f252e842634baa40e2321a6d GIT binary patch literal 925 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&z`&N| z?e4zNK1xUlM9wD5`OZsx9SXiTWe? zi*b?v1(~}$S{q&;W0&W${P`$oa&ygRQ~_|@BQ0#<eTr1QAx}U4FML% z>1XyIjP<%TJ$K1Ou@if{k3|2kntL(9WMB1ry{-D$wS3a|^FDkzzWkl!i8aoWOc#DE zet3>UQR-;Y$K8hyAHL7ct zro%#>;LOtNoi)Y9#Z$agqt=S0r>A>p=I=aZpy1n|`ulnAw)wfuZyvq0%~T0WyYAVv zdGqFoY|ZJXBeFXm?@*sVWs`og_<@quJF9B1u71<|{_1OOgAc3za%HL%$_Tp(Itnb< z>XvhbTZ zI`Fspd#vd0^W~0*UbruIQ93juFD+1H;gnMoIt+LY9=OII&Afb>?6#X#+m23tKi}d_ z;a@|J9e-cu9x`yr?%jGV_PX}RM;2+7m6qq8e>Ru99<{bjpsB|0{JC>{4B6S)3_gB- zn|AK(yf&-3nfbitx+$l84*%B4{Pg38g_oxK<=am_O%~6Pn52>*bG%mNTGW)Fb?$vj zF2A%`{yJ=BNJLD`lP_PUJbwK6oyvaBgr0?$U-BIJg%q&oE?5?z#LwH=@lYyEmvSYb%$-)~M3H zKoLRLiKh*Emomp4XETfAaMZj0SNBPgkuHb-TK`xwRd-bopu3qe{8z>S~5J@89n}tgfy;<#cLaUteBN<-F_vBWKQ> z`Lj4H>(%41)l+Z&F`st+x#m=_n3$M9rFC`xI$xi>bm`KuLx&Fe?|Xm$5%UbgXYbQC l@0_^u$$qng{}cW*#1`%o$vkm<5d#AQgQu&X%Q~loCIE+`yk44ofy`glX=O&z`&N| z?e4<%nr&FuvO6Eqf`nI@| zZac@~lE-39>!js#G@d+}ywL5zqwb3*+2;yPX?9ezdsC5Cww=AyefPbo($4<1i8tn^ z-<$co^8XnN{{2-ao*q@bd(W?@Q~$CXeRg1DnDeJJ={tv_ zpVrh<{l||VcW21k6yQ=I9vvIY>X3c5z~WC(_FwA&)`F!I6^@@fZ#J)YrSG=|4s4o{ ziz_GXJ9^YLYpc}Xy7`|!7cZIeJvT*SLfV;4pKtS7uP=A#`|xF!iIC>z&n^!R9byU; z30!}@b5Vyy-|?4|gPw`pW@sh_Q3pF0+n)~kAz1OPl z#F}5;dM)Pkq-B>r|M~q~K$K&mfa~H`i@wh)5)(A1ZLi;R)@94LuTs_d-zt8+4W4IH zm$djs^=5XVW$%53y9AQmP8~9E(VVI%=qS+8_;&tw?%in;JU8q1o;^K3F6xczb5@Ru z4@a4s6dbaBMO@47^c-P~h>YyCJ^%YjS?<;-4#f{P{de!iGF-cUopHwO*~!`2+-ptU z-QD}n?g-Ml%=Sbf-bvvAtC?V9gFf_I$b(i+a&Y&*8<<9G` zFTVUTVoivY?S`d6CzCoKsr;Y3;gH9yvuX@y(~O_b5SzThPrgD}TW61e(qgN(QzDv{ zcH3}z$2ItHb1N3D%8%MLxkbS2ziY%S7Y2#s3sKLn_#B!N6rv@%Y}qokq@7~dq8?lD z{r>%%K}JsQ)>+pZH*ZRQt(trJ@@1zpg>(LF4q6*_|Lpnm_1E5i=guw^|7_DAwf5N2 zqep)qO!%;K?a5D{K0Uj1>C*ajukSs#H%LCy9=CpbWkJD#|EK@4y*zT6YwhQK!VC-y N44$rjF6*2UngDk44ofy`glX=O&z`&N| z?e4xqRg=!-KSiP7CHuHDO@=AkNfT! zz0cw%-onuw5mMrMT#+5p-YQK;d(WIYx+dsytAUXC`>OiAdduFQt2Unek|UQt=H2f5 z)%X6+d%yE}%=>fC%Xe7pcgS#bX?Y-3EMaJ7c7as8{@d54Zi_EIdAE1B&5uux{fB>Tf4%3&$JXC$MXw`{Fv$F^d-CsN z?f;CTqEEk@o15=594c8Xf3P$sGn12HsmR)}*Tze)=pPVq(AdIov9NB-w-wH7KeHcI zI@fYFZu!gEvu7_3(YlypW@&5d%29Y()4BPA?6kG>x8JDR$-1aF{d+HuC2K>%KP{R0#pd5L!y9&u92>Unov7le&ne~7_Vnxe^~GIb`yvv5Up3?3Uv=Vd z_4m15Z^LgZBz!rham+m9Zr>S+<|#(*kB%4eNSV#g|F(8k*qx-$Pu0%XRXp3U{OfX? zpYJ%g+wb+2Ij*sE!?j%(*BzFW0SF|o0= zC0DXc`S|%)Ud`e=9o3b&_U?;spMzC{PVHM9w2~oUWr)nRwJu(rhHS|_!IM_6Ta&yu zZu!NGfc4j9#aQ05n{hNXs;un#;iyoWZ4 z&;RDz=i>G9)TZ58ZAW_y*Of1svR5T4+vfaX31P}zR+S>Z{=g*(>4;kz^xj!N5wY_xju`0il^|^NcoBy&J_0BjtH}u4E Q1_lNOPgg&ebxsLQ0MF&Dt^fc4 literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/stat_sys_signal_evdo_4.png b/core/res/res/drawable/stat_sys_signal_evdo_4.png new file mode 100755 index 0000000000000000000000000000000000000000..f0537ddd847259fb001ecc916ac8d0af87447aaa GIT binary patch literal 823 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&z`&N| z?e4Ew8R?na>pLKQ8Ipx9j6Xi;EdseA9RgygeUpY7Du= z_+_@omaF2ck1R4QPb_SFnts}rZ)dn=*Zb~&<^oZ(FR?uMa(iXH8%N>l{&GsN8Z4QlV0|uob+&AlC|`<~@r1DIw^Q?zlbc_@ z%v^O<>u8do=F{4ENv@%cs{Gng)$I5Ym%yclymH7)H}uZt4%_SXjwGCFa{ z98avPlWRD9*txzwFOTo`HcKn3OMkker-{C5yRB1ka$4%wH|5h$e|W;{d`WhL{IZbc z)hq|Te*G%%Za4q=lP4`TcJGrNrCEgM37y{btFOe0*THJ;w~g=C{7zi>j>}4ni#2Pj zRIAg$<0X6l9(c9OPQ+7yTk~YvW`>l_H?7(Ce0ieIiMT%wAeUc)l-JiC- z^z4EN{>~sS-^&?Wqh9Rldu&nHR({lJ{RVaa%O>BxefzWjdbQNMrp#H_ey{22?XC4! z5#m30?%c0y6%ySpN$m9UQ3H6Po6B#b9l%3c!Q-^&PT1C#;y7D fy4nx^Z`_TIj;C89&irLyU|{fc^>bP0l+XkKH063) literal 0 HcmV?d00001 diff --git a/core/res/res/drawable/stat_sys_vp_phone_call_bluetooth.png b/core/res/res/drawable/stat_sys_vp_phone_call_bluetooth.png new file mode 100644 index 0000000000000000000000000000000000000000..7abfd194fb800bd11d62b8646b5fd4b3133eccae GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=B*cJzX3_DsCnH`TyUZc`c(bvn&I5&qBGt?EfzxPF?rE z{{M`?EDdGj)0%dbb2rV_p2fc?;*jdneNEv99h#z}<~Gip+nvMx@86$eAHKfy-MoMQ zzV!@6s)0HWMZ%{gJQZZw+4S)K{(2Wljf1DTj_B~{+x=&JbYCETLy-lAa17FU)wC+ky=i=?0Z zze6AXT+ZK6Ib+%%)~HY7yH)qyV&eIlcd6i?@dCy3_J5NMrae3s@cZL!`3;fv|C2U8 zIUk=8ld$oKzq`QECduP*j32$(H0#XTa#y}8`1rTn&hScZ{h<#(pU1aUN)&$ju7Ba% zehsmVjzS}o$`c2En%Aev!RF!*c`#qZX6`3Pf9LN@{91SY9s7eLjyga3O?NEVDU#xO{M>I1 zsckWJXAPbnP~IVxWVp=#pW>-?)83X#%I*1k&Oq6#`{Cp7_B=07uM^U-F|29Q-SLmn z_UNe(^B}lZ^zG1-duam$(#8qH83zU ZgnnPUczaB%B?AKkgQu&X%Q~loCIIg?epCPe literal 0 HcmV?d00001 diff --git a/core/res/res/layout/character_picker.xml b/core/res/res/layout/character_picker.xml index bb4955a6c71c..03448497f5fd 100644 --- a/core/res/res/layout/character_picker.xml +++ b/core/res/res/layout/character_picker.xml @@ -23,8 +23,8 @@ android:id="@+id/characterPicker" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:padding="12dp" - android:verticalSpacing="8dp" + android:padding="4dp" + android:verticalSpacing="4dp" android:horizontalSpacing="8dp" android:stretchMode="spacingWidth" android:gravity="left" diff --git a/core/res/res/layout/google_web_content_helper_layout.xml b/core/res/res/layout/google_web_content_helper_layout.xml index 40f84bf8f3da..546c4586bcc2 100644 --- a/core/res/res/layout/google_web_content_helper_layout.xml +++ b/core/res/res/layout/google_web_content_helper_layout.xml @@ -18,10 +18,28 @@ android:foregroundGravity="center" android:measureAllChildren="false"> - - + + + + + + + + + diff --git a/core/res/res/layout/progress_dialog.xml b/core/res/res/layout/progress_dialog.xml index 2d7afd60ee16..8f66451e4b3e 100644 --- a/core/res/res/layout/progress_dialog.xml +++ b/core/res/res/layout/progress_dialog.xml @@ -33,6 +33,7 @@ android:paddingBottom="10dip"> - - + android:layout_height="wrap_content" + android:padding="3dip" + android:orientation="vertical"> + + + + + + + + + + + + + + + + - - - - - - - + android:orientation="horizontal" > + + + + + + - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/core/res/res/layout/recent_apps_icon.xml b/core/res/res/layout/recent_apps_icon.xml index b8cf08964697..d32643cb15dd 100644 --- a/core/res/res/layout/recent_apps_icon.xml +++ b/core/res/res/layout/recent_apps_icon.xml @@ -18,27 +18,22 @@ --> - - - - - + android:textColor="@color/primary_text_dark_focused" + + android:paddingTop="5dip" + android:paddingBottom="2dip" + android:drawablePadding="0dip" + + android:textSize="13dip" + android:maxLines="2" + android:ellipsize="marquee" + android:fadingEdge="horizontal" + android:gravity="top|center_horizontal" /> diff --git a/core/res/res/layout/search_bar.xml b/core/res/res/layout/search_bar.xml index b5124904e427..13e66aad0d25 100644 --- a/core/res/res/layout/search_bar.xml +++ b/core/res/res/layout/search_bar.xml @@ -71,9 +71,12 @@ android:layout_weight="1.0" android:paddingLeft="8dip" android:paddingRight="6dip" + android:drawablePadding="2dip" android:singleLine="true" + android:ellipsize="end" android:inputType="text|textAutoComplete" android:dropDownWidth="fill_parent" + android:dropDownHeight="fill_parent" android:dropDownAnchor="@id/search_plate" android:dropDownVerticalOffset="-9dip" android:popupBackground="@android:drawable/search_dropdown_background" diff --git a/core/res/res/layout/search_dropdown_item_icons_2line.xml b/core/res/res/layout/search_dropdown_item_icons_2line.xml index 0d074909361e..2710b3bffcb6 100644 --- a/core/res/res/layout/search_dropdown_item_icons_2line.xml +++ b/core/res/res/layout/search_dropdown_item_icons_2line.xml @@ -67,13 +67,10 @@ android:textAppearance="?android:attr/textAppearanceSearchResultTitle" android:singleLine="true" android:layout_width="fill_parent" - android:layout_height="29dip" - android:paddingTop="4dip" - android:gravity="center_vertical" - android:layout_alignParentTop="true" + android:layout_height="wrap_content" + android:layout_centerVertical="true" android:layout_toRightOf="@android:id/icon1" android:layout_toLeftOf="@android:id/icon2" - android:layout_above="@android:id/text2" - android:layout_alignWithParentIfMissing="true" /> + android:layout_above="@android:id/text2" /> diff --git a/core/res/res/values-ar-rEG/donottranslate-cldr.xml b/core/res/res/values-ar-rEG/donottranslate-cldr.xml new file mode 100644 index 000000000000..2c20ffcdf38e --- /dev/null +++ b/core/res/res/values-ar-rEG/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + يناير + فبراير + مارس + أبريل + مايو + يونيو + يوليو + أغسطس + سبتمبر + أكتوبر + نوفمبر + ديسمبر + + يناير + فبراير + مارس + أبريل + مايو + يونيو + يوليو + أغسطس + سبتمبر + أكتوبر + نوفمبر + ديسمبر + + يناير + فبراير + مارس + أبريل + مايو + يونيو + يوليو + أغسطس + سبتمبر + أكتوبر + نوفمبر + ديسمبر + + ي + ف + م + أ + و + ن + ل + غ + س + ك + ب + د + + الأحد + الإثنين + الثلاثاء + الأربعاء + الخميس + الجمعة + السبت + + أحد + إثنين + ثلاثاء + أربعاء + خميس + جمعة + سبت + + أحد + إثنين + ثلاثاء + أربعاء + خميس + جمعة + سبت + + ح + ن + ث + ر + خ + ج + س + + ص + م + أمس + اليوم + غدًا + + %-k:%M + %-l:%M %p + %-l:%M %p + h:mm a + H:mm + %-e‏/%-m‏/%Y + d‏/M‏/yyyy + "%s‏/%s‏/%s" + %-e %B، %Y + %-l:%M:%S %p + %-l:%M:%S %p %d‏/%m‏/%Y + %2$s %1$s + %1$s %3$s + %d‏/%m‏/%Y + %-e %B + %-B + %B %Y + %-e %b + %-b + %b %Y + %1$s – %2$s + %2$s – %5$s + %3$s‏/%2$s - %8$s‏/%7$s + %1$s، %3$s/‏%2$s - %6$s، %8$s/‏%7$s + %3$s‏/%2$s‏/%4$s - %8$s‏/%7$s‏/%9$s + %1$s، %3$s‏/%2$s‏/%4$s - %6$s، %8$s‏/%7$s‏/%9$s + %5$s %1$s، %3$s/‏%2$s/‏%4$s – %10$s %6$s، %8$s/‏%7$s/‏%9$s + %5$s %3$s/‏%2$s – %10$s %8$s/‏%7$s + %5$s %1$s، %3$s-%2$s – %10$s %6$s، %8$s-%7$s + %5$s %3$s‏/%2$s‏/%4$s – %10$s %8$s‏/%7$s‏/%9$s + %3$s %1$s %2$s – %6$s %4$s %5$s + %1$s %2$s – %4$s %5$s + %3$s %2$s – %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s %2$s – %8$s %7$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %3$s %2$s، %4$s – %10$s %8$s %7$s، %9$s + %5$s %3$s %2$s، %4$s – %10$s %8$s %7$s، %9$s + %5$s %1$s، %3$s %2$s %4$s – %10$s %6$s، %8$s %7$s %9$s + %5$s %1$s، %3$s %2$s %4$s – %10$s %6$s، %8$s %7$s %9$s + %1$s، %3$s %2$s %4$s – %6$s، %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %3$s %2$s - %8$s %7$s، %9$s + %3$s-%8$s %2$s، %9$s + %1$s، %3$s %2$s - %6$s، %8$s %7$s، %9$s + %b + diff --git a/core/res/res/values-bg-rBG/donottranslate-cldr.xml b/core/res/res/values-bg-rBG/donottranslate-cldr.xml new file mode 100644 index 000000000000..b8b50cccdd78 --- /dev/null +++ b/core/res/res/values-bg-rBG/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + януари + февруари + март + април + май + юни + юли + август + септември + октомври + ноември + декември + + януари + февруари + март + април + май + юни + юли + август + септември + октомври + ноември + декември + + ян. + февр. + март + апр. + май + юни + юли + авг. + септ. + окт. + ноем. + дек. + + я + ф + м + а + м + ю + ю + а + с + о + н + д + + неделя + понеделник + вторник + сряда + четвъртък + петък + събота + + нд + пн + вт + ср + чт + пт + сб + + нд + пн + вт + ср + чт + пт + сб + + н + п + в + с + ч + п + с + + пр. об. + сл. об. + Вчера + Днес + Утре + + %-k:%M + %-l:%M %p + %-l:%M %p + h:mm a + H:mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %d %B %Y + %H:%M:%S + %H:%M:%S %d.%m.%Y + %2$s %1$s + %1$s %3$s + %d.%m.%Y + %-e %B + %-B + %B %Y + %-e %b + %b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s - %8$s.%7$s + %3$s.%2$s, %1$s - %8$s.%7$s, %6$s + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %3$s.%2$s.%4$s, %1$s - %8$s.%7$s.%9$s, %6$s + %5$s %3$s.%2$s.%4$s, %1$s - %10$s %8$s.%7$s.%9$s, %6$s + %5$s %3$s.%2$s - %10$s %8$s.%7$s + %5$s %3$s.%2$s, %1$s - %10$s %8$s.%7$s, %6$s + %5$s %3$s.%2$s.%4$s - %10$s %8$s.%7$s.%9$s + %3$s %2$s, %1$s - %6$s %5$s, %4$s + %2$s, %1$s - %5$s, %4$s + %3$s %2$s - %6$s %5$s + %1$s %3$s, %2$s + %3$s, %2$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %3$s %2$s, %1$s - %8$s %7$s, %6$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s, %1$s - %10$s %8$s %7$s, %6$s + %5$s %3$s %2$s, %1$s - %10$s %8$s %7$s, %6$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s, %1$s - %10$s %8$s %7$s %9$s, %6$s + %5$s %3$s %2$s %4$s, %1$s - %10$s %8$s %7$s %9$s, %6$s + %3$s %2$s %4$s, %1$s - %8$s %7$s %9$s, %6$s + %3$s-%8$s %2$s + %3$s %2$s, %1$s - %8$s %7$s, %6$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %3$s %2$s %9$s, %1$s - %8$s %7$s y, %6$s + %b + diff --git a/core/res/res/values-ca-rES/donottranslate-cldr.xml b/core/res/res/values-ca-rES/donottranslate-cldr.xml new file mode 100644 index 000000000000..d5abeef1a96a --- /dev/null +++ b/core/res/res/values-ca-rES/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + gener + febrer + març + abril + maig + juny + juliol + agost + setembre + octubre + novembre + desembre + + gener + febrer + març + abril + maig + juny + juliol + agost + setembre + octubre + novembre + desembre + + gen. + febr. + març + abr. + maig + juny + jul. + ag. + set. + oct. + nov. + des. + + g + f + m + a + m + j + j + a + s + o + n + d + + diumenge + dilluns + dimarts + dimecres + dijous + divendres + dissabte + + dg. + dl. + dt. + dc. + dj. + dv. + ds. + + dg. + dl. + dt. + dc. + dj. + dv. + ds. + + g + l + t + c + j + v + s + + a.m. + p.m. + ahir + avui + demà + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e de %B de %Y + %-k:%M:%S + %-k:%M:%S %d/%m/%Y + %2$s %1$s + %1$s %3$s + %d/%m/%Y + %-e de %B + %-B + %-B del %Y + %-e %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s %3$s/%2$s - %6$s %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s - %6$s %8$s/%7$s/%9$s + %5$s %1$s %3$s/%2$s/%4$s - %10$s %6$s %8$s/%7$s/%9$s + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %1$s %3$s/%2$s - %10$s %6$s %8$s/%7$s + %5$s %3$s/%2$s/%4$s - %10$s %8$s/%7$s/%9$s + %3$s %1$s %2$s - %6$s %4$s %5$s + %1$s %2$s - %4$s %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s de %2$s - %8$s de %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %5$s %3$s de %2$s - %10$s %8$s de %7$s + %5$s %3$s de %2$s - %10$s %8$s de %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %3$s de %2$s de %4$s - %10$s %8$s de %7$s de %9$s + %5$s %3$s de %2$s de %4$s - %10$s %8$s de %7$s de %9$s + %5$s %1$s %3$s %2$s %4$s - %10$s %6$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s - %10$s %6$s %8$s %7$s %9$s + %1$s %3$s %2$s %4$s - %6$s %8$s %7$s %9$s + %3$s-%8$s de %2$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s de %2$s - %8$s de %7$s de %9$s + %3$s-%8$s de %2$s de %9$s + %1$s %3$s de %2$s - %6$s %8$s de %7$s de %9$s + %b + diff --git a/core/res/res/values-cs-rCZ/donottranslate-cldr.xml b/core/res/res/values-cs-rCZ/donottranslate-cldr.xml new file mode 100644 index 000000000000..41f5dea81f00 --- /dev/null +++ b/core/res/res/values-cs-rCZ/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + leden + únor + březen + duben + květen + červen + červenec + srpen + září + říjen + listopad + prosinec + + ledna + února + března + dubna + května + června + července + srpna + září + října + listopadu + prosince + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + l + ú + b + d + k + č + č + s + z + ř + l + p + + neděle + pondělí + úterý + středa + čtvrtek + pátek + sobota + + ne + po + út + st + čt + + so + + ne + po + út + st + čt + + so + + N + P + Ú + S + Č + P + S + + dop. + odp. + Včera + Dnes + Zítra + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %-e.%-m.%Y + d.M.yyyy + "%s.%s.%s" + %-e. %B %Y + %-k:%M:%S + %-k:%M:%S %-e.%-m.%Y + %2$s %1$s + %1$s %3$s + %-e.%-m.%Y + %-e. %B + %-B + %-B %Y + %-e.%-m + %-B + %-B %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s. - %8$s.%7$s. + %1$s, %3$s.%2$s. - %6$s, %8$s.%7$s. + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %1$s, %3$s.%2$s.%4$s - %6$s, %8$s.%7$s.%9$s + %5$s %1$s, %3$s.%2$s.%4$s - %10$s %6$s, %8$s.%7$s.%9$s + %5$s %3$s.%2$s - %10$s %8$s.%7$s + %5$s %1$s, %3$s.%2$s. - %10$s %6$s, %8$s.%7$s. + %5$s %3$s.%2$s.%4$s - %10$s %8$s.%7$s.%9$s + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s. %2$s - %8$s. %7$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %1$s, %3$s. %2$s - %10$s %6$s, %8$s. %7$s + %5$s %1$s, %3$s. %2$s - %10$s %6$s, %8$s. %7$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %1$s, %3$s. %2$s %4$s - %6$s, %8$s. %7$s %9$s + %3$s.-%8$s. %2$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s + %3$s. %2$s - %8$s. %7$s %9$s + %3$s.-%8$s. %2$s %9$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s %9$s + %B + diff --git a/core/res/res/values-cs/donottranslate-cldr.xml b/core/res/res/values-cs/donottranslate-cldr.xml new file mode 100644 index 000000000000..41f5dea81f00 --- /dev/null +++ b/core/res/res/values-cs/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + leden + únor + březen + duben + květen + červen + červenec + srpen + září + říjen + listopad + prosinec + + ledna + února + března + dubna + května + června + července + srpna + září + října + listopadu + prosince + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + l + ú + b + d + k + č + č + s + z + ř + l + p + + neděle + pondělí + úterý + středa + čtvrtek + pátek + sobota + + ne + po + út + st + čt + + so + + ne + po + út + st + čt + + so + + N + P + Ú + S + Č + P + S + + dop. + odp. + Včera + Dnes + Zítra + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %-e.%-m.%Y + d.M.yyyy + "%s.%s.%s" + %-e. %B %Y + %-k:%M:%S + %-k:%M:%S %-e.%-m.%Y + %2$s %1$s + %1$s %3$s + %-e.%-m.%Y + %-e. %B + %-B + %-B %Y + %-e.%-m + %-B + %-B %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s. - %8$s.%7$s. + %1$s, %3$s.%2$s. - %6$s, %8$s.%7$s. + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %1$s, %3$s.%2$s.%4$s - %6$s, %8$s.%7$s.%9$s + %5$s %1$s, %3$s.%2$s.%4$s - %10$s %6$s, %8$s.%7$s.%9$s + %5$s %3$s.%2$s - %10$s %8$s.%7$s + %5$s %1$s, %3$s.%2$s. - %10$s %6$s, %8$s.%7$s. + %5$s %3$s.%2$s.%4$s - %10$s %8$s.%7$s.%9$s + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s. %2$s - %8$s. %7$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %1$s, %3$s. %2$s - %10$s %6$s, %8$s. %7$s + %5$s %1$s, %3$s. %2$s - %10$s %6$s, %8$s. %7$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %1$s, %3$s. %2$s %4$s - %6$s, %8$s. %7$s %9$s + %3$s.-%8$s. %2$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s + %3$s. %2$s - %8$s. %7$s %9$s + %3$s.-%8$s. %2$s %9$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s %9$s + %B + diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 35a3f9a9cb50..7dbeaebe5d72 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -161,14 +161,10 @@ "Umožňuje aplikaci změnit aktuální konfiguraci, např. národní prostředí či obecnou velikost písma." "restartování ostatních aplikací" "Umožňuje aplikaci vynutit restartování jiných aplikací." - "zamezení zastavení aplikace" - "Umožňuje aplikaci spustit jakýkoli proces v popředí tak, že ho nelze ukončit. Běžné aplikace by toto nastavení nikdy neměly používat." "vynucení zavření aplikace" "Umožňuje aplikaci vynutit zavření a přesunutí libovolné činnosti v popředí na pozadí. Běžné aplikace by toto nastavení neměly nikdy využívat." "načtení interního stavu systému" "Umožňuje aplikaci načíst interní stav systému. Škodlivé aplikace mohou načíst řádu soukromých a zabezpečených informací, které by nikdy neměly potřebovat." - "zveřejnění nízkoúrovňových služeb" - "Umožňuje aplikaci zveřejnit své vlastní nízkoúrovňové systémové služby. Škodlivé aplikace mohou převzít kontrolu nad systémem a získat či poškodit jakákoli data v něm obsažená." "sledování a řízení spouštění všech aplikací" "Umožňuje aplikaci sledovat a řídit spouštění činností systémem. Škodlivé aplikace mohou zcela ovládnout systém. Toto oprávnění je zapotřebí pouze pro účely vývoje, nikdy pro běžné použití telefonu." "odeslání vysílání o odstranění balíčku" @@ -181,8 +177,6 @@ "Umožňuje aplikaci řídit maximální počet spuštěných procesů. Běžné aplikace toto nastavení nikdy nevyužívají." "zavření všech aplikací na pozadí" "Umožňuje aplikaci ovládat, zda jsou činnosti vždy dokončeny po přesunutí do pozadí. Běžné aplikace toto nastavení nikdy nevyužívají." - "automatická instalace aktualizací systému" - "Umožňuje aplikaci přijímat oznámení o čekajících aktualizacích systému a spouštět jejich instalaci. Škodlivé aplikace mohou díky tomuto nastavení poškodit systém pomocí neoprávněných aktualizací nebo celkově narušovat proces aktualizace." "změna statistických údajů o baterii" "Umožňuje změnu shromážděných statistických údajů o baterii. Není určeno pro běžné aplikace." "zobrazení nepovolených oken" @@ -418,9 +412,6 @@ "Heslo" "Přihlásit se" "Neplatné uživatelské jméno nebo heslo." - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%-l%P" "%-l%p" "Vymazat oznámení" @@ -452,9 +443,6 @@ "enter" "smazat" "Hledat" - "Dnes" - "Včera" - "Zítra" "před 1 měsícem" "Déle než před 1 měsícem" @@ -536,13 +524,6 @@ "týd." "rokem" "lety" - "neděle" - "pondělí" - "úterý" - "středa" - "čtvrtek" - "pátek" - "sobota" "Každý pracovní den (Po – Pá)" "Denně" "Každý týden v %s" @@ -552,137 +533,15 @@ "Omlouváme se, ale toto video nelze přenášet datovým proudem do tohoto zařízení." "Toto video bohužel nelze přehrát." "OK" - "dop." - "odp." - "%m/%d/%Y" - "%1$s, %2$s, %3$s%4$s, %5$s, %6$s" - "%1$s, %2$s%4$s, %5$s" - "%2$s, %3$s%5$s, %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%1$s, %2$s, %3$s" - "%2$s, %3$s" - "%1$s, %3$s" - "%1$s, %2$s" "%1$s, %2$s" - "%1$s, %2$s" - "MMMM' 'd', 'yyyy" - "d'. 'MMMM' 'yyyy" - "d'. 'MMM' 'yyyy" - "d'. 'MMM' 'yyyy" - "h':'mm' 'a" - "HH':'mm" "poledne" "Poledne" "půlnoc" "Půlnoc" - "%B %-d" - "%B %-d, %Y" - "%B %Y" - "%H:%M:%S" - "%H:%M:%S %-d. %B %Y" - "%3$s. %2$s%8$s. %7$s" - "%1$s, %3$s. %2$s%6$s, %8$s. %7$s" - "%3$s. %2$s%8$s. %7$s %9$s" - "%1$s, %3$s. %2$s%6$s, %8$s. %7$s %9$s" - "%3$s. %2$s, %5$s%8$s. %7$s, %10$s" - "%1$s, %3$s. %2$s, %5$s%6$s, %8$s. %7$s, %10$s" - "%3$s. %2$s %4$s, %5$s%8$s. %7$s %9$s, %10$s" - "%1$s, %3$s. %2$s %4$s, %5$s%6$s, %8$s. %7$s %9$s, %10$s" - "%3$s. %2$s. – %8$s. %7$s." - "%1$s, %3$s. %2$s%6$s, %8$s. %7$s" - "%3$s. %2$s. %4$s%8$s. %7$s. %9$s" - "%1$s, %3$s. %2$s %4$s%6$s, %8$s. %7$s %9$s" - "%3$s. %2$s., %5$s%8$s. %7$s., %10$s" - "%1$s, %3$s. %2$s, %5$s%6$s, %8$s. %7$s, %10$s" - "%2$s/%3$s/%4$s, %5$s%7$s/%8$s/%9$s, %10$s" - "%1$s, %3$s. %2$s %4$s, %5$s%6$s, %8$s. %7$s %9$s, %10$s" - "%3$s. – %8$s. %2$s" - "%1$s, %3$s. %2$s%6$s, %8$s. %7$s" - "%3$s. – %8$s. %2$s %9$s" - "%1$s, %3$s. %2$s %4$s%6$s, %8$s. %7$s %9$s" - "%3$s. %2$s, %5$s%8$s. %7$s, %10$s" - "%1$s, %3$s. %2$s %5$s%6$s, %8$s. %7$s %10$s" - "%2$s %3$s, %4$s, %5$s%7$s %8$s, %9$s, %10$s" - "%1$s, %3$s. %2$s %4$s, %5$s%6$s, %8$s. %7$s %9$s, %10$s" - "%-d. %b %Y" - "%b %Y" - "%b %-d" - "neděle" - "pondělí" - "úterý" - "středa" - "čtvrtek" - "pátek" - "sobota" - "Ne" - "Po" - "Út" - "St" - "Čt" - "Pá" - "So" - "Ne" - "Po" - "Út" - "St" - "Čt" - "Pá" - "So" - "Ne" - "Po" - "Út" - "St" - "Čt" - "Pá" - "So" - "Ne" - "Po" - "Čt" - "St" - "Čt" - "Pá" - "So" - "leden" - "únor" - "březen" - "duben" - "květen" - "červen" - "červenec" - "srpen" - "září" - "říjen" - "listopad" - "prosinec" - "leden" - "únor" - "březen" - "duben" - "květen" - "červen" - "červenec" - "srpen" - "září" - "říjen" - "listopad" - "prosinec" - "1." - "2." - "Po" - "4." - "5." - "6." - "7." - "8." - "9." - "10." - "11." - "12." "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "Vybrat vše" diff --git a/core/res/res/values-da-rDK/donottranslate-cldr.xml b/core/res/res/values-da-rDK/donottranslate-cldr.xml new file mode 100644 index 000000000000..2d0db938a69f --- /dev/null +++ b/core/res/res/values-da-rDK/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + januar + februar + marts + april + maj + juni + juli + august + september + oktober + november + december + + januar + februar + marts + april + maj + juni + juli + august + september + oktober + november + december + + jan. + feb. + mar. + apr. + maj + jun. + jul. + aug. + sep. + okt. + nov. + dec. + + J + F + M + A + M + J + J + A + S + O + N + D + + søndag + mandag + tirsdag + onsdag + torsdag + fredag + lørdag + + søn + man + tir + ons + tor + fre + lør + + søn + man + tir + ons + tor + fre + lør + + S + M + T + O + T + F + L + + f.m. + e.m. + i går + i dag + i morgen + + %H.%M + %-l.%M %p + %-l.%M %^p + h.mm a + HH.mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e. %b %Y + %H.%M.%S + %H.%M.%S %d/%m/%Y + %2$s %1$s + %1$s %3$s + %d/%m/%Y + %-e. %B + %B + %B %Y + %-e. %b + %b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s %3$s/%2$s - %6$s %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s - %6$s %8$s/%7$s/%9$s + %5$s %1$s. %3$s-%2$s-%4$s - %10$s %6$s. %8$s-%7$s-%9$s + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %1$s. %3$s-%2$s - %10$s %6$s. %8$s-%7$s + %5$s %3$s/%2$s/%4$s - %10$s %8$s/%7$s/%9$s + %3$s %1$s den %2$s - %6$s %4$s den %5$s + %1$s den %2$s - %4$s den %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s den %3$s + %2$s den %3$s + %1$s %2$s + %3$s. %2$s - %8$s. %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %1$s. %3$s. %2$s %4$s - %10$s %6$s. %8$s. %7$s %9$s + %5$s %1$s. %3$s. %2$s %4$s - %10$s %6$s. %8$s. %7$s %9$s + %1$s. %3$s. %2$s %4$s - %6$s. %8$s. %7$s %9$s + %3$s.-%8$s. %2$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s. %2$s - %8$s. %7$s %9$s + %3$s.-%8$s. %2$s %9$s + %1$s den %3$s. %2$s - %6$s den %8$s. %7$s %9$s + %b + diff --git a/core/res/res/values-da/donottranslate-cldr.xml b/core/res/res/values-da/donottranslate-cldr.xml new file mode 100644 index 000000000000..2d0db938a69f --- /dev/null +++ b/core/res/res/values-da/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + januar + februar + marts + april + maj + juni + juli + august + september + oktober + november + december + + januar + februar + marts + april + maj + juni + juli + august + september + oktober + november + december + + jan. + feb. + mar. + apr. + maj + jun. + jul. + aug. + sep. + okt. + nov. + dec. + + J + F + M + A + M + J + J + A + S + O + N + D + + søndag + mandag + tirsdag + onsdag + torsdag + fredag + lørdag + + søn + man + tir + ons + tor + fre + lør + + søn + man + tir + ons + tor + fre + lør + + S + M + T + O + T + F + L + + f.m. + e.m. + i går + i dag + i morgen + + %H.%M + %-l.%M %p + %-l.%M %^p + h.mm a + HH.mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e. %b %Y + %H.%M.%S + %H.%M.%S %d/%m/%Y + %2$s %1$s + %1$s %3$s + %d/%m/%Y + %-e. %B + %B + %B %Y + %-e. %b + %b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s %3$s/%2$s - %6$s %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s - %6$s %8$s/%7$s/%9$s + %5$s %1$s. %3$s-%2$s-%4$s - %10$s %6$s. %8$s-%7$s-%9$s + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %1$s. %3$s-%2$s - %10$s %6$s. %8$s-%7$s + %5$s %3$s/%2$s/%4$s - %10$s %8$s/%7$s/%9$s + %3$s %1$s den %2$s - %6$s %4$s den %5$s + %1$s den %2$s - %4$s den %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s den %3$s + %2$s den %3$s + %1$s %2$s + %3$s. %2$s - %8$s. %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %1$s. %3$s. %2$s %4$s - %10$s %6$s. %8$s. %7$s %9$s + %5$s %1$s. %3$s. %2$s %4$s - %10$s %6$s. %8$s. %7$s %9$s + %1$s. %3$s. %2$s %4$s - %6$s. %8$s. %7$s %9$s + %3$s.-%8$s. %2$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s. %2$s - %8$s. %7$s %9$s + %3$s.-%8$s. %2$s %9$s + %1$s den %3$s. %2$s - %6$s den %8$s. %7$s %9$s + %b + diff --git a/core/res/res/values-de-rAT/donottranslate-cldr.xml b/core/res/res/values-de-rAT/donottranslate-cldr.xml new file mode 100644 index 000000000000..27624a36ab42 --- /dev/null +++ b/core/res/res/values-de-rAT/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Jänner + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + + Jänner + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + + Jän + Feb + Mär + Apr + Mai + Jun + Jul + Aug + Sep + Okt + Nov + Dez + + J + F + M + A + M + J + J + A + S + O + N + D + + Sonntag + Montag + Dienstag + Mittwoch + Donnerstag + Freitag + Samstag + + So. + Mo. + Di. + Mi. + Do. + Fr. + Sa. + + So. + Mo. + Di. + Mi. + Do. + Fr. + Sa. + + S + M + D + M + D + F + S + + vorm. + nachm. + Gestern + Heute + Morgen + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %d. %B %Y + %H:%M:%S + %H:%M:%S %d.%m.%Y + %2$s %1$s + %1$s %3$s + %d.%m.%Y + %-e. %B + %-B + %B %Y + %d. %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s. - %8$s.%7$s. + %1$s, %3$s.%2$s. - %6$s, %8$s.%7$s. + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %1$s, %3$s.%2$s.%4$s - %6$s, %8$s.%7$s.%9$s + %5$s %1$s, %3$s.%2$s.%4$s - %10$s %6$s, %8$s.%7$s.%9$s + %5$s %3$s.%2$s. - %10$s %8$s.%7$s. + %5$s %1$s, %3$s.%2$s. - %10$s %6$s, %8$s.%7$s. + %5$s %3$s.%2$s.%4$s - %10$s %8$s.%7$s.%9$s + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s. %2$s - %8$s. %7$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %1$s, %3$s. %2$s - %10$s %6$s, %8$s. %7$s + %5$s %1$s, %3$s. %2$s - %10$s %6$s, %8$s. %7$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %1$s, %3$s. %2$s %4$s - %6$s, %8$s. %7$s %9$s + %3$s.-%8$s. %2$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s + %3$s. %2$s - %8$s. %7$s %9$s + %3$s.-%8$s. %2$s %9$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s %9$s + %b + diff --git a/core/res/res/values-de-rCH/donottranslate-cldr.xml b/core/res/res/values-de-rCH/donottranslate-cldr.xml new file mode 100644 index 000000000000..f32095bd336e --- /dev/null +++ b/core/res/res/values-de-rCH/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Januar + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + + Januar + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + + Jan + Feb + Mär + Apr + Mai + Jun + Jul + Aug + Sep + Okt + Nov + Dez + + J + F + M + A + M + J + J + A + S + O + N + D + + Sonntag + Montag + Dienstag + Mittwoch + Donnerstag + Freitag + Samstag + + So. + Mo. + Di. + Mi. + Do. + Fr. + Sa. + + So. + Mo. + Di. + Mi. + Do. + Fr. + Sa. + + S + M + D + M + D + F + S + + vorm. + nachm. + Gestern + Heute + Morgen + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %-e. %B %Y + %H:%M:%S + %H:%M:%S %d.%m.%Y + %2$s %1$s + %1$s %3$s + %d.%m.%Y + %-e. %B + %-B + %B %Y + %-e. %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s. - %8$s.%7$s. + %1$s, %3$s.%2$s. - %6$s, %8$s.%7$s. + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %1$s, %3$s.%2$s.%4$s - %6$s, %8$s.%7$s.%9$s + %5$s %1$s, %3$s.%2$s.%4$s - %10$s %6$s, %8$s.%7$s.%9$s + %5$s %3$s.%2$s. - %10$s %8$s.%7$s. + %5$s %1$s, %3$s.%2$s. - %10$s %6$s, %8$s.%7$s. + %5$s %3$s.%2$s.%4$s - %10$s %8$s.%7$s.%9$s + %3$s %1$s %2$s - %6$s %4$s %5$s + %1$s %2$s - %4$s %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s. %2$s - %8$s. %7$s + %1$s %3$s. %2$s - %6$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %1$s %3$s. %2$s - %10$s %6$s %8$s. %7$s + %5$s %1$s %3$s. %2$s - %10$s %6$s %8$s. %7$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %1$s, %3$s. %2$s %4$s - %6$s, %8$s. %7$s %9$s + %3$s.-%8$s. %2$s + %1$s %3$s. %2$s - %6$s %8$s. %7$s + %3$s. %2$s - %8$s. %7$s %9$s + %3$s.-%8$s. %2$s %9$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s %9$s + %b + diff --git a/core/res/res/values-de-rDE/donottranslate-cldr.xml b/core/res/res/values-de-rDE/donottranslate-cldr.xml new file mode 100644 index 000000000000..f32095bd336e --- /dev/null +++ b/core/res/res/values-de-rDE/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Januar + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + + Januar + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + + Jan + Feb + Mär + Apr + Mai + Jun + Jul + Aug + Sep + Okt + Nov + Dez + + J + F + M + A + M + J + J + A + S + O + N + D + + Sonntag + Montag + Dienstag + Mittwoch + Donnerstag + Freitag + Samstag + + So. + Mo. + Di. + Mi. + Do. + Fr. + Sa. + + So. + Mo. + Di. + Mi. + Do. + Fr. + Sa. + + S + M + D + M + D + F + S + + vorm. + nachm. + Gestern + Heute + Morgen + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %-e. %B %Y + %H:%M:%S + %H:%M:%S %d.%m.%Y + %2$s %1$s + %1$s %3$s + %d.%m.%Y + %-e. %B + %-B + %B %Y + %-e. %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s. - %8$s.%7$s. + %1$s, %3$s.%2$s. - %6$s, %8$s.%7$s. + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %1$s, %3$s.%2$s.%4$s - %6$s, %8$s.%7$s.%9$s + %5$s %1$s, %3$s.%2$s.%4$s - %10$s %6$s, %8$s.%7$s.%9$s + %5$s %3$s.%2$s. - %10$s %8$s.%7$s. + %5$s %1$s, %3$s.%2$s. - %10$s %6$s, %8$s.%7$s. + %5$s %3$s.%2$s.%4$s - %10$s %8$s.%7$s.%9$s + %3$s %1$s %2$s - %6$s %4$s %5$s + %1$s %2$s - %4$s %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s. %2$s - %8$s. %7$s + %1$s %3$s. %2$s - %6$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %1$s %3$s. %2$s - %10$s %6$s %8$s. %7$s + %5$s %1$s %3$s. %2$s - %10$s %6$s %8$s. %7$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %1$s, %3$s. %2$s %4$s - %6$s, %8$s. %7$s %9$s + %3$s.-%8$s. %2$s + %1$s %3$s. %2$s - %6$s %8$s. %7$s + %3$s. %2$s - %8$s. %7$s %9$s + %3$s.-%8$s. %2$s %9$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s %9$s + %b + diff --git a/core/res/res/values-de-rLI/donottranslate-cldr.xml b/core/res/res/values-de-rLI/donottranslate-cldr.xml new file mode 100644 index 000000000000..f32095bd336e --- /dev/null +++ b/core/res/res/values-de-rLI/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Januar + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + + Januar + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + + Jan + Feb + Mär + Apr + Mai + Jun + Jul + Aug + Sep + Okt + Nov + Dez + + J + F + M + A + M + J + J + A + S + O + N + D + + Sonntag + Montag + Dienstag + Mittwoch + Donnerstag + Freitag + Samstag + + So. + Mo. + Di. + Mi. + Do. + Fr. + Sa. + + So. + Mo. + Di. + Mi. + Do. + Fr. + Sa. + + S + M + D + M + D + F + S + + vorm. + nachm. + Gestern + Heute + Morgen + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %-e. %B %Y + %H:%M:%S + %H:%M:%S %d.%m.%Y + %2$s %1$s + %1$s %3$s + %d.%m.%Y + %-e. %B + %-B + %B %Y + %-e. %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s. - %8$s.%7$s. + %1$s, %3$s.%2$s. - %6$s, %8$s.%7$s. + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %1$s, %3$s.%2$s.%4$s - %6$s, %8$s.%7$s.%9$s + %5$s %1$s, %3$s.%2$s.%4$s - %10$s %6$s, %8$s.%7$s.%9$s + %5$s %3$s.%2$s. - %10$s %8$s.%7$s. + %5$s %1$s, %3$s.%2$s. - %10$s %6$s, %8$s.%7$s. + %5$s %3$s.%2$s.%4$s - %10$s %8$s.%7$s.%9$s + %3$s %1$s %2$s - %6$s %4$s %5$s + %1$s %2$s - %4$s %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s. %2$s - %8$s. %7$s + %1$s %3$s. %2$s - %6$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %1$s %3$s. %2$s - %10$s %6$s %8$s. %7$s + %5$s %1$s %3$s. %2$s - %10$s %6$s %8$s. %7$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %1$s, %3$s. %2$s %4$s - %6$s, %8$s. %7$s %9$s + %3$s.-%8$s. %2$s + %1$s %3$s. %2$s - %6$s %8$s. %7$s + %3$s. %2$s - %8$s. %7$s %9$s + %3$s.-%8$s. %2$s %9$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s %9$s + %b + diff --git a/core/res/res/values-de/donottranslate-cldr.xml b/core/res/res/values-de/donottranslate-cldr.xml new file mode 100644 index 000000000000..f32095bd336e --- /dev/null +++ b/core/res/res/values-de/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Januar + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + + Januar + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + + Jan + Feb + Mär + Apr + Mai + Jun + Jul + Aug + Sep + Okt + Nov + Dez + + J + F + M + A + M + J + J + A + S + O + N + D + + Sonntag + Montag + Dienstag + Mittwoch + Donnerstag + Freitag + Samstag + + So. + Mo. + Di. + Mi. + Do. + Fr. + Sa. + + So. + Mo. + Di. + Mi. + Do. + Fr. + Sa. + + S + M + D + M + D + F + S + + vorm. + nachm. + Gestern + Heute + Morgen + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %-e. %B %Y + %H:%M:%S + %H:%M:%S %d.%m.%Y + %2$s %1$s + %1$s %3$s + %d.%m.%Y + %-e. %B + %-B + %B %Y + %-e. %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s. - %8$s.%7$s. + %1$s, %3$s.%2$s. - %6$s, %8$s.%7$s. + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %1$s, %3$s.%2$s.%4$s - %6$s, %8$s.%7$s.%9$s + %5$s %1$s, %3$s.%2$s.%4$s - %10$s %6$s, %8$s.%7$s.%9$s + %5$s %3$s.%2$s. - %10$s %8$s.%7$s. + %5$s %1$s, %3$s.%2$s. - %10$s %6$s, %8$s.%7$s. + %5$s %3$s.%2$s.%4$s - %10$s %8$s.%7$s.%9$s + %3$s %1$s %2$s - %6$s %4$s %5$s + %1$s %2$s - %4$s %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s. %2$s - %8$s. %7$s + %1$s %3$s. %2$s - %6$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %1$s %3$s. %2$s - %10$s %6$s %8$s. %7$s + %5$s %1$s %3$s. %2$s - %10$s %6$s %8$s. %7$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %1$s, %3$s. %2$s %4$s - %6$s, %8$s. %7$s %9$s + %3$s.-%8$s. %2$s + %1$s %3$s. %2$s - %6$s %8$s. %7$s + %3$s. %2$s - %8$s. %7$s %9$s + %3$s.-%8$s. %2$s %9$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s %9$s + %b + diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 674c64b91c4e..dfb454991aa4 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -161,14 +161,10 @@ "Ermöglicht einer Anwendung, die aktuelle Konfiguration zu ändern, etwa das Gebietsschema oder die Schriftgröße." "Andere Anwendungen neu starten" "Ermöglicht einer Anwendung, den Neustart anderer Anwendungen zu erzwingen." - "Beenden nicht zulassen" - "Ermöglicht einer Anwendung, beliebige Prozesse im Vordergrund auszuführen, damit diese nicht beendet werden können. Sollte nicht für normale Anwendungen benötigt werden." "Schließen von Anwendung erzwingen" "Ermöglicht einer Anwendung, alle Aktivitäten, die im Vordergrund ablaufen, zu beenden und in den Hintergrund zu schieben. Sollte nicht für normale Anwendungen benötigt werden." "Systeminternen Status abrufen" "Ermöglicht einer Anwendung, den internen Status des Systems abzurufen. Schädliche Anwendungen rufen hierbei möglicherweise eine Vielzahl an privaten und geschützten Daten ab, die Sie in der Regel nicht benötigen würden." - "systemnahe Dienste veröffentlichen" - "Ermöglicht der Anwendung, ihre eigenen systemnahen Dienste anzubieten. Schädliche Anwendungen könnten in das System eindringen und darin befindliche Daten stehlen oder manipulieren." "Start von Anwendungen überwachen und steuern" "Ermöglicht der Anwendung, den Start von Systemaktivitäten zu überwachen und zu steuern. Schädliche Anwendungen können so das gesamte System beeinträchtigen. Diese Berechtigung wird nur zu Entwicklungszwecken und nie für die normale Telefonnutzung benötigt." "Broadcast ohne Paket senden" @@ -181,8 +177,6 @@ "Ermöglicht einer Anwendung, die maximale Anzahl an laufenden Prozessen zu steuern. Wird nicht für normale Anwendungen benötigt." "alle Anwendungen im Hintergrund schließen" "Überlässt einer Anwendung die Entscheidung, ob Aktivitäten beendet werden, sobald Sie in den Hintergrund rücken. Wird nicht für normale Anwendungen benötigt." - "System-Updates automatisch installieren" - "Ermöglicht einer Anwendung, Benachrichtigungen zu ausstehenden System-Updates zu erhalten und deren Installation einzuleiten. Schädliche Anwendungen können so das System durch nicht autorisierte Updates beschädigen oder in den Update-Prozess eingreifen." "Akku-Daten ändern" "Ermöglicht die Änderung von gesammelten Akku-Daten. Nicht für normale Anwendungen vorgesehen." "nicht autorisierte Fenster anzeigen" @@ -418,9 +412,6 @@ "Passwort" "Anmelden" "Ungültiger Nutzername oder ungültiges Passwort." - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%-l%P" "%-l%p" "Benachrichtigungen löschen" @@ -452,9 +443,6 @@ "Enter" "löschen" "Suche" - "Heute" - "Gestern" - "Morgen" "Vor 1 Monat" "Vor mehr als 1 Monat" @@ -536,13 +524,6 @@ "Wochen" "Jahr" "Jahre" - "Sonntag" - "Montag" - "Dienstag" - "Mittwoch" - "Donnerstag" - "Freitag" - "Samstag" "Jeden Wochentag (Mo-Fr)" "Täglich" "Jede Woche am %s" @@ -552,137 +533,15 @@ "Leider ist dieses Video nicht für Streaming auf diesem Gerät gültig." "Dieses Video kann leider nicht abgespielt werden." "OK" - "AM" - ".." - "%d/%m/%Y" - "%1$s, %2$s, %3$s%4$s, %5$s, %6$s" - "%1$s, %2$s%4$s, %5$s" - "%2$s, %3$s%5$s, %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%1$s, %2$s, %3$s" - "%2$s, %3$s" - "%1$s, %3$s" - "%1$s, %2$s" "%1$s, %2$s" - "%1$s, %2$s" - "d'. 'MMMM' 'yyyy" - "d'. 'MMMM' 'yyyy" - "d'. 'MMM' 'yyyy" - "d'. 'MMM' 'yyyy" - "h':'mm' 'a" - "HH':'mm" "Mittag" "Mittag" "Mitternacht" "Mitternacht" - "%B %-d" - "%-d. %B %Y" - "%B %Y" - "%H:%M:%S" - "%H:%M:%S %-d. %B %Y" - "%3$s. %2$s%8$s. %7$s" - "%1$s, %3$s. %2$s%6$s, %8$s. %7$s" - "%3$s. %2$s%8$s. %7$s %9$s" - "%1$s, %3$s. %2$s%6$s, %8$s. %7$s %9$s" - "%3$s. %2$s %5$s%8$s. %7$s %10$s" - "%1$s, %3$s. %2$s, %5$s%6$s, %8$s. %7$s %10$s" - "%3$s. %2$s, %4$s, %5$s%8$s. %7$s %9$s, %10$s" - "%1$s, %3$s. %2$s %4$s, %5$s%6$s, %8$s. %7$s %9$s, %10$s" - "%3$s/%2$s%8$s/%7$s" - "%1$s, %3$s/%2$s%6$s, %8$s/%7$s" - "%3$s/%2$s/%4$s%8$s/%7$s/%9$s" - "%1$s, %3$s/%2$s/%4$s%6$s, %8$s/%7$s/%9$s" - "%3$s/%2$s, %5$s%8$s/%7$s, %10$s" - "%1$s, %3$s/%2$s, %5$s%6$s, %8$s/%7$s, %10$s" - "%3$s/%2$s/%4$s, %5$s%8$s/%7$s/%9$s, %10$s" - "%1$s, %3$s/%2$s/%4$s, %5$s%6$s, %8$s/%7$s/%9$s, %10$s" - "%3$s. – %8$s. %2$s" - "%1$s, %3$s. %2$s%6$s, %8$s. %7$s" - "%3$s. – %8$s. %2$s %9$s" - "%1$s, %3$s. %2$s %4$s%6$s, %8$s. %7$s %9$s" - "%3$s. %2$s, %5$s%8$s. %7$s, %10$s" - "%1$s, %3$s. %2$s, %5$s%6$s, %8$s. %7$s, %10$s" - "%3$s. %2$s %4$s, %5$s%8$s. %7$s %9$s, %10$s" - "%1$s, %3$s. %2$s %4$s, %5$s%6$s, %8$s. %7$s %9$s, %10$s" - "%-d. %b %Y" - "%b %Y" - "%b %-d" - "Sonntag" - "Montag" - "Dienstag" - "Mittwoch" - "Donnerstag" - "Freitag" - "Samstag" - "So" - "Mo" - "Di" - "Mi" - "Do" - "Fr" - "Sa" - "So" - "Mo" - "Di" - "Mi" - "Do" - "Fr" - "Sa" - "So" - "März" - "Di" - "Mi" - "Do" - "Fr" - "Sa" - "Sep" - "Mo" - "Do" - "Mi" - "Do" - "Fr" - "Sa" - "Januar" - "Februar" - "März" - "April" - "Mai" - "Juni" - "Juli" - "August" - "September" - "Oktober" - "November" - "Dezember" - "Jan." - "Feb." - "März" - "Apr." - "Mai" - "Juni" - "Juli" - "Aug" - "Sep." - "Okt." - "Nov." - "Dez." - "Juli" - "Fr" - "März" - "Apr" - "Mo" - "Juni" - "Juli" - "Aug." - "Sep" - "Okt." - "No" - "Dez." "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "Alles auswählen" diff --git a/core/res/res/values-el-rGR/donottranslate-cldr.xml b/core/res/res/values-el-rGR/donottranslate-cldr.xml new file mode 100644 index 000000000000..e8f02fb0d47b --- /dev/null +++ b/core/res/res/values-el-rGR/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Ιανουάριος + Φεβρουάριος + Μάρτιος + Απρίλιος + Μάιος + Ιούνιος + Ιούλιος + Αύγουστος + Σεπτέμβριος + Οκτώβριος + Νοέμβριος + Δεκέμβριος + + Ιανουαρίου + Φεβρουαρίου + Μαρτίου + Απριλίου + Μαΐου + Ιουνίου + Ιουλίου + Αυγούστου + Σεπτεμβρίου + Οκτωβρίου + Νοεμβρίου + Δεκεμβρίου + + Ιαν + Φεβ + Μαρ + Απρ + Μαϊ + Ιουν + Ιουλ + Αυγ + Σεπ + Οκτ + Νοε + Δεκ + + Ι + Φ + Μ + Α + Μ + Ι + Ι + Α + Σ + Ο + Ν + Δ + + Κυριακή + Δευτέρα + Τρίτη + Τετάρτη + Πέμπτη + Παρασκευή + Σάββατο + + Κυρ + Δευ + Τρι + Τετ + Πεμ + Παρ + Σαβ + + Κυρ + Δευ + Τρι + Τετ + Πεμ + Παρ + Σαβ + + Κ + Δ + Τ + Τ + Π + Π + Σ + + π.μ. + μ.μ. + Χτες + Σήμερα + Αύριο + + %-k:%M + %-l:%M %p + %-l:%M %p + h:mm a + H:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %d %B %Y + %-l:%M:%S %p + %-l:%M:%S %p %d %b %Y + %2$s %1$s + %1$s %3$s + %d %b %Y + %-e %B + %-B + %-B %Y + %-e %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s, %3$s/%2$s - %6$s, %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s, %3$s/%2$s/%4$s - %6$s, %8$s/%7$s/%9$s + %5$s %1$s, %3$s/%2$s/%4$s - %10$s %6$s, %8$s/%7$s/%9$s + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %1$s, %3$s/%2$s - %10$s %6$s, %8$s/%7$s + %5$s %3$s/%2$s/%4$s - %10$s %8$s/%7$s/%9$s + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %1$s, %3$s %2$s - %10$s %6$s, %8$s %7$s + %5$s %1$s, %3$s %2$s - %10$s %6$s, %8$s %7$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %1$s, %3$s %2$s %4$s - %6$s, %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-el/donottranslate-cldr.xml b/core/res/res/values-el/donottranslate-cldr.xml new file mode 100644 index 000000000000..e8f02fb0d47b --- /dev/null +++ b/core/res/res/values-el/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Ιανουάριος + Φεβρουάριος + Μάρτιος + Απρίλιος + Μάιος + Ιούνιος + Ιούλιος + Αύγουστος + Σεπτέμβριος + Οκτώβριος + Νοέμβριος + Δεκέμβριος + + Ιανουαρίου + Φεβρουαρίου + Μαρτίου + Απριλίου + Μαΐου + Ιουνίου + Ιουλίου + Αυγούστου + Σεπτεμβρίου + Οκτωβρίου + Νοεμβρίου + Δεκεμβρίου + + Ιαν + Φεβ + Μαρ + Απρ + Μαϊ + Ιουν + Ιουλ + Αυγ + Σεπ + Οκτ + Νοε + Δεκ + + Ι + Φ + Μ + Α + Μ + Ι + Ι + Α + Σ + Ο + Ν + Δ + + Κυριακή + Δευτέρα + Τρίτη + Τετάρτη + Πέμπτη + Παρασκευή + Σάββατο + + Κυρ + Δευ + Τρι + Τετ + Πεμ + Παρ + Σαβ + + Κυρ + Δευ + Τρι + Τετ + Πεμ + Παρ + Σαβ + + Κ + Δ + Τ + Τ + Π + Π + Σ + + π.μ. + μ.μ. + Χτες + Σήμερα + Αύριο + + %-k:%M + %-l:%M %p + %-l:%M %p + h:mm a + H:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %d %B %Y + %-l:%M:%S %p + %-l:%M:%S %p %d %b %Y + %2$s %1$s + %1$s %3$s + %d %b %Y + %-e %B + %-B + %-B %Y + %-e %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s, %3$s/%2$s - %6$s, %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s, %3$s/%2$s/%4$s - %6$s, %8$s/%7$s/%9$s + %5$s %1$s, %3$s/%2$s/%4$s - %10$s %6$s, %8$s/%7$s/%9$s + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %1$s, %3$s/%2$s - %10$s %6$s, %8$s/%7$s + %5$s %3$s/%2$s/%4$s - %10$s %8$s/%7$s/%9$s + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %1$s, %3$s %2$s - %10$s %6$s, %8$s %7$s + %5$s %1$s, %3$s %2$s - %10$s %6$s, %8$s %7$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %1$s, %3$s %2$s %4$s - %6$s, %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-en-rAU/donottranslate-cldr.xml b/core/res/res/values-en-rAU/donottranslate-cldr.xml new file mode 100644 index 000000000000..9811b68e0aa1 --- /dev/null +++ b/core/res/res/values-en-rAU/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + January + February + March + April + May + June + July + August + September + October + November + December + + January + February + March + April + May + June + July + August + September + October + November + December + + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + J + F + M + A + M + J + J + A + S + O + N + D + + Sunday + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + + Sun + Mon + Tue + Wed + Thu + Fri + Sat + + Su + Mo + Tu + We + Th + Fr + Sa + + S + M + T + W + T + F + S + + am + pm + Yesterday + Today + Tomorrow + + %H:%M + %-l:%M%p + %-l:%M%^p + h:mm a + HH:mm + %-e/%m/%Y + d/MM/yyyy + "%s/%s/%s" + %-e %B %Y + %-l:%M:%S %p + %d/%m/%Y, %-l:%M:%S %p + %1$s, %2$s + %1$s, %3$s + %d/%m/%Y + %-e %B + %-B + %B %Y + %-e %b + %b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s, %3$s/%2$s - %6$s, %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s, %3$s/%2$s/%4$s - %6$s, %8$s/%7$s/%9$s + %1$s, %3$s/%2$s/%4$s, %5$s - %6$s, %8$s/%7$s/%9$s, %10$s + %3$s/%2$s, %5$s - %8$s/%7$s, %10$s + %1$s, %3$s/%2$s, %5$s - %6$s, %8$s/%7$s, %10$s + %3$s/%2$s/%4$s, %5$s - %8$s/%7$s/%9$s, %10$s + %1$s, %2$s, %3$s - %4$s, %5$s, %6$s + %1$s, %2$s - %4$s, %5$s + %2$s, %3$s - %5$s, %6$s + %1$s, %2$s, %3$s + %2$s, %3$s + %1$s, %2$s + %3$s %2$s - %8$s %7$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s + %3$s %2$s, %5$s - %8$s %7$s, %10$s + %3$s %2$s, %5$s - %8$s %7$s, %10$s + %1$s, %3$s %2$s, %5$s - %6$s, %8$s %7$s, %10$s + %1$s, %3$s %2$s, %5$s - %6$s, %8$s %7$s, %10$s + %3$s %2$s %4$s, %5$s - %8$s %7$s %9$s, %10$s + %3$s %2$s %4$s, %5$s - %8$s %7$s %9$s, %10$s + %1$s, %3$s %2$s %4$s, %5$s - %6$s, %8$s %7$s %9$s, %10$s + %1$s, %3$s %2$s %4$s, %5$s - %6$s, %8$s %7$s %9$s, %10$s + %1$s, %3$s %2$s %4$s - %6$s, %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index 9da879b34a16..3de378bee211 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -314,10 +314,6 @@ - - - - @@ -710,7 +706,6 @@ - "h:mm AA" @@ -864,35 +859,24 @@ - "%d/%m/%Y" - "%1$s, %2$s, %3$s%4$s, %5$s, %6$s" - "%1$s, %2$s%4$s, %5$s" - "%2$s, %3$s%5$s, %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%1$s, %2$s, %3$s" - "%2$s, %3$s" - "%1$s, %3$s" - "dd MMMM yyyy" - "dd MMM yyyy" @@ -906,73 +890,43 @@ - "%-d %B" - "%-d %B %Y" - "%H:%M:%S" - "%3$s %2$s%8$s %7$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s" - "%H:%M:%S %-d %B %Y" - "%3$s %2$s%8$s %7$s %9$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s %9$s" - " %3$s %2$s %5$s%8$s %7$s %10$s" - "%1$s, %3$s %2$s, %5$s%6$s, %8$s %7$s %10$s" - "%3$s %2$s, %4$s, %5$s%8$s %7$s %9$s, %10$s" - "%1$s, %3$s %2$s %4$s, %5$s%6$s, %8$s %7$s %9$s, %10$s" - "%3$s/%2$s%8$s/%7$s" - "%1$s, %3$s/%2$s%6$s, %8$s/%7$s" - "%3$s/%2$s/%4$s%8$s/%7$s/%9$s" - "%1$s, %3$s/%2$s/%4$s%6$s, %8$s/%7$s/%9$s" - "%3$s/%2$s, %5$s%8$s/%7$s, %10$s" - "%1$s, %3$s/%2$s, %5$s%6$s, %8$s/%7$s, %10$s" - "%3$s/%2$s/%4$s, %5$s%8$s/%7$s/%9$s, %10$s" - "%1$s, %3$s/%2$s/%4$s, %5$s%6$s, %8$s/%7$s/%9$s, %10$s" - "%3$s \u2013 %8$s %2$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s" - "%3$s \u2013 %8$s %2$s %9$s" - "%1$s, %3$s %2$s %4$s%6$s, %8$s %7$s %9$s" - "%3$s %2$s, %5$s%8$s %7$s, %10$s" - "%1$s, %3$s %2$s, %5$s%6$s, %8$s %7$s, %10$s" - "%3$s %2$s %4$s, %5$s%8$s %7$s %9$s, %10$s" - "%1$s, %3$s %2$s %4$s, %5$s%6$s, %8$s %7$s %9$s, %10$s" - "%-d %b %Y" - "%-d %b" diff --git a/core/res/res/values-en-rCA/donottranslate-cldr.xml b/core/res/res/values-en-rCA/donottranslate-cldr.xml new file mode 100644 index 000000000000..1e250c739b73 --- /dev/null +++ b/core/res/res/values-en-rCA/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + January + February + March + April + May + June + July + August + September + October + November + December + + January + February + March + April + May + June + July + August + September + October + November + December + + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + J + F + M + A + M + J + J + A + S + O + N + D + + Sunday + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + + Sun + Mon + Tue + Wed + Thu + Fri + Sat + + Su + Mo + Tu + We + Th + Fr + Sa + + S + M + T + W + T + F + S + + am + pm + Yesterday + Today + Tomorrow + + %H:%M + %-l:%M%p + %-l:%M%^p + h:mm a + HH:mm + %Y-%m-%d + yyyy-MM-dd + "%s-%s-%s" + %B %-e, %Y + %-l:%M:%S %p + %Y-%m-%d, %-l:%M:%S %p + %1$s, %2$s + %1$s, %3$s + %Y-%m-%d + %B %-e + %-B + %B %Y + %b %-e + %b + %b %Y + %1$s - %2$s + %2$s - %5$s + %2$s-%3$s - %7$s-%8$s + %1$s, %2$s-%3$s - %6$s, %7$s-%8$s + %4$s-%2$s-%3$s - %9$s-%7$s-%8$s + %1$s, %4$s-%2$s-%3$s - %6$s, %9$s-%7$s-%8$s + %1$s, %4$s-%2$s-%3$s, %5$s - %6$s, %9$s-%7$s-%8$s, %10$s + %2$s-%3$s, %5$s - %7$s-%8$s, %10$s + %1$s, %2$s-%3$s, %5$s - %6$s, %7$s-%8$s, %10$s + %4$s-%2$s-%3$s, %5$s - %9$s-%7$s-%8$s, %10$s + %1$s, %2$s, %3$s - %4$s, %5$s, %6$s + %1$s, %2$s - %4$s, %5$s + %2$s, %3$s - %5$s, %6$s + %1$s, %2$s, %3$s + %2$s, %3$s + %1$s, %2$s + %2$s %3$s - %7$s %8$s + %1$s, %2$s %3$s - %6$s, %7$s %8$s + %2$s %3$s, %5$s - %7$s %8$s, %10$s + %2$s %3$s, %5$s - %7$s %8$s, %10$s + %1$s, %2$s %3$s, %5$s - %6$s, %7$s %8$s, %10$s + %1$s, %2$s %3$s, %5$s - %6$s, %7$s %8$s, %10$s + %2$s %3$s, %4$s, %5$s - %7$s %8$s, %9$s, %10$s + %2$s %3$s, %4$s, %5$s - %7$s %8$s, %9$s, %10$s + %1$s, %2$s %3$s, %4$s, %5$s - %6$s, %7$s %8$s, %9$s, %10$s + %1$s, %2$s %3$s, %4$s, %5$s - %6$s, %7$s %8$s, %9$s, %10$s + %1$s, %2$s %3$s, %4$s - %6$s, %7$s %8$s, %9$s + %2$s %3$s-%8$s + %1$s, %2$s %3$s - %6$s, %7$s %8$s + %2$s %3$s - %7$s %8$s, %9$s + %2$s %3$s-%8$s, %9$s + %1$s, %2$s %3$s - %6$s, %7$s %8$s, %9$s + %b + diff --git a/core/res/res/values-en-rGB/donottranslate-cldr.xml b/core/res/res/values-en-rGB/donottranslate-cldr.xml new file mode 100644 index 000000000000..0e3e035b7587 --- /dev/null +++ b/core/res/res/values-en-rGB/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + January + February + March + April + May + June + July + August + September + October + November + December + + January + February + March + April + May + June + July + August + September + October + November + December + + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + J + F + M + A + M + J + J + A + S + O + N + D + + Sunday + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + + Sun + Mon + Tue + Wed + Thu + Fri + Sat + + Su + Mo + Tu + We + Th + Fr + Sa + + S + M + T + W + T + F + S + + am + pm + Yesterday + Today + Tomorrow + + %H:%M + %-l:%M%p + %-l:%M%^p + h:mm a + HH:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e %B %Y + %H:%M:%S + %-e %b %Y, %H:%M:%S + %1$s, %2$s + %1$s, %3$s + %-e %b %Y + %-e %B + %-B + %B %Y + %-e %b + %b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s, %3$s/%2$s - %6$s, %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s, %3$s/%2$s/%4$s - %6$s, %8$s/%7$s/%9$s + %1$s, %3$s/%2$s/%4$s, %5$s - %6$s, %8$s/%7$s/%9$s, %10$s + %3$s/%2$s, %5$s - %8$s/%7$s, %10$s + %1$s, %3$s/%2$s, %5$s - %6$s, %8$s/%7$s, %10$s + %3$s/%2$s/%4$s, %5$s - %8$s/%7$s/%9$s, %10$s + %1$s %2$s, %3$s - %4$s %5$s, %6$s + %1$s %2$s - %4$s %5$s + %2$s, %3$s - %5$s, %6$s + %1$s, %2$s %3$s + %2$s %3$s + %1$s, %2$s + %3$s %2$s - %8$s %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s, %5$s - %8$s %7$s, %10$s + %3$s %2$s, %5$s - %8$s %7$s, %10$s + %1$s %3$s %2$s, %5$s - %6$s %8$s %7$s, %10$s + %1$s %3$s %2$s, %5$s - %6$s %8$s %7$s, %10$s + %3$s %2$s %4$s, %5$s - %8$s %7$s %9$s, %10$s + %3$s %2$s %4$s, %5$s - %8$s %7$s %9$s, %10$s + %1$s, %3$s %2$s %4$s, %5$s - %6$s, %8$s %7$s %9$s, %10$s + %1$s, %3$s %2$s %4$s, %5$s - %6$s, %8$s %7$s %9$s, %10$s + %1$s, %3$s %2$s %4$s - %6$s, %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-en-rIE/donottranslate-cldr.xml b/core/res/res/values-en-rIE/donottranslate-cldr.xml new file mode 100644 index 000000000000..2e59dcfeaffa --- /dev/null +++ b/core/res/res/values-en-rIE/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + January + February + March + April + May + June + July + August + September + October + November + December + + January + February + March + April + May + June + July + August + September + October + November + December + + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + J + F + M + A + M + J + J + A + S + O + N + D + + Sunday + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + + Sun + Mon + Tue + Wed + Thu + Fri + Sat + + Su + Mo + Tu + We + Th + Fr + Sa + + S + M + T + W + T + F + S + + a.m. + p.m. + Yesterday + Today + Tomorrow + + %H:%M + %-l:%M%p + %-l:%M%^p + h:mm a + HH:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e %B %Y + %H:%M:%S + %-e %b %Y, %H:%M:%S + %1$s, %2$s + %1$s, %3$s + %-e %b %Y + %-e %B + %-B + %B %Y + %-e %b + %b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s %3$s/%2$s - %6$s %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s - %6$s %8$s/%7$s/%9$s + %1$s, %3$s/%2$s/%4$s, %5$s - %6$s, %8$s/%7$s/%9$s, %10$s + %3$s/%2$s, %5$s - %8$s/%7$s, %10$s + %1$s, %3$s/%2$s, %5$s - %6$s, %8$s/%7$s, %10$s + %3$s/%2$s/%4$s, %5$s - %8$s/%7$s/%9$s, %10$s + %1$s %2$s, %3$s - %4$s %5$s, %6$s + %1$s %2$s - %4$s %5$s + %2$s, %3$s - %5$s, %6$s + %1$s, %2$s %3$s + %2$s %3$s + %1$s, %2$s + %3$s %2$s - %8$s %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s, %5$s - %8$s %7$s, %10$s + %3$s %2$s, %5$s - %8$s %7$s, %10$s + %1$s %3$s %2$s, %5$s - %6$s %8$s %7$s, %10$s + %1$s %3$s %2$s, %5$s - %6$s %8$s %7$s, %10$s + %3$s %2$s %4$s, %5$s - %8$s %7$s %9$s, %10$s + %3$s %2$s %4$s, %5$s - %8$s %7$s %9$s, %10$s + %1$s %3$s %2$s %4$s, %5$s - %6$s %8$s %7$s %9$s, %10$s + %1$s %3$s %2$s %4$s, %5$s - %6$s %8$s %7$s %9$s, %10$s + %1$s %3$s %2$s %4$s - %6$s %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s %3$s %2$s - %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-en-rIN/donottranslate-cldr.xml b/core/res/res/values-en-rIN/donottranslate-cldr.xml new file mode 100644 index 000000000000..e39a59a84019 --- /dev/null +++ b/core/res/res/values-en-rIN/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + January + February + March + April + May + June + July + August + September + October + November + December + + January + February + March + April + May + June + July + August + September + October + November + December + + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + J + F + M + A + M + J + J + A + S + O + N + D + + Sunday + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + + Sun + Mon + Tue + Wed + Thu + Fri + Sat + + Su + Mo + Tu + We + Th + Fr + Sa + + S + M + T + W + T + F + S + + am + pm + Yesterday + Today + Tomorrow + + %H:%M + %-l:%M%p + %-l:%M%^p + h:mm a + HH:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e %B %Y + %-l:%M:%S %p + %d-%b-%Y, %-l:%M:%S %p + %1$s, %2$s + %1$s, %3$s + %d-%b-%Y + %-e %B + %-B + %B %Y + %-e %b + %b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s %3$s/%2$s - %6$s %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s - %6$s %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s, %5$s - %6$s %8$s/%7$s/%9$s, %10$s + %3$s/%2$s, %5$s - %8$s/%7$s, %10$s + %1$s %3$s/%2$s, %5$s - %6$s %8$s/%7$s, %10$s + %3$s/%2$s/%4$s, %5$s - %8$s/%7$s/%9$s, %10$s + %1$s %2$s, %3$s - %4$s %5$s, %6$s + %1$s %2$s - %4$s %5$s + %2$s, %3$s - %5$s, %6$s + %1$s, %2$s %3$s + %2$s %3$s + %1$s, %2$s + %3$s %2$s - %8$s %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s, %5$s - %8$s %7$s, %10$s + %3$s %2$s, %5$s - %8$s %7$s, %10$s + %1$s %3$s %2$s, %5$s - %6$s %8$s %7$s, %10$s + %1$s %3$s %2$s, %5$s - %6$s %8$s %7$s, %10$s + %3$s %2$s %4$s, %5$s - %8$s %7$s %9$s, %10$s + %3$s %2$s %4$s, %5$s - %8$s %7$s %9$s, %10$s + %1$s %3$s %2$s %4$s, %5$s - %6$s %8$s %7$s %9$s, %10$s + %1$s %3$s %2$s %4$s, %5$s - %6$s %8$s %7$s %9$s, %10$s + %1$s %3$s %2$s %4$s - %6$s %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s %3$s %2$s - %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-en-rNZ/donottranslate-cldr.xml b/core/res/res/values-en-rNZ/donottranslate-cldr.xml new file mode 100644 index 000000000000..3a8b50bdb9f5 --- /dev/null +++ b/core/res/res/values-en-rNZ/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + January + February + March + April + May + June + July + August + September + October + November + December + + January + February + March + April + May + June + July + August + September + October + November + December + + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + J + F + M + A + M + J + J + A + S + O + N + D + + Sunday + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + + Sun + Mon + Tue + Wed + Thu + Fri + Sat + + Su + Mo + Tu + We + Th + Fr + Sa + + S + M + T + W + T + F + S + + am + pm + Yesterday + Today + Tomorrow + + %H:%M + %-l:%M%p + %-l:%M%^p + h:mm a + HH:mm + %-e/%m/%Y + d/MM/yyyy + "%s/%s/%s" + %-e %B %Y + %-l:%M:%S %p + %-e/%m/%Y, %-l:%M:%S %p + %1$s, %2$s + %1$s, %3$s + %-e/%m/%Y + %-e %B + %-B + %B %Y + %-e %b + %b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s, %3$s/%2$s - %6$s, %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s, %3$s/%2$s/%4$s - %6$s, %8$s/%7$s/%9$s + %1$s, %3$s/%2$s/%4$s, %5$s - %6$s, %8$s/%7$s/%9$s, %10$s + %3$s/%2$s, %5$s - %8$s/%7$s, %10$s + %1$s, %3$s/%2$s, %5$s - %6$s, %8$s/%7$s, %10$s + %3$s/%2$s/%4$s, %5$s - %8$s/%7$s/%9$s, %10$s + %1$s, %2$s, %3$s - %4$s, %5$s, %6$s + %1$s, %2$s - %4$s, %5$s + %2$s, %3$s - %5$s, %6$s + %1$s, %2$s, %3$s + %2$s, %3$s + %1$s, %2$s + %3$s %2$s - %8$s %7$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s + %3$s %2$s, %5$s - %8$s %7$s, %10$s + %3$s %2$s, %5$s - %8$s %7$s, %10$s + %1$s, %3$s %2$s, %5$s - %6$s, %8$s %7$s, %10$s + %1$s, %3$s %2$s, %5$s - %6$s, %8$s %7$s, %10$s + %3$s %2$s %4$s, %5$s - %8$s %7$s %9$s, %10$s + %3$s %2$s %4$s, %5$s - %8$s %7$s %9$s, %10$s + %1$s, %3$s %2$s %4$s, %5$s - %6$s, %8$s %7$s %9$s, %10$s + %1$s, %3$s %2$s %4$s, %5$s - %6$s, %8$s %7$s %9$s, %10$s + %1$s, %3$s %2$s %4$s - %6$s, %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-en-rSG/donottranslate-cldr.xml b/core/res/res/values-en-rSG/donottranslate-cldr.xml new file mode 100644 index 000000000000..286cc0e554f2 --- /dev/null +++ b/core/res/res/values-en-rSG/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + January + February + March + April + May + June + July + August + September + October + November + December + + January + February + March + April + May + June + July + August + September + October + November + December + + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + J + F + M + A + M + J + J + A + S + O + N + D + + Sunday + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + + Sun + Mon + Tue + Wed + Thu + Fri + Sat + + Su + Mo + Tu + We + Th + Fr + Sa + + S + M + T + W + T + F + S + + am + pm + Yesterday + Today + Tomorrow + + %H:%M + %-l:%M%p + %-l:%M%^p + h:mm a + HH:mm + %-m/%-e/%Y + M/d/yyyy + "%s/%s/%s" + %B %-e, %Y + %-l:%M:%S %p + %b %-e, %Y, %-l:%M:%S %p + %1$s, %2$s + %1$s, %3$s + %b %-e, %Y + %B %-e + %-B + %B %Y + %b %-e + %-b + %b %Y + %1$s – %2$s + %2$s – %5$s + %2$s/%3$s – %7$s/%8$s + %1$s, %2$s/%3$s – %6$s, %7$s/%8$s + %2$s/%3$s/%4$s – %7$s/%8$s/%9$s + %1$s, %2$s/%3$s/%4$s – %6$s, %7$s/%8$s/%9$s + %1$s, %2$s/%3$s/%4$s, %5$s – %6$s, %7$s/%8$s/%9$s, %10$s + %2$s/%3$s, %5$s – %7$s/%8$s, %10$s + %1$s, %2$s/%3$s, %5$s – %6$s, %7$s/%8$s, %10$s + %2$s/%3$s/%4$s, %5$s – %7$s/%8$s/%9$s, %10$s + %1$s, %2$s, %3$s – %4$s, %5$s, %6$s + %1$s, %2$s – %4$s, %5$s + %2$s, %3$s – %5$s, %6$s + %1$s, %2$s, %3$s + %2$s, %3$s + %1$s, %2$s + %2$s %3$s – %7$s %8$s + %1$s, %2$s %3$s – %6$s, %7$s %8$s + %2$s %3$s, %5$s – %7$s %8$s, %10$s + %2$s %3$s, %5$s – %7$s %8$s, %10$s + %1$s, %2$s %3$s, %5$s – %6$s, %7$s %8$s, %10$s + %1$s, %2$s %3$s, %5$s – %6$s, %7$s %8$s, %10$s + %2$s %3$s, %4$s, %5$s – %7$s %8$s, %9$s, %10$s + %2$s %3$s, %4$s, %5$s – %7$s %8$s, %9$s, %10$s + %1$s, %2$s %3$s, %4$s, %5$s – %6$s, %7$s %8$s, %9$s, %10$s + %1$s, %2$s %3$s, %4$s, %5$s – %6$s, %7$s %8$s, %9$s, %10$s + %1$s, %2$s %3$s, %4$s – %6$s, %7$s %8$s, %9$s + %2$s %3$s – %8$s + %1$s, %2$s %3$s – %6$s, %7$s %8$s + %2$s %3$s – %7$s %8$s, %9$s + %2$s %3$s – %8$s, %9$s + %1$s, %2$s %3$s – %6$s, %7$s %8$s, %9$s + %b + diff --git a/core/res/res/values-en-rSG/strings.xml b/core/res/res/values-en-rSG/strings.xml index 6850a5d2835b..2ec6b0b02c48 100644 --- a/core/res/res/values-en-rSG/strings.xml +++ b/core/res/res/values-en-rSG/strings.xml @@ -314,10 +314,6 @@ - - - - @@ -710,7 +706,6 @@ - "h:mm AA" @@ -863,33 +858,21 @@ - "%1$s, %2$s, %3$s%4$s, %5$s, %6$s" - "%1$s, %2$s%4$s, %5$s" - "%d/%m/%Y" - "%2$s, %3$s%5$s, %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%1$s, %2$s, %3$s" - "%2$s, %3$s" - "%1$s, %3$s" - "%1$s, %2$s" - "dd MMMM yyyy" - "dd MMM yyyy" @@ -903,71 +886,42 @@ - "%-d %B" - "%-d %B %Y" - "%H:%M:%S" - "%H:%M:%S %-d %B %Y" - "%3$s %2$s%8$s %7$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s" - "%3$s %2$s%8$s %7$s %9$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s %9$s" - "%1$s, %3$s %2$s, %5$s%6$s, %8$s %7$s %10$s" - "%3$s %2$s, %4$s, %5$s%8$s %7$s %9$s, %10$s" - "%1$s, %3$s %2$s %4$s, %5$s%6$s, %8$s %7$s %9$s, %10$s" - "%3$s/%2$s%8$s/%7$s" - "%1$s, %3$s/%2$s%6$s, %8$s/%7$s" - "%3$s/%2$s/%4$s%8$s/%7$s/%9$s" - "%1$s, %3$s/%2$s/%4$s%6$s, %8$s/%7$s/%9$s" - "%3$s/%2$s, %5$s%8$s/%7$s, %10$s" - "%1$s, %3$s/%2$s, %5$s%6$s, %8$s/%7$s, %10$s" - "%3$s/%2$s/%4$s, %5$s%8$s/%7$s/%9$s, %10$s" - "%1$s, %3$s/%2$s/%4$s, %5$s%6$s, %8$s/%7$s/%9$s, %10$s" - "%3$s \u2013 %8$s %2$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s" - "%3$s \u2013 %8$s %2$s %9$s" - "%1$s, %3$s %2$s %4$s%6$s, %8$s %7$s %9$s" - "%3$s %2$s, %5$s%8$s %7$s, %10$s" - "%1$s, %3$s %2$s, %5$s%6$s, %8$s %7$s, %10$s" - "%3$s %2$s %4$s, %5$s%8$s %7$s %9$s, %10$s" - "%1$s, %3$s %2$s %4$s, %5$s%6$s, %8$s %7$s %9$s, %10$s" - "%-d %b %Y" - "%-d %b" diff --git a/core/res/res/values-en-rUS/donottranslate-cldr.xml b/core/res/res/values-en-rUS/donottranslate-cldr.xml new file mode 100644 index 000000000000..286cc0e554f2 --- /dev/null +++ b/core/res/res/values-en-rUS/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + January + February + March + April + May + June + July + August + September + October + November + December + + January + February + March + April + May + June + July + August + September + October + November + December + + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + J + F + M + A + M + J + J + A + S + O + N + D + + Sunday + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + + Sun + Mon + Tue + Wed + Thu + Fri + Sat + + Su + Mo + Tu + We + Th + Fr + Sa + + S + M + T + W + T + F + S + + am + pm + Yesterday + Today + Tomorrow + + %H:%M + %-l:%M%p + %-l:%M%^p + h:mm a + HH:mm + %-m/%-e/%Y + M/d/yyyy + "%s/%s/%s" + %B %-e, %Y + %-l:%M:%S %p + %b %-e, %Y, %-l:%M:%S %p + %1$s, %2$s + %1$s, %3$s + %b %-e, %Y + %B %-e + %-B + %B %Y + %b %-e + %-b + %b %Y + %1$s – %2$s + %2$s – %5$s + %2$s/%3$s – %7$s/%8$s + %1$s, %2$s/%3$s – %6$s, %7$s/%8$s + %2$s/%3$s/%4$s – %7$s/%8$s/%9$s + %1$s, %2$s/%3$s/%4$s – %6$s, %7$s/%8$s/%9$s + %1$s, %2$s/%3$s/%4$s, %5$s – %6$s, %7$s/%8$s/%9$s, %10$s + %2$s/%3$s, %5$s – %7$s/%8$s, %10$s + %1$s, %2$s/%3$s, %5$s – %6$s, %7$s/%8$s, %10$s + %2$s/%3$s/%4$s, %5$s – %7$s/%8$s/%9$s, %10$s + %1$s, %2$s, %3$s – %4$s, %5$s, %6$s + %1$s, %2$s – %4$s, %5$s + %2$s, %3$s – %5$s, %6$s + %1$s, %2$s, %3$s + %2$s, %3$s + %1$s, %2$s + %2$s %3$s – %7$s %8$s + %1$s, %2$s %3$s – %6$s, %7$s %8$s + %2$s %3$s, %5$s – %7$s %8$s, %10$s + %2$s %3$s, %5$s – %7$s %8$s, %10$s + %1$s, %2$s %3$s, %5$s – %6$s, %7$s %8$s, %10$s + %1$s, %2$s %3$s, %5$s – %6$s, %7$s %8$s, %10$s + %2$s %3$s, %4$s, %5$s – %7$s %8$s, %9$s, %10$s + %2$s %3$s, %4$s, %5$s – %7$s %8$s, %9$s, %10$s + %1$s, %2$s %3$s, %4$s, %5$s – %6$s, %7$s %8$s, %9$s, %10$s + %1$s, %2$s %3$s, %4$s, %5$s – %6$s, %7$s %8$s, %9$s, %10$s + %1$s, %2$s %3$s, %4$s – %6$s, %7$s %8$s, %9$s + %2$s %3$s – %8$s + %1$s, %2$s %3$s – %6$s, %7$s %8$s + %2$s %3$s – %7$s %8$s, %9$s + %2$s %3$s – %8$s, %9$s + %1$s, %2$s %3$s – %6$s, %7$s %8$s, %9$s + %b + diff --git a/core/res/res/values-en-rUS/strings.xml b/core/res/res/values-en-rUS/strings.xml index b9df983a3fc3..05f30fca350f 100644 --- a/core/res/res/values-en-rUS/strings.xml +++ b/core/res/res/values-en-rUS/strings.xml @@ -314,10 +314,6 @@ - - - - diff --git a/core/res/res/values-en-rZA/donottranslate-cldr.xml b/core/res/res/values-en-rZA/donottranslate-cldr.xml new file mode 100644 index 000000000000..2e2d6080d71c --- /dev/null +++ b/core/res/res/values-en-rZA/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + January + February + March + April + May + June + July + August + September + October + November + December + + January + February + March + April + May + June + July + August + September + October + November + December + + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + J + F + M + A + M + J + J + A + S + O + N + D + + Sunday + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + + Sun + Mon + Tue + Wed + Thu + Fri + Sat + + Su + Mo + Tu + We + Th + Fr + Sa + + S + M + T + W + T + F + S + + am + pm + Yesterday + Today + Tomorrow + + %H:%M + %-l:%M%p + %-l:%M%^p + h:mm a + HH:mm + %Y/%m/%d + yyyy/MM/dd + "%s/%s/%s" + %d %B %Y + %-l:%M:%S %p + %d %b %Y, %-l:%M:%S %p + %1$s, %2$s + %1$s, %3$s + %d %b %Y + %B %-e + %-B + %B %Y + %d %b + %b + %b %Y + %1$s - %2$s + %2$s - %5$s + %2$s/%3$s - %7$s/%8$s + %1$s %2$s/%3$s - %6$s %7$s/%8$s + %4$s/%2$s/%3$s - %9$s/%7$s/%8$s + %1$s %4$s/%2$s/%3$s - %6$s %9$s/%7$s/%8$s + %1$s %4$s/%2$s/%3$s, %5$s - %6$s %9$s/%7$s/%8$s, %10$s + %2$s/%3$s, %5$s - %7$s/%8$s, %10$s + %1$s %2$s/%3$s, %5$s - %6$s %7$s/%8$s, %10$s + %4$s/%2$s/%3$s, %5$s - %9$s/%7$s/%8$s, %10$s + %1$s %2$s, %3$s - %4$s %5$s, %6$s + %1$s %2$s - %4$s %5$s + %2$s, %3$s - %5$s, %6$s + %1$s, %2$s %3$s + %2$s %3$s + %1$s, %2$s + %2$s %3$s - %7$s %8$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %2$s %3$s, %5$s - %7$s %8$s, %10$s + %2$s %3$s, %5$s - %7$s %8$s, %10$s + %1$s %3$s %2$s, %5$s - %6$s %8$s %7$s, %10$s + %1$s %3$s %2$s, %5$s - %6$s %8$s %7$s, %10$s + %3$s %2$s %4$s, %5$s - %8$s %7$s %9$s, %10$s + %3$s %2$s %4$s, %5$s - %8$s %7$s %9$s, %10$s + %1$s %3$s %2$s %4$s, %5$s - %6$s %8$s %7$s %9$s, %10$s + %1$s %3$s %2$s %4$s, %5$s - %6$s %8$s %7$s %9$s, %10$s + %1$s %3$s %2$s %4$s - %6$s %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s %3$s %2$s - %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-es-rES/donottranslate-cldr.xml b/core/res/res/values-es-rES/donottranslate-cldr.xml new file mode 100644 index 000000000000..c1dc58b815d0 --- /dev/null +++ b/core/res/res/values-es-rES/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + enero + febrero + marzo + abril + mayo + junio + julio + agosto + septiembre + octubre + noviembre + diciembre + + enero + febrero + marzo + abril + mayo + junio + julio + agosto + septiembre + octubre + noviembre + diciembre + + ene + feb + mar + abr + may + jun + jul + ago + sep + oct + nov + dic + + E + F + M + A + M + J + J + A + S + O + N + D + + domingo + lunes + martes + miércoles + jueves + viernes + sábado + + dom + lun + mar + mié + jue + vie + sáb + + dom + lun + mar + mié + jue + vie + sáb + + D + L + M + M + J + V + S + + a.m. + p.m. + ayer + hoy + mañana + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e de %B de %Y + %H:%M:%S + %H:%M:%S %d/%m/%Y + %2$s %1$s + %1$s %3$s + %d/%m/%Y + %-e de %B + %-B + %B de %Y + %-e %b + %-b + %b %Y + %1$s – %2$s + %2$s – %5$s + %3$s/%2$s – %8$s/%7$s + %1$s %3$s/%2$s – %6$s %8$s/%7$s + %3$s/%2$s/%4$s – %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s – %6$s %8$s/%7$s/%9$s + %5$s %1$s %3$s/%2$s/%4$s – %10$s %6$s %8$s/%7$s/%9$s + %5$s %3$s/%2$s – %10$s %8$s/%7$s + %5$s %1$s, %3$s-%2$s – %10$s %6$s, %8$s-%7$s + %5$s %3$s/%2$s/%4$s – %10$s %8$s/%7$s/%9$s + %3$s %1$s %2$s – %6$s %4$s %5$s + %1$s %2$s – %4$s %5$s + %3$s %2$s – %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s de %2$s – %8$s de %7$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %5$s %3$s de %2$s – %10$s %8$s de %7$s + %5$s %3$s de %2$s – %10$s %8$s de %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s – %10$s %6$s, %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s – %10$s %6$s, %8$s %7$s %9$s + %1$s, %3$s %2$s %4$s – %6$s, %8$s %7$s %9$s + %3$s–%8$s %2$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %3$s %2$s – %8$s %7$s %9$s + %3$s–%8$s %2$s %9$s + %1$s %3$s %2$s – %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-es-rUS/donottranslate-cldr.xml b/core/res/res/values-es-rUS/donottranslate-cldr.xml new file mode 100644 index 000000000000..d6d89540af91 --- /dev/null +++ b/core/res/res/values-es-rUS/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + enero + febrero + marzo + abril + mayo + junio + julio + agosto + septiembre + octubre + noviembre + diciembre + + enero + febrero + marzo + abril + mayo + junio + julio + agosto + septiembre + octubre + noviembre + diciembre + + ene + feb + mar + abr + may + jun + jul + ago + sep + oct + nov + dic + + E + F + M + A + M + J + J + A + S + O + N + D + + domingo + lunes + martes + miércoles + jueves + viernes + sábado + + dom + lun + mar + mié + jue + vie + sáb + + dom + lun + mar + mié + jue + vie + sáb + + D + L + M + M + J + V + S + + a.m. + p.m. + ayer + hoy + mañana + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %-m/%-e/%Y + M/d/yyyy + "%s/%s/%s" + %-e de %B de %Y + %-l:%M:%S %p + %-l:%M:%S %p %b %-e, %Y + %2$s %1$s + %1$s %3$s + %b %-e, %Y + %-e de %B + %-B + %B de %Y + %-e de %b + %b + %b de %Y + %1$s a el %2$s + %2$s a el %5$s + %2$s/%3$s - %7$s/%8$s + %1$s %2$s/%3$s - %6$s %7$s/%8$s + %2$s/%3$s/%4$s - %7$s/%8$s/%9$s + %1$s %2$s/%3$s/%4$s - %6$s %7$s/%8$s/%9$s + %5$s %1$s %2$s/%3$s/%4$s a el %10$s %6$s %7$s/%8$s/%9$s + %5$s %2$s/%3$s a el %10$s %7$s/%8$s + %5$s %1$s %2$s/%3$s a el %10$s %6$s %7$s/%8$s + %5$s %2$s/%3$s/%4$s a el %10$s %7$s/%8$s/%9$s + %3$s %1$s %2$s a el %6$s %4$s %5$s + %1$s %2$s a el %4$s %5$s + %3$s %2$s a el %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s de %2$s a el %8$s de %7$s + %1$s %3$s de %2$s a el %6$s %8$s de %7$s + %5$s %3$s de %2$s a el %10$s %8$s de %7$s + %5$s %3$s de %2$s a el %10$s %8$s de %7$s + %5$s %1$s %3$s de %2$s a el %10$s %6$s %8$s de %7$s + %5$s %1$s %3$s de %2$s a el %10$s %6$s %8$s de %7$s + %5$s %3$s de %2$s de %4$s a el %10$s %8$s de %7$s de %9$s + %5$s %3$s de %2$s de %4$s a el %10$s %8$s de %7$s de %9$s + %5$s %1$s %3$s de %2$s de %4$s a el %10$s %6$s %8$s de %7$s de %9$s + %5$s %1$s %3$s de %2$s de %4$s a el %10$s %6$s %8$s de %7$s de %9$s + %1$s %3$s de %2$s de %4$s a el %6$s %8$s de %7$s de %9$s + %3$s-%8$s de %2$s + %1$s %3$s de %2$s a el %6$s %8$s de %7$s + %3$s de %2$s al %8$s de %7$s de %9$s + %3$s-%8$s de %2$s de %9$s + %1$s %3$s de %2$s al %6$s %8$s de %7$s de %9$s + %b + diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 7b60a39f042b..84435aa8dee8 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -178,14 +178,10 @@ "Admite una aplicación para cambiar la configuración actual, como el tamaño de fuente local o general." "reiniciar otras aplicaciones" "Admite una aplicación que reinicia otras aplicaciones por la fuerza." - "impedir la detención" - "Admite una aplicación que ejecuta cualquier tipo de proceso en primer plano, de manera que no se pueda suprimir. Se debe evitar utilizarlo en aplicaciones normales." "provocar que la aplicación se acerque" "Admite una aplicación que provoca que cualquier actividad del fondo se acerque y vuelva a alejarse. Se debe evitar utilizarlo en aplicaciones normales." "recuperar el estado interno del sistema" "Admite que la aplicación recupere el estado interno del sistema. Las aplicaciones maliciosas pueden recuperar una gran variedad de información privada y segura que normalmente nunca necesitaría." - "publicar servicios de bajo nivel" - "Admite que la aplicación publique sus propios servicios del sistema de bajo nivel. Las aplicaciones maliciosas pueden apropiarse del sistema y robar o corromper cualquiera de sus datos." "verificar y controlar todos los lanzamientos de actividades" "Admite una aplicación que verifica y controla el lanzamiento de actividades por parte del sistema. Las aplicaciones maliciosas pueden comprometer totalmente al sistema. Este permiso sólo es necesario para el desarrollo, nunca para el uso normal del teléfono." "enviar emisión de paquete eliminado" @@ -198,8 +194,6 @@ "Admite una aplicación que controla la cantidad máxima de procesos que se ejecutarán. No se utiliza nunca en aplicaciones normales." "cerrar todas las aplicaciones del fondo" "Admite una aplicación que controla si las actividades siempre finalizan cuando van al fondo. No se utiliza nunca en aplicaciones normales." - "instalar automáticamente las actualizaciones del sistema" - "Admite una aplicación que recibe notificaciones sobre las actualizaciones pendientes del sistema y activa su instalación. Las aplicaciones maliciosas pueden utilizarlo para corromper el sistema con actualizaciones no autorizadas o, en general, para interferir en el proceso de actualización." "modificar la estadística de la batería" "Admite la modificación de estadísticas recopiladas sobre la batería. Las aplicaciones normales no deben utilizarlo." "mostrar ventanas no autorizadas" @@ -436,9 +430,6 @@ "Contraseña" "Inicia sesión" "Nombre de usuario o contraseña incorrecta." - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%-l%P" "%-l%p" "Borrar notificaciones" @@ -470,9 +461,6 @@ "ingresar" "borrar" "Buscar" - "Hoy" - "Ayer" - "Mañana" "hace 1 mes" "Anterior a 1 mes atrás" @@ -554,13 +542,6 @@ "semanas" "año" "años" - "Domingo" - "Lunes" - "Martes" - "Miércoles" - "Jueves" - "Viernes" - "Sábado" "Los días de semana (lunes a viernes)" "Diariamente" "Semanalmente el día %s" @@ -570,137 +551,15 @@ "Lo sentimos, este video no es válido para las transmisiones a este dispositivo." "Lo sentimos, no se puede reproducir este video." "Aceptar" - "AM" - "PM" - "%m/%d/%Y" - "%1$s, %2$s, %3$s%4$s, %5$s, %6$s" - "%1$s, %2$s%4$s, %5$s" - "%2$s, %3$s%5$s, %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%1$s, %2$s, %3$s" - "%2$s, %3$s" - "%1$s, %3$s" - "%1$s, %2$s" "%1$s, %2$s" - "%1$s, %2$s" - "MMMM' 'd', 'yyyy" - "d' 'MMMM', 'yyyy" - "MMM' 'd', 'yyyy" - "d' 'MMM', 'yyyy" - "h':'mm' 'a" - "HH':'mm" "mediodía" "Mediodía" "medianoche" "Medianoche" - "%B %-d" - "%B %-d, %Y" - "%B %Y" - "%H:%M:%S" - "%H:%M:%S %B %-d, %Y" - "%2$s %3$s%7$s %8$s" - "%1$s, %2$s %3$s%6$s, %7$s %8$s" - "%2$s %3$s%7$s %8$s, %9$s" - "%1$s, %2$s %3$s%6$s, %7$s %8$s, %9$s" - "%2$s %3$s, %5$s%7$s %8$s, %10$s" - "%1$s, %2$s %3$s, %5$s%6$s, %7$s %8$s, %10$s" - "%2$s %3$s, %4$s, %5$s%7$s %8$s, %9$s, %10$s" - "%1$s, %2$s %3$s, %4$s, %5$s%6$s, %7$s %8$s, %9$s, %10$s" - "%2$s/%3$s%7$s/%8$s" - "%1$s, %2$s/%3$s%6$s, %7$s/%8$s" - "%2$s/%3$s/%4$s%7$s/%8$s/%9$s" - "%1$s, %2$s/%3$s/%4$s%6$s, %7$s/%8$s/%9$s" - "%2$s/%3$s, %5$s%7$s/%8$s, %10$s" - "%1$s, %2$s/%3$s, %5$s%6$s, %7$s/%8$s, %10$s" - "%2$s/%3$s/%4$s, %5$s%7$s/%8$s/%9$s, %10$s" - "%1$s, %2$s/%3$s/%4$s, %5$s%6$s, %7$s/%8$s/%9$s, %10$s" - "%2$s %3$s%8$s" - "%1$s, %2$s %3$s%6$s, %7$s %8$s" - "%2$s %3$s%8$s, %9$s" - "%1$s, %2$s %3$s, %4$s%6$s, %7$s %8$s, %9$s" - "%2$s %3$s, %5$s%7$s %8$s, %10$s" - "%1$s, %2$s %3$s, %5$s%6$s, %7$s %8$s, %10$s" - "%2$s %3$s, %4$s, %5$s%7$s %8$s, %9$s, %10$s" - "%1$s, %2$s %3$s, %4$s, %5$s%6$s, %7$s %8$s, %9$s, %10$s" - "%b %-d, %Y" - "%b %Y" - "%b %-d" - "Domingo" - "Lunes" - "Martes" - "Miércoles" - "Jueves" - "Viernes" - "Sábado" - "Dom." - "Lun." - "Mar." - "Mié." - "Jue." - "Vie." - "Sáb." - "Dom." - "Lun." - "Mar." - "Nosotros" - "Jue." - "V" - "Sáb." - "Dom." - "L" - "Mar." - "M" - "Jue." - "V" - "Sáb." - "D" - "L" - "Mar." - "M" - "Jue." - "V" - "D" - "Enero" - "Febrero" - "Marzo" - "Abril" - "Mayo" - "Junio" - "Julio" - "Agosto" - "Septiembre" - "Octubre" - "Noviembre" - "Diciembre" - "Ene." - "Feb." - "Mar." - "Abr." - "Mayo" - "Jun." - "Jul." - "Ago." - "Sep." - "Oct." - "Nov." - "Dic." - "E" - "V" - "M" - "A" - "M" - "E" - "J" - "Ago." - "D" - "O" - "N" - "Dic." "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "Seleccionar todos" diff --git a/core/res/res/values-es/donottranslate-cldr.xml b/core/res/res/values-es/donottranslate-cldr.xml new file mode 100644 index 000000000000..c1dc58b815d0 --- /dev/null +++ b/core/res/res/values-es/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + enero + febrero + marzo + abril + mayo + junio + julio + agosto + septiembre + octubre + noviembre + diciembre + + enero + febrero + marzo + abril + mayo + junio + julio + agosto + septiembre + octubre + noviembre + diciembre + + ene + feb + mar + abr + may + jun + jul + ago + sep + oct + nov + dic + + E + F + M + A + M + J + J + A + S + O + N + D + + domingo + lunes + martes + miércoles + jueves + viernes + sábado + + dom + lun + mar + mié + jue + vie + sáb + + dom + lun + mar + mié + jue + vie + sáb + + D + L + M + M + J + V + S + + a.m. + p.m. + ayer + hoy + mañana + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e de %B de %Y + %H:%M:%S + %H:%M:%S %d/%m/%Y + %2$s %1$s + %1$s %3$s + %d/%m/%Y + %-e de %B + %-B + %B de %Y + %-e %b + %-b + %b %Y + %1$s – %2$s + %2$s – %5$s + %3$s/%2$s – %8$s/%7$s + %1$s %3$s/%2$s – %6$s %8$s/%7$s + %3$s/%2$s/%4$s – %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s – %6$s %8$s/%7$s/%9$s + %5$s %1$s %3$s/%2$s/%4$s – %10$s %6$s %8$s/%7$s/%9$s + %5$s %3$s/%2$s – %10$s %8$s/%7$s + %5$s %1$s, %3$s-%2$s – %10$s %6$s, %8$s-%7$s + %5$s %3$s/%2$s/%4$s – %10$s %8$s/%7$s/%9$s + %3$s %1$s %2$s – %6$s %4$s %5$s + %1$s %2$s – %4$s %5$s + %3$s %2$s – %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s de %2$s – %8$s de %7$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %5$s %3$s de %2$s – %10$s %8$s de %7$s + %5$s %3$s de %2$s – %10$s %8$s de %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s – %10$s %6$s, %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s – %10$s %6$s, %8$s %7$s %9$s + %1$s, %3$s %2$s %4$s – %6$s, %8$s %7$s %9$s + %3$s–%8$s %2$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %3$s %2$s – %8$s %7$s %9$s + %3$s–%8$s %2$s %9$s + %1$s %3$s %2$s – %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index a9f267a308b1..920ac3e5dcd0 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -161,14 +161,10 @@ "Permite que una aplicación cambie la configuración actual como, por ejemplo, la configuración local o el tamaño de fuente general." "reiniciar otras aplicaciones" "Permite que una aplicación reinicie de forma forzosa otras aplicaciones." - "impedir su interrupción" - "Permite que una aplicación ejecute cualquier proceso en segundo plano, de forma que no se pueda interrumpir. No debería ser necesario nunca para las aplicaciones normales." "forzar el cierre de la aplicación" "Permite que una aplicación fuerce a cualquier actividad en segundo plano a cerrarse y volver a la pantalla anterior. No debería ser necesario nunca para las aplicaciones normales." "recuperar estado interno del sistema" "Permite que la aplicación recupere el estado interno del sistema. Las aplicaciones malintencionadas pueden recuperar una amplia variedad de información protegida y privada que normalmente no deberían necesitar." - "publicar servicios de nivel inferior" - "Permite que la aplicación publique sus propios servicios de sistema de nivel inferior. Las aplicaciones malintencionadas pueden hacerse con el control del sistema, y robar o dañar los datos contenidos en él." "supervisar y controlar la ejecución de todas las aplicaciones" "Permite que una aplicación supervise y controle la ejecución de las actividades por parte del sistema. Las aplicaciones malintencionadas pueden vulnerar la seguridad del sistema. Este permiso sólo es necesario para tareas de desarrollo, nunca para el uso habitual del teléfono." "enviar emisión eliminada de paquete" @@ -181,8 +177,6 @@ "Permite que una aplicación controle el número máximo de procesos que se ejecutarán. No es necesario nunca para las aplicaciones normales." "hacer que se cierren todas las aplicaciones en segundo plano" "Permite que una aplicación controle si las actividades finalizan siempre en cuanto pasan a segundo plano. No es necesario nunca para las aplicaciones normales." - "instalar actualizaciones del sistema de forma automática" - "Permite que una aplicación reciba notificaciones sobre actualizaciones pendientes del sistema e inicie su instalación. Las aplicaciones malintencionadas pueden utilizar este permiso para provocar daños en el sistema con actualizaciones no autorizadas o interferir de forma general en el proceso de actualización." "modificar estadísticas de la batería" "Permite la modificación de estadísticas recopiladas sobre la batería. No está destinado al uso por parte de aplicaciones normales." "mostrar ventanas no autorizadas" @@ -418,9 +412,6 @@ "Contraseña" "Acceder" "Nombre de usuario o contraseña no válido" - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%-l%P" "%-l%p" "Cerrar notificaciones" @@ -452,9 +443,6 @@ "intro" "suprimir" "Buscar" - "Hoy" - "Ayer" - "Mañana" "Hace un mes" "Hace más de un mes" @@ -536,13 +524,6 @@ "semanas" "año" "años" - "Domingo" - "Lunes" - "Martes" - "Miércoles" - "Jueves" - "Viernes" - "Sábado" "Todos los días laborables (Lun-Vie)" "Diariamente" "Semanalmente, el %s" @@ -552,137 +533,15 @@ "Este vídeo no se puede transmitir al dispositivo." "Este vídeo no se puede reproducir." "Aceptar" - "a.m." - "p.m." - "%d/%m/%Y" - "%1$s, %2$s, %3$s%4$s, %5$s, %6$s" - "%1$s, %2$s%4$s, %5$s" - "%2$s, %3$s%5$s, %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%1$s, %2$s, %3$s" - "%2$s, %3$s" - "%1$s, %3$s" - "%1$s, %2$s" "%1$s, %2$s" - "%1$s, %2$s" - "d' de 'MMMM' de 'yyyy" - "d' de 'MMMM' de 'yyyy" - "d' de 'MMM' de 'yyyy" - "d' 'MMM', 'yyyy" - "h':'mm' 'a" - "HH':'mm" "mediodía" "Mediodía" "medianoche" "Medianoche" - "%-d %B" - "%-d %B, %Y" - "%B %Y" - "%H:%M:%S" - "%H:%M:%S %B %-d, %Y" - "%3$s %2$s%8$s %7$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s" - "%3$s %2$s%8$s %7$s, %9$s" - "%1$s, %2$s %3$s%6$s, %7$s %8$s, %9$s" - "%3$s de %2$s, %5$s%8$s de %7$s, %10$s" - "%1$s, %3$s %2$s, %5$s%6$s, %8$s %7$s, %10$s" - "%3$s de %2$s de %4$s, %5$s%8$s de %7$s de %9$s, %10$s" - "%1$s, %3$s %2$s, %4$s, %5$s%6$s, %8$s %7$s, %9$s, %10$s" - "%3$s/%2$s%8$s/%7$s" - "%1$s, %2$s/%3$s%6$s, %7$s/%8$s" - "%3$s/%2$s/%4$s%8$s/%7$s/%9$s" - "%1$s, %3$s/%2$s/%4$s%6$s, %8$s/%7$s/%9$s" - "%3$s/%2$s, %5$s%8$s/%7$s, %10$s" - "%1$s, %3$s/%2$s, %5$s%6$s, %8$s/%7$s, %10$s" - "%3$s/%2$s/%4$s, %5$s%8$s/%7$s/%9$s, %10$s" - "%1$s, %3$s/%2$s/%4$s, %5$s%6$s, %8$s/%7$s/%9$s, %10$s" - "%3$s%8$s %2$s" - "%1$s, %2$s %3$s%6$s, %7$s %8$s" - "%3$s%8$s %2$s, %9$s" - "%1$s, %3$s de %2$s de %4$s%6$s, %8$s de %7$s de %9$s" - "%3$s %2$s, %5$s%8$s %7$s, %10$s" - "%1$s, %3$s %2$s, %5$s%6$s, %8$s %7$s, %10$s" - "%2$s %3$s, %4$s, %5$s%7$s %8$s, %9$s, %10$s" - "%1$s, %2$s %3$s, %4$s, %5$s%6$s, %7$s %8$s, %9$s, %10$s" - "%-d de %b de %Y" - "%b %Y" - "%b %-d" - "Domingo" - "Lunes" - "Martes" - "Miércoles" - "Jueves" - "Viernes" - "Sábado" - "Dom" - "Lun" - "Mar" - "Mié" - "Jue" - "Vie" - "Sáb" - "Do" - "Lu" - "Ma" - "Mi" - "Ju" - "Vi" - "Sá" - "Do" - "L" - "Ma" - "Mi" - "Ju" - "V" - "S" - "D" - "Mz" - "M" - "Mi" - "M" - "V" - "D" - "Enero" - "Febrero" - "Marzo" - "Abril" - "Mayo" - "Junio" - "Julio" - "Agosto" - "Septiembre" - "Octubre" - "Noviembre" - "Diciembre" - "Ene" - "Feb" - "Mar" - "Abr" - "May" - "Jun" - "Jul" - "Ago" - "Sep" - "Oct" - "Nov" - "Dic" - "E" - "V" - "Mz" - "A" - "My" - "J" - "E" - "Ag" - "S" - "O" - "N" - "D" "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "Seleccionar todo" diff --git a/core/res/res/values-fi-rFI/donottranslate-cldr.xml b/core/res/res/values-fi-rFI/donottranslate-cldr.xml new file mode 100644 index 000000000000..df3866e72bda --- /dev/null +++ b/core/res/res/values-fi-rFI/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + tammikuu + helmikuu + maaliskuu + huhtikuu + toukokuu + kesäkuu + heinäkuu + elokuu + syyskuu + lokakuu + marraskuu + joulukuu + + tammikuuta + helmikuuta + maaliskuuta + huhtikuuta + toukokuuta + kesäkuuta + heinäkuuta + elokuuta + syyskuuta + lokakuuta + marraskuuta + joulukuuta + + tammikuuta + helmikuuta + maaliskuuta + huhtikuuta + toukokuuta + kesäkuuta + heinäkuuta + elokuuta + syyskuuta + lokakuuta + marraskuuta + joulukuuta + + T + H + M + H + T + K + H + E + S + L + M + J + + sunnuntaina + maanantaina + tiistaina + keskiviikkona + torstaina + perjantaina + lauantaina + + su + ma + ti + ke + to + pe + la + + su + ma + ti + ke + to + pe + la + + S + M + T + K + T + P + L + + ap. + ip. + eilen + tänään + huomenna + + %-k.%M + %-l.%M %p + %-l.%M %^p + h.mm a + H.mm + %-e.%-m.%Y + d.M.yyyy + "%s.%s.%s" + %-e. %B %Y + %-k.%M.%S + %-k.%M.%S %-e.%-m.%Y + %2$s %1$s + %1$s %3$s + %-e.%-m.%Y + %-e. %B + %-b + %-B %Y + %-e. %b + %-b + %-b %Y + %1$s–%2$s + %2$s–%5$s + %3$s.%2$s.–%8$s.%7$s. + %1$s %3$s.%2$s. – %6$s %8$s.%7$s. + %3$s.%2$s.%4$s–%8$s.%7$s.%9$s + %1$s %3$s.%2$s.%4$s – %6$s %8$s.%7$s.%9$s + %5$s %1$s %3$s.%2$s.%4$s–%10$s %6$s %8$s.%7$s.%9$s + %5$s %3$s.%2$s.–%10$s %8$s.%7$s. + %5$s %1$s %3$s.%2$s.–%10$s %6$s %8$s.%7$s. + %5$s %3$s.%2$s.%4$s–%10$s %8$s.%7$s.%9$s + %3$s %1$s %2$s–%6$s %4$s %5$s + %1$s %2$s–%4$s %5$s + %3$s %2$s–%6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s. %2$s–%8$s. %7$s + %1$s %3$s. %2$s–%6$s %8$s. %7$s + %5$s %3$s. %2$s–%10$s %8$s. %7$s + %5$s %3$s. %2$s–%10$s %8$s. %7$s + %5$s %1$s %3$s. %2$s–%10$s %6$s %8$s. %7$s + %5$s %1$s %3$s. %2$s–%10$s %6$s %8$s. %7$s + %5$s %3$s. %2$s %4$s–%10$s %8$s. %7$s %9$s + %5$s %3$s. %2$s %4$s–%10$s %8$s. %7$s %9$s + %5$s %1$s %3$s. %2$s %4$s–%10$s %6$s %8$s. %7$s %9$s + %5$s %1$s %3$s. %2$s %4$s–%10$s %6$s %8$s. %7$s %9$s + %1$s %3$s. %2$s %4$s–%6$s %8$s. %7$s %9$s + %3$s.–%8$s. %2$s + %1$s %3$s. %2$s–%6$s %8$s. %7$s + %3$s. %2$s – %8$s. %7$s %9$s + %3$s.–%8$s. %2$s %9$s + %1$s %3$s. %2$s – %6$s %8$s. %7$s %9$s + %b + diff --git a/core/res/res/values-fr-rBE/donottranslate-cldr.xml b/core/res/res/values-fr-rBE/donottranslate-cldr.xml new file mode 100644 index 000000000000..e1908373a3fe --- /dev/null +++ b/core/res/res/values-fr-rBE/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + janvier + février + mars + avril + mai + juin + juillet + août + septembre + octobre + novembre + décembre + + janvier + février + mars + avril + mai + juin + juillet + août + septembre + octobre + novembre + décembre + + janv. + févr. + mars + avr. + mai + juin + juil. + août + sept. + oct. + nov. + déc. + + J + F + M + A + M + J + J + A + S + O + N + D + + dimanche + lundi + mardi + mercredi + jeudi + vendredi + samedi + + dim. + lun. + mar. + mer. + jeu. + ven. + sam. + + dim. + lun. + mar. + mer. + jeu. + ven. + sam. + + D + L + M + M + J + V + S + + matin + soir + hier + aujourd’hui + demain + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %-e/%m/%Y + d/MM/yyyy + "%s/%s/%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S %-e %b %Y + %2$s %1$s + %1$s %3$s + %-e %b %Y + %-e %B + %-B + %B %Y + %-e %b + %b + %b %Y + du %1$s au %2$s + du %2$s au %5$s + %3$s/%2$s - %8$s/%7$s + %1$s %3$s/%2$s - %6$s %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s - %6$s %8$s/%7$s/%9$s + du %5$s %1$s %3$s/%2$s/%4$s au %10$s %6$s %8$s/%7$s/%9$s + du %5$s %3$s/%2$s au %10$s %8$s/%7$s + du %5$s %1$s %3$s/%2$s au %10$s %6$s %8$s/%7$s + du %5$s %3$s/%2$s/%4$s au %10$s %8$s/%7$s/%9$s + du %3$s %1$s %2$s au %6$s %4$s %5$s + du %1$s %2$s au %4$s %5$s + du %3$s %2$s au %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + du %3$s %2$s au %8$s %7$s + du %1$s %3$s %2$s au %6$s %8$s %7$s + du %5$s %3$s %2$s au %10$s %8$s %7$s + du %5$s %3$s %2$s au %10$s %8$s %7$s + du %5$s %1$s %3$s %2$s au %10$s %6$s %8$s %7$s + du %5$s %1$s %3$s %2$s au %10$s %6$s %8$s %7$s + du %5$s %3$s %2$s %4$s au %10$s %8$s %7$s %9$s + du %5$s %3$s %2$s %4$s au %10$s %8$s %7$s %9$s + du %5$s %1$s %3$s %2$s %4$s au %10$s %6$s %8$s %7$s %9$s + du %5$s %1$s %3$s %2$s %4$s au %10$s %6$s %8$s %7$s %9$s + du %1$s %3$s %2$s %4$s au %6$s %8$s %7$s %9$s + %3$s-%8$s %2$s + du %1$s %3$s %2$s au %6$s %8$s %7$s + %3$s %2$s au %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s %3$s %2$s au %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-fr-rCA/donottranslate-cldr.xml b/core/res/res/values-fr-rCA/donottranslate-cldr.xml new file mode 100644 index 000000000000..346b97107331 --- /dev/null +++ b/core/res/res/values-fr-rCA/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + janvier + février + mars + avril + mai + juin + juillet + août + septembre + octobre + novembre + décembre + + janvier + février + mars + avril + mai + juin + juillet + août + septembre + octobre + novembre + décembre + + janv. + févr. + mars + avr. + mai + juin + juil. + août + sept. + oct. + nov. + déc. + + J + F + M + A + M + J + J + A + S + O + N + D + + dimanche + lundi + mardi + mercredi + jeudi + vendredi + samedi + + dim. + lun. + mar. + mer. + jeu. + ven. + sam. + + dim. + lun. + mar. + mer. + jeu. + ven. + sam. + + D + L + M + M + J + V + S + + matin + soir + hier + aujourd’hui + demain + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %Y-%m-%d + yyyy-MM-dd + "%s-%s-%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S %Y-%m-%d + %2$s %1$s + %1$s %3$s + %Y-%m-%d + %-e %B + %-B + %B %Y + %-e %b + %-b + %b %Y + %1$s – %2$s + %2$s – %5$s + %2$s-%3$s – %7$s-%8$s + %1$s %2$s-%3$s – %6$s %7$s-%8$s + %4$s-%2$s-%3$s – %9$s-%7$s-%8$s + du %1$s %4$s-%2$s-%3$s au %6$s %9$s-%7$s-%8$s + %5$s %1$s %4$s-%2$s-%3$s – %10$s %6$s %9$s-%7$s-%8$s + %5$s %2$s-%3$s – %10$s %7$s-%8$s + %5$s %1$s %2$s-%3$s – %10$s %6$s %7$s-%8$s + %5$s %4$s-%2$s-%3$s – %10$s %9$s-%7$s-%8$s + %3$s %1$s %2$s – %6$s %4$s %5$s + %1$s %2$s – %4$s %5$s + %3$s %2$s – %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s %2$s – %8$s %7$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s – %10$s %6$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s – %10$s %6$s %8$s %7$s %9$s + %1$s %3$s %2$s %4$s – %6$s %8$s %7$s %9$s + %3$s–%8$s %2$s + %1$s %3$s %2$s – %6$s %8$s %7$s + du %3$s %2$s au %8$s %7$s %9$s + %3$s–%8$s %2$s %9$s + du %1$s %3$s %2$s au %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-fr-rCH/donottranslate-cldr.xml b/core/res/res/values-fr-rCH/donottranslate-cldr.xml new file mode 100644 index 000000000000..48db6b8d4169 --- /dev/null +++ b/core/res/res/values-fr-rCH/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + janvier + février + mars + avril + mai + juin + juillet + août + septembre + octobre + novembre + décembre + + janvier + février + mars + avril + mai + juin + juillet + août + septembre + octobre + novembre + décembre + + janv. + févr. + mars + avr. + mai + juin + juil. + août + sept. + oct. + nov. + déc. + + J + F + M + A + M + J + J + A + S + O + N + D + + dimanche + lundi + mardi + mercredi + jeudi + vendredi + samedi + + dim. + lun. + mar. + mer. + jeu. + ven. + sam. + + dim. + lun. + mar. + mer. + jeu. + ven. + sam. + + D + L + M + M + J + V + S + + matin + soir + hier + aujourd’hui + demain + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S %-e %b %Y + %2$s %1$s + %1$s %3$s + %-e %b %Y + %-e %B + %-B + %B %Y + %-e %b + %b + %b %Y + du %1$s au %2$s + du %2$s au %5$s + %3$s.%2$s - %8$s.%7$s + %1$s, %3$s.%2$s - %6$s, %8$s.%7$s + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %1$s, %3$s.%2$s.%4$s - %6$s, %8$s.%7$s.%9$s + du %5$s %1$s, %3$s.%2$s.%4$s au %10$s %6$s, %8$s.%7$s.%9$s + du %5$s %3$s.%2$s au %10$s %8$s.%7$s + du %5$s %1$s, %3$s.%2$s au %10$s %6$s, %8$s.%7$s + du %5$s %3$s.%2$s.%4$s au %10$s %8$s.%7$s.%9$s + du %3$s %1$s, %2$s au %6$s %4$s, %5$s + du %1$s, %2$s au %4$s, %5$s + du %3$s %2$s au %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + du %3$s %2$s au %8$s %7$s + du %1$s, %3$s %2$s au %6$s, %8$s %7$s + du %5$s %3$s %2$s au %10$s %8$s %7$s + du %5$s %3$s %2$s au %10$s %8$s %7$s + du %5$s %1$s, %3$s %2$s au %10$s %6$s, %8$s %7$s + du %5$s %1$s, %3$s %2$s au %10$s %6$s, %8$s %7$s + du %5$s %3$s %2$s %4$s au %10$s %8$s %7$s %9$s + du %5$s %3$s %2$s %4$s au %10$s %8$s %7$s %9$s + du %5$s %1$s, %3$s %2$s %4$s au %10$s %6$s, %8$s %7$s %9$s + du %5$s %1$s, %3$s %2$s %4$s au %10$s %6$s, %8$s %7$s %9$s + du %1$s, %3$s %2$s %4$s au %6$s, %8$s %7$s %9$s + %3$s-%8$s %2$s + du %1$s, %3$s %2$s au %6$s, %8$s %7$s + %3$s %2$s au %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s, %3$s %2$s au %6$s, %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-fr-rFR/donottranslate-cldr.xml b/core/res/res/values-fr-rFR/donottranslate-cldr.xml new file mode 100644 index 000000000000..f340e8384116 --- /dev/null +++ b/core/res/res/values-fr-rFR/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + janvier + février + mars + avril + mai + juin + juillet + août + septembre + octobre + novembre + décembre + + janvier + février + mars + avril + mai + juin + juillet + août + septembre + octobre + novembre + décembre + + janv. + févr. + mars + avr. + mai + juin + juil. + août + sept. + oct. + nov. + déc. + + J + F + M + A + M + J + J + A + S + O + N + D + + dimanche + lundi + mardi + mercredi + jeudi + vendredi + samedi + + dim. + lun. + mar. + mer. + jeu. + ven. + sam. + + dim. + lun. + mar. + mer. + jeu. + ven. + sam. + + D + L + M + M + J + V + S + + matin + soir + hier + aujourd’hui + demain + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S %-e %b %Y + %2$s %1$s + %1$s %3$s + %-e %b %Y + %-e %B + %-B + %B %Y + %-e %b + %-b + %b %Y + %1$s – %2$s + %2$s – %5$s + %3$s/%2$s - %8$s/%7$s + %1$s %3$s/%2$s - %6$s %8$s/%7$s + %3$s/%2$s/%4$s – %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s – %6$s %8$s/%7$s/%9$s + %5$s %1$s %3$s/%2$s/%4$s – %10$s %6$s %8$s/%7$s/%9$s + %5$s %3$s/%2$s – %10$s %8$s/%7$s + %5$s %1$s %3$s/%2$s – %10$s %6$s %8$s/%7$s + %5$s %3$s/%2$s/%4$s – %10$s %8$s/%7$s/%9$s + %3$s %1$s %2$s – %6$s %4$s %5$s + %1$s %2$s – %4$s %5$s + %3$s %2$s – %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s %2$s – %8$s %7$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s – %10$s %6$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s – %10$s %6$s %8$s %7$s %9$s + %1$s %3$s %2$s %4$s – %6$s %8$s %7$s %9$s + %3$s–%8$s %2$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %3$s %2$s – %8$s %7$s %9$s + %3$s–%8$s %2$s %9$s + %1$s %3$s %2$s – %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-fr/donottranslate-cldr.xml b/core/res/res/values-fr/donottranslate-cldr.xml new file mode 100644 index 000000000000..f340e8384116 --- /dev/null +++ b/core/res/res/values-fr/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + janvier + février + mars + avril + mai + juin + juillet + août + septembre + octobre + novembre + décembre + + janvier + février + mars + avril + mai + juin + juillet + août + septembre + octobre + novembre + décembre + + janv. + févr. + mars + avr. + mai + juin + juil. + août + sept. + oct. + nov. + déc. + + J + F + M + A + M + J + J + A + S + O + N + D + + dimanche + lundi + mardi + mercredi + jeudi + vendredi + samedi + + dim. + lun. + mar. + mer. + jeu. + ven. + sam. + + dim. + lun. + mar. + mer. + jeu. + ven. + sam. + + D + L + M + M + J + V + S + + matin + soir + hier + aujourd’hui + demain + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S %-e %b %Y + %2$s %1$s + %1$s %3$s + %-e %b %Y + %-e %B + %-B + %B %Y + %-e %b + %-b + %b %Y + %1$s – %2$s + %2$s – %5$s + %3$s/%2$s - %8$s/%7$s + %1$s %3$s/%2$s - %6$s %8$s/%7$s + %3$s/%2$s/%4$s – %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s – %6$s %8$s/%7$s/%9$s + %5$s %1$s %3$s/%2$s/%4$s – %10$s %6$s %8$s/%7$s/%9$s + %5$s %3$s/%2$s – %10$s %8$s/%7$s + %5$s %1$s %3$s/%2$s – %10$s %6$s %8$s/%7$s + %5$s %3$s/%2$s/%4$s – %10$s %8$s/%7$s/%9$s + %3$s %1$s %2$s – %6$s %4$s %5$s + %1$s %2$s – %4$s %5$s + %3$s %2$s – %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s %2$s – %8$s %7$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s – %10$s %6$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s – %10$s %6$s %8$s %7$s %9$s + %1$s %3$s %2$s %4$s – %6$s %8$s %7$s %9$s + %3$s–%8$s %2$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %3$s %2$s – %8$s %7$s %9$s + %3$s–%8$s %2$s %9$s + %1$s %3$s %2$s – %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index c664d1ae8dd9..ce650c128702 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -21,6 +21,7 @@ "Go" "To" "Po" + %1$s %2$s "<sans titre>" "…" "(Aucun numéro de téléphone)" @@ -161,14 +162,10 @@ "Permet à une application de modifier la configuration actuelle (par ex. : la taille de la police générale ou des paramètres régionaux)." "Démarrage d\'autres applications" "Permet à une application de forcer le lancement d\'autres applications." - "Non-possibilité d\'interruption" - "Permet à une application d\'exécuter tout processus au premier plan afin qu\'il ne puisse pas être interrompu. Les applications normales ne devraient jamais nécessiter cette fonctionnalité." "Fermeture forcée de l\'application" "Permet à une application de forcer une autre application exécutée au premier plan à se fermer et à passer en arrière-plan. Les applications normales ne devraient jamais avoir recours à cette fonctionnalité." "Vérification de l\'état interne du système" "Permet à l\'application de récupérer l\'état interne du système. Des applications malveillantes peuvent obtenir de nombreuses informations personnelles et sécurisées auxquelles elles ne devraient pas avoir accès." - "Éditer des services à faible niveau" - "Permet à l\'application de publier ses propres services de système de niveau inférieur. Des applications malveillantes peuvent prendre le contrôle du système et subtiliser ou endommager ses données." "Contrôle du lancement des applications" "Permet à une application de suivre et de contrôler la façon dont le système lance des activités. Des applications malveillantes peuvent entièrement déstabiliser le système. Cette autorisation est uniquement nécessaire au développement et non pour l\'utilisation normale du téléphone." "Envoyer une diffusion sans paquet" @@ -181,8 +178,6 @@ "Permet à une application de contrôler le nombre de processus maximal exécutés en même temps. Les applications normales n\'ont jamais recours à cette fonctionnalité." "Fermeture de toutes les applications en tâche de fond" "Permet à une application de vérifier si des activités sont systématiquement interrompues lorsqu\'elles sont placées en tâche de fond. Cette fonctionnalité n\'est jamais utilisée par les applications normales." - "Installation des mises à jour du système" - "Permet à une application de recevoir des notifications sur des mises à jour système en cours et de lancer leur installation. Des applications malveillantes peuvent utiliser cette fonctionnalité pour endommager le système avec des mises à jour non autorisées ou interférer avec le processus de mise à jour." "Modification des statistiques de la batterie" "Autoriser la modification des statistiques de la batterie. Les applications normales n\'utilisent pas cette fonctionnalité." "Affichage de fenêtres non autorisées" @@ -418,9 +413,6 @@ "Mot de passe" "Se connecter" "Nom d\'utilisateur ou mot de passe incorrect." - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%-l%P" "%-l%p" "Effacer les notifications" @@ -452,9 +444,6 @@ "entrée" "supprimer" "Rechercher" - "Aujourd\'hui" - "Hier" - "Demain" "Il y a 1 mois" "Il y a plus d\'un mois" @@ -536,13 +525,6 @@ "semaines" "année" "années" - "dimanche" - "lundi" - "mardi" - "mercredi" - "jeudi" - "vendredi" - "samedi" "Tous les jours ouvrés (lun.- ven.)" "Tous les jours" "Toutes les semaines le %s" @@ -552,137 +534,15 @@ "Désolé, cette vidéo ne peut être lue sur cet appareil." "Désolé, impossible de lire cette vidéo." "OK" - "AM" - "PM" - "%d/%m/%Y" - "%1$s %2$s, %3$s%4$s %5$s, %6$s" - "%1$s, %2$s%4$s, %5$s" - "%2$s, %3$s%5$s, %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%1$s, %2$s, %3$s" - "%2$s, %3$s" - "%1$s, %3$s" - "%1$s, %2$s" "%1$s, %2$s" - "%1$s, %2$s" - "d' 'MMMM' 'yyyy" - "d' 'MMMM' 'yyyy" - "d' 'MMM' 'yyyy" - "d' 'MMM' 'yyyy" - "h':'mm' 'a" - "HH':'mm" "midi" "Midi" "minuit" "Minuit" - "%-d %B" - "%-d %B %Y" - "%B %Y" - "%H:%M:%S" - "%H:%M:%S %-d %B %Y" - "%3$s %2$s%8$s %7$s" - "%1$s %3$s %2$s%6$s %8$s %7$s" - "%3$s %2$s%8$s %7$s %9$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s %9$s" - "%3$s %2$s %5$s%8$s %7$s %10$s" - "%1$s, %3$s %2$s, %5$s%6$s, %8$s %7$s, %10$s" - "%3$s %2$s %4$s, %5$s%8$s %7$s %9$s, %10$s" - "%1$s, %3$s %2$s %4$s, %5$s%6$s, %8$s %7$s %9$s, %10$s" - "%3$s/%2$s%8$s/%7$s" - "%1$s %3$s/%2$s%6$s %8$s/%7$s" - "%3$s/%2$s/%4$s%8$s/%7$s/%9$s" - "%1$s, %3$s/%2$s/%4$s%6$s, %8$s/%7$s/%9$s" - "%3$s/%2$s %5$s%8$s/%7$s %10$s" - "%1$s, %3$s/%2$s, %5$s%6$s, %8$s/%7$s, %10$s" - "%3$s/%2$s/%4$s, %5$s%8$s/%7$s/%9$s, %10$s" - "%1$s %3$s/%2$s/%4$s, %5$s%6$s %8$s/%7$s/%9$s, %10$s" - "%3$s%8$s %2$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s" - "%3$s%8$s %2$s %9$s" - "%1$s %3$s %2$s %4$s%6$s %8$s %7$s %9$s" - "%3$s %2$s %5$s%8$s %7$s %10$s" - "%1$s, %3$s %2$s, %5$s%6$s, %8$s %7$s, %10$s" - "%3$s %2$s %4$s, %5$s%8$s %7$s %9$s, %10$s" - "%1$s %3$s %2$s %4$s, %5$s%6$s %8$s %7$s %9$s, %10$s" - "%-d %b %Y" - "%b %Y" - "%b %-d" - "dimanche" - "lundi" - "mardi" - "mercredi" - "jeudi" - "vendredi" - "samedi" - "dim." - "Lun" - "Mar" - "Mer" - "Jeu" - "Ven" - "Sam" - "Dim" - "Lun" - "Mar" - "Mer" - "Jeu" - "Ven" - "Sam" - "Dim" - "Lun" - "Mar" - "Mer" - "Jeu" - "Ven" - "sam." - "Dim" - "Lun" - "Mar" - "Mer" - "Jeu" - "Ven" - "Sam" - "janvier" - "février" - "mars" - "avril" - "mai" - "juin" - "juillet" - "août" - "septembre" - "octobre" - "novembre" - "décembre" - "janv." - "févr." - "mars" - "avr." - "mai" - "juin" - "juil." - "août" - "sept." - "oct." - "nov." - "déc." - "jan." - "Ven" - "mars" - "avr." - "mai" - "juin" - "juil." - "août" - "sept." - "oct." - "nov." - "déc." "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "Tout sélectionner" diff --git a/core/res/res/values-he-rIL/donottranslate-cldr.xml b/core/res/res/values-he-rIL/donottranslate-cldr.xml new file mode 100644 index 000000000000..e3feb1e33146 --- /dev/null +++ b/core/res/res/values-he-rIL/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + ינואר + פברואר + מרס + אפריל + מאי + יוני + יולי + אוגוסט + ספטמבר + אוקטובר + נובמבר + דצמבר + + ינואר + פברואר + מרס + אפריל + מאי + יוני + יולי + אוגוסט + ספטמבר + אוקטובר + נובמבר + דצמבר + + ינו + פבר + מרס + אפר + מאי + יונ + יול + אוג + ספט + אוק + נוב + דצמ + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + יום ראשון + יום שני + יום שלישי + יום רביעי + יום חמישי + יום שישי + יום שבת + + יום א' + יום ב' + יום ג' + יום ד' + יום ה' + יום ו' + שבת + + יום א' + יום ב' + יום ג' + יום ד' + יום ה' + יום ו' + שבת + + א + ב + ג + ד + ה + ו + ש + + לפנה"צ + אחה"צ + אתמול + היום + מחר + + %-k:%M + %-l:%M %p + %-l:%M %p + h:mm a + H:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e ב%B %Y + %H:%M:%S + %H:%M:%S %-e.%-m.%Y + %2$s %1$s + %1$s %3$s + %-e.%-m.%Y + %-e ב%B + %-B + %B %Y + %b %-e + %-b + %Y %b + %1$s – %2$s + %2$s – %5$s + %3$s/%2$s - %8$s/%7$s + %1$s %3$s/%2$s - %6$s %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s - %6$s %8$s/%7$s/%9$s + %5$s %1$s, %3$s.%2$s.%4$s – %10$s %6$s, %8$s.%7$s.%9$s + %5$s %3$s/%2$s – %10$s %8$s/%7$s + %5$s %1$s, %2$s-%3$s – %10$s %6$s, %7$s-%8$s + %5$s %3$s/%2$s/%4$s – %10$s %8$s/%7$s/%9$s + %3$s %1$s %2$s – %6$s %4$s %5$s + %1$s %2$s – %4$s %5$s + %3$s %2$s – %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s ב%2$s – %8$s ב%7$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %5$s %3$s ב%2$s – %10$s %8$s ב%7$s + %5$s %3$s ב%2$s – %10$s %8$s ב%7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %1$s, %4$s %2$s %3$s – %10$s %6$s, %9$s %7$s %8$s + %5$s %1$s, %4$s %2$s %3$s – %10$s %6$s, %9$s %7$s %8$s + %1$s, %4$s %2$s %3$s – %6$s, %9$s %7$s %8$s + %3$s-%8$s %2$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s %3$s %2$s - %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-hi-rIN/donottranslate-cldr.xml b/core/res/res/values-hi-rIN/donottranslate-cldr.xml new file mode 100644 index 000000000000..2a19da4c482c --- /dev/null +++ b/core/res/res/values-hi-rIN/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + जनवरी + फरवरी + मार्च + अप्रैल + मई + जून + जुलाई + अगस्त + सितम्बर + अक्तूबर + नवम्बर + दिसम्बर + + जनवरी + फरवरी + मार्च + अप्रैल + मई + जून + जुलाई + अगस्त + सितम्बर + अक्तूबर + नवम्बर + दिसम्बर + + जनवरी + फरवरी + मार्च + अप्रैल + मई + जून + जुलाई + अगस्त + सितम्बर + अक्तूबर + नवम्बर + दिसम्बर + + + फ़ + मा + + + जू + जु + + सि + + + दि + + रविवार + सोमवार + मंगलवार + बुधवार + गुरुवार + शुक्रवार + शनिवार + + रवि + सोम + मंगल + बुध + गुरु + शुक्र + शनि + + रवि + सोम + मंगल + बुध + गुरु + शुक्र + शनि + + + सो + मं + बु + गु + शु + + + AM + PM + Yesterday + Today + Tomorrow + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %-e-%-m-%Y + d-M-yyyy + "%s-%s-%s" + %-e %B %Y + %-l:%M:%S %p + %-l:%M:%S %p %d-%m-%Y + %2$s %1$s + %1$s %3$s + %d-%m-%Y + %-e %B + %-B + %B %Y + %-e %b + %-b + %b %Y + %1$s – %2$s + %2$s – %5$s + %2$s-%3$s – %7$s-%8$s + %1$s, %2$s-%3$s – %6$s, %7$s-%8$s + %4$s-%2$s-%3$s – %9$s-%7$s-%8$s + %1$s, %4$s-%2$s-%3$s – %6$s, %9$s-%7$s-%8$s + %5$s %1$s, %4$s-%2$s-%3$s – %10$s %6$s, %9$s-%7$s-%8$s + %5$s %3$s/%2$s – %10$s %8$s/%7$s + %5$s %1$s, %3$s/%2$s – %10$s %6$s, %8$s/%7$s + %5$s %3$s-%2$s-%4$s – %10$s %8$s-%7$s-%9$s + %3$s %1$s, %2$s – %6$s %4$s, %5$s + %1$s, %2$s – %4$s, %5$s + %3$s %2$s – %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s %2$s – %8$s %7$s + %1$s, %3$s %2$s – %6$s, %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %1$s, %3$s %2$s – %10$s %6$s, %8$s %7$s + %5$s %1$s, %3$s %2$s – %10$s %6$s, %8$s %7$s + %5$s %4$s-%2$s-%3$s – %10$s %9$s-%7$s-%8$s + %5$s %4$s-%2$s-%3$s – %10$s %9$s-%7$s-%8$s + %5$s %1$s, %3$s %2$s %4$s – %10$s %6$s, %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s – %10$s %6$s, %8$s %7$s %9$s + %1$s, %3$s %2$s %4$s – %6$s, %8$s %7$s %9$s + %2$s-%3$s – %8$s + %1$s, %3$s %2$s – %6$s, %8$s %7$s + %9$s-%2$s-%3$s – %7$s-%8$s + %9$s-%2$s-%3$s – %8$s + %1$s, %9$s-%2$s-%3$s – %6$s, yyyy-%7$s-%8$s + %b + diff --git a/core/res/res/values-hu-rHU/donottranslate-cldr.xml b/core/res/res/values-hu-rHU/donottranslate-cldr.xml new file mode 100644 index 000000000000..08a70b81f7b4 --- /dev/null +++ b/core/res/res/values-hu-rHU/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + január + február + március + április + május + június + július + augusztus + szeptember + október + november + december + + január + február + március + április + május + június + július + augusztus + szeptember + október + november + december + + jan. + febr. + márc. + ápr. + máj. + jún. + júl. + aug. + szept. + okt. + nov. + dec. + + J + F + M + Á + M + J + J + A + S + O + N + D + + vasárnap + hétfő + kedd + szerda + csütörtök + péntek + szombat + + V + H + K + Sze + Cs + P + Szo + + V + H + K + Sze + Cs + P + Szo + + V + H + K + S + C + P + S + + de. + du. + tegnap + ma + holnap + + %H:%M + %-l:%M %p + %-l:%M %^p + h:mm a + HH:mm + %Y.%m.%d. + yyyy.MM.dd. + "%s.%s.%s." + %Y. %B %-e. + %-k:%M:%S + %-k:%M:%S %Y.%m.%d. + %2$s %1$s + %1$s %3$s + %Y.%m.%d. + %B %-e. + %-B + %Y. %B + %b %-e. + %-b + %Y. %b + %1$s - %2$s + %2$s - %5$s + %2$s.%3$s. - %7$s.%8$s. + %2$s.%3$s., %1$s - %7$s.%8$s., %6$s + %4$s.%2$s.%3$s. - %9$s.%7$s.%8$s. + %4$s.%2$s.%3$s., %1$s - %9$s.%7$s.%8$s., %6$s + %5$s %4$s.%2$s.%3$s., %1$s - %10$s %9$s.%7$s.%8$s., %6$s + %5$s %2$s. %3$s. - %10$s %7$s. %8$s. + %5$s %2$s. %3$s., %1$s - %10$s %7$s. %8$s., %6$s + %5$s %4$s.%2$s.%3$s. - %10$s %9$s.%7$s.%8$s. + %3$s %2$s, %1$s - %6$s %5$s, %4$s + %2$s, %1$s - %5$s, %4$s + %3$s %2$s - %6$s %5$s + %1$s %3$s, %2$s + %3$s, %2$s + %1$s %2$s + %2$s %3$s. - %7$s %8$s. + %2$s %3$s., %1$s - %7$s %8$s., %6$s + %5$s %2$s %3$s. - %10$s %7$s %8$s. + %5$s %2$s %3$s. - %10$s %7$s %8$s. + %5$s %2$s %3$s., %1$s - %10$s %7$s %8$s., %6$s + %5$s %2$s %3$s., %1$s - %10$s %7$s %8$s., %6$s + %5$s %4$s. %2$s %3$s. - %10$s %9$s. %7$s %8$s. + %5$s %4$s. %2$s %3$s. - %10$s %9$s. %7$s %8$s. + %5$s %4$s. %2$s %3$s., %1$s - %10$s %9$s. %7$s %8$s., %6$s + %5$s %4$s. %2$s %3$s., %1$s - %10$s %9$s. %7$s %8$s., %6$s + %4$s. %2$s %3$s., %1$s - %9$s. %7$s %8$s., %6$s + %2$s %3$s-%8$s. + %2$s %3$s., %1$s - %7$s %8$s., %6$s + %9$s. %2$s %3$s. - %7$s %8$s. + %9$s. %2$s %3$s-%8$s. + %9$s. %2$s %3$s., %1$s - %7$s %8$s., %6$s + %b + diff --git a/core/res/res/values-id-rID/donottranslate-cldr.xml b/core/res/res/values-id-rID/donottranslate-cldr.xml new file mode 100644 index 000000000000..6adec84b8ab8 --- /dev/null +++ b/core/res/res/values-id-rID/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Januari + Februari + Maret + April + Mei + Juni + Juli + Agustus + September + Oktober + November + Desember + + Januari + Februari + Maret + April + Mei + Juni + Juli + Agustus + September + Oktober + November + Desember + + Jan + Feb + Mar + Apr + Mei + Jun + Jul + Agu + Sep + Okt + Nov + Des + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + Minggu + Senin + Selasa + Rabu + Kamis + Jumat + Sabtu + + Min + Sen + Sel + Rab + Kam + Jum + Sab + + Min + Sen + Sel + Rab + Kam + Jum + Sab + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + + AM + PM + Yesterday + Today + Tomorrow + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S %-e %b %Y + %2$s %1$s + %1$s %3$s + %-e %b %Y + %B %-e + %-B + %B %Y + %b %-e + %-b + %Y %b + %1$s – %2$s + %2$s – %5$s + %2$s-%3$s – %7$s-%8$s + %1$s, %2$s-%3$s – %6$s, %7$s-%8$s + %4$s-%2$s-%3$s – %9$s-%7$s-%8$s + %1$s, %4$s-%2$s-%3$s – %6$s, %9$s-%7$s-%8$s + %5$s %1$s, %4$s-%2$s-%3$s – %10$s %6$s, %9$s-%7$s-%8$s + %5$s %2$s-%3$s – %10$s %7$s-%8$s + %5$s %1$s, %2$s-%3$s – %10$s %6$s, %7$s-%8$s + %5$s %3$s/%2$s/%4$s – %10$s %8$s/%7$s/%9$s + %3$s %1$s %2$s – %6$s %4$s %5$s + %1$s %2$s – %4$s %5$s + %3$s %2$s – %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %2$s %3$s – %7$s %8$s + %1$s %2$s %3$s – %6$s %7$s %8$s + %5$s %2$s %3$s – %10$s %7$s %8$s + %5$s %2$s %3$s – %10$s %7$s %8$s + %5$s %1$s %2$s %3$s – %10$s %6$s %7$s %8$s + %5$s %1$s %2$s %3$s – %10$s %6$s %7$s %8$s + %5$s %4$s-%2$s-%3$s – %10$s %9$s-%7$s-%8$s + %5$s %4$s-%2$s-%3$s – %10$s %9$s-%7$s-%8$s + %5$s %1$s, %4$s %2$s %3$s – %10$s %6$s, %9$s %7$s %8$s + %5$s %1$s, %4$s %2$s %3$s – %10$s %6$s, %9$s %7$s %8$s + %1$s, %4$s %2$s %3$s – %6$s, %9$s %7$s %8$s + %2$s-%3$s – %8$s + %1$s %2$s %3$s – %6$s %7$s %8$s + %9$s-%2$s-%3$s – %7$s-%8$s + %9$s-%2$s-%3$s – %8$s + %1$s, %9$s-%2$s-%3$s – %6$s, yyyy-%7$s-%8$s + %b + diff --git a/core/res/res/values-it-rCH/donottranslate-cldr.xml b/core/res/res/values-it-rCH/donottranslate-cldr.xml new file mode 100644 index 000000000000..12170d6c4159 --- /dev/null +++ b/core/res/res/values-it-rCH/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Gennaio + Febbraio + Marzo + Aprile + Maggio + Giugno + Luglio + Agosto + Settembre + Ottobre + Novembre + Dicembre + + gennaio + febbraio + marzo + aprile + maggio + giugno + luglio + agosto + settembre + ottobre + novembre + dicembre + + gen + feb + mar + apr + mag + giu + lug + ago + set + ott + nov + dic + + G + F + M + A + M + G + L + A + S + O + N + D + + domenica + lunedì + martedì + mercoledì + giovedì + venerdì + sabato + + dom + lun + mar + mer + gio + ven + sab + + dom + lun + mar + mer + gio + ven + sab + + D + L + M + M + G + V + S + + m. + p. + ieri + oggi + domani + + %H:%M + %-l:%M %p + %-l:%M %^p + h:mm a + HH:mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %-e %B %Y + %H.%M.%S + %H.%M.%S %-e-%b-%Y + %2$s %1$s + %1$s %3$s + %-e-%b-%Y + %-e %B + %-B + %B %Y + %-e %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s - %8$s.%7$s + %1$s, %3$s.%2$s - %6$s, %8$s.%7$s + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %1$s, %3$s.%2$s.%4$s - %6$s, %8$s.%7$s.%9$s + %5$s %1$s, %3$s.%2$s.%4$s - %10$s %6$s, %8$s.%7$s.%9$s + %5$s %3$s.%2$s - %10$s %8$s.%7$s + %5$s %1$s, %3$s.%2$s - %10$s %6$s, %8$s.%7$s + %5$s %3$s.%2$s.%4$s - %10$s %8$s.%7$s.%9$s + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %1$s, %3$s %2$s - %10$s %6$s, %8$s %7$s + %5$s %1$s, %3$s %2$s - %10$s %6$s, %8$s %7$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %1$s, %3$s %2$s %4$s - %6$s, %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-it-rIT/donottranslate-cldr.xml b/core/res/res/values-it-rIT/donottranslate-cldr.xml new file mode 100644 index 000000000000..2178bbea2481 --- /dev/null +++ b/core/res/res/values-it-rIT/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Gennaio + Febbraio + Marzo + Aprile + Maggio + Giugno + Luglio + Agosto + Settembre + Ottobre + Novembre + Dicembre + + gennaio + febbraio + marzo + aprile + maggio + giugno + luglio + agosto + settembre + ottobre + novembre + dicembre + + gen + feb + mar + apr + mag + giu + lug + ago + set + ott + nov + dic + + G + F + M + A + M + G + L + A + S + O + N + D + + domenica + lunedì + martedì + mercoledì + giovedì + venerdì + sabato + + dom + lun + mar + mer + gio + ven + sab + + dom + lun + mar + mer + gio + ven + sab + + D + L + M + M + G + V + S + + m. + p. + ieri + oggi + domani + + %H:%M + %-l:%M %p + %-l:%M %^p + h:mm a + HH:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %d %B %Y + %H.%M.%S + %H.%M.%S %d/%b/%Y + %2$s %1$s + %1$s %3$s + %d/%b/%Y + %-e %B + %-B + %B %Y + %-e %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s %3$s/%2$s - %6$s %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s - %6$s %8$s/%7$s/%9$s + %5$s %1$s, %3$s/%2$s/%4$s - %10$s %6$s, %8$s/%7$s/%9$s + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %1$s %3$s/%2$s - %10$s %6$s %8$s/%7$s + %5$s %3$s/%2$s/%4$s - %10$s %8$s/%7$s/%9$s + %3$s %1$s %2$s - %6$s %4$s %5$s + %1$s %2$s - %4$s %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s - %10$s %6$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s - %10$s %6$s %8$s %7$s %9$s + %1$s %3$s %2$s %4$s - %6$s %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s %3$s %2$s - %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-it/donottranslate-cldr.xml b/core/res/res/values-it/donottranslate-cldr.xml new file mode 100644 index 000000000000..2178bbea2481 --- /dev/null +++ b/core/res/res/values-it/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Gennaio + Febbraio + Marzo + Aprile + Maggio + Giugno + Luglio + Agosto + Settembre + Ottobre + Novembre + Dicembre + + gennaio + febbraio + marzo + aprile + maggio + giugno + luglio + agosto + settembre + ottobre + novembre + dicembre + + gen + feb + mar + apr + mag + giu + lug + ago + set + ott + nov + dic + + G + F + M + A + M + G + L + A + S + O + N + D + + domenica + lunedì + martedì + mercoledì + giovedì + venerdì + sabato + + dom + lun + mar + mer + gio + ven + sab + + dom + lun + mar + mer + gio + ven + sab + + D + L + M + M + G + V + S + + m. + p. + ieri + oggi + domani + + %H:%M + %-l:%M %p + %-l:%M %^p + h:mm a + HH:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %d %B %Y + %H.%M.%S + %H.%M.%S %d/%b/%Y + %2$s %1$s + %1$s %3$s + %d/%b/%Y + %-e %B + %-B + %B %Y + %-e %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s %3$s/%2$s - %6$s %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s - %6$s %8$s/%7$s/%9$s + %5$s %1$s, %3$s/%2$s/%4$s - %10$s %6$s, %8$s/%7$s/%9$s + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %1$s %3$s/%2$s - %10$s %6$s %8$s/%7$s + %5$s %3$s/%2$s/%4$s - %10$s %8$s/%7$s/%9$s + %3$s %1$s %2$s - %6$s %4$s %5$s + %1$s %2$s - %4$s %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s - %10$s %6$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s - %10$s %6$s %8$s %7$s %9$s + %1$s %3$s %2$s %4$s - %6$s %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s %3$s %2$s - %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index f80a4f4cd156..5bfbc4943143 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -161,14 +161,10 @@ "Consente a un\'applicazione di modificare la configurazione corrente, come le dimensioni dei caratteri locali o complessive." "riavvio altre applicazioni" "Consente a un\'applicazione di riavviare forzatamente altre applicazioni." - "impedire l\'interruzione" - "Consente a un\'applicazione di eseguire i processi in primo piano in modo che non possano essere interrotti. Non dovrebbe essere mai necessario per le normali applicazioni." "chiusura forzata dell\'applicazione" "Consente a un\'applicazione di forzare la chiusura di attività in primo piano. Non dovrebbe essere mai necessario per le normali applicazioni." "recupero stato interno del sistema" "Consente all\'applicazione di recuperare lo stato interno del sistema. Le applicazioni dannose potrebbero recuperare molte informazioni riservate e protette di cui non dovrebbero avere mai bisogno." - "pubblicaz. servizi di basso livello" - "Consente a un\'applicazione di pubblicare i suoi servizi di sistema di basso livello. Le applicazioni dannose potrebbero assumere il controllo del sistema e impossessarsi di dati o danneggiarli." "monitoraggio e controllo avvio applicazioni" "Consente a un\'applicazione di monitorare e controllare la modalità di avvio delle attività nel sistema. Le applicazioni dannose potrebbero compromettere totalmente il sistema. Questa autorizzazione è necessaria soltanto per lo sviluppo, mai per il normale utilizzo del telefono." "invio broadcast rimossi dal pacchetto" @@ -181,8 +177,6 @@ "Consente a un\'applicazione di stabilire il numero massimo di processi in esecuzione. Mai necessario per le normali applicazioni." "chiusura applicazioni in background" "Consente a un\'applicazione di controllare se le attività sono sempre completate quando vengono messe in secondo piano. Mai necessario per le normali applicazioni." - "installazione autom. aggiornamenti di sistema" - "Consente a un\'applicazione di ricevere notifiche sugli aggiornamenti del sistema in sospeso e di attivarne l\'installazione. Le applicazioni dannose possono sfruttare questa possibilità per danneggiare il sistema con aggiornamenti non autorizzati, o interferire con il processo di aggiornamento." "modifica statistiche batteria" "Consente la modifica delle statistiche sulla batteria raccolte. Da non usare per normali applicazioni." "visualizzazione finestre non autorizzate" @@ -418,9 +412,6 @@ "Password" "Accedi" "Password o nome utente non valido." - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%-l%P" "%-l%p" "Cancella notifiche" @@ -452,9 +443,6 @@ "Invio" "Canc" "Cerca" - "Oggi" - "Ieri" - "Domani" "1 mese fa" "Oltre 1 mese fa" @@ -536,13 +524,6 @@ "settimane" "anno" "anni" - "Domenica" - "Lunedì" - "Martedì" - "Mercoledì" - "Giovedì" - "Venerdì" - "Sabato" "Ogni giorno feriale (lun-ven)" "Quotidianamente" "Ogni settimana il %s" @@ -552,137 +533,15 @@ "Spiacenti, questo video non è valido per lo streaming su questo dispositivo." "Spiacenti. Impossibile riprodurre il video." "OK" - "AM" - "PM" - "%d/%m/%Y" - "%1$s, %2$s, %3$s%4$s, %5$s, %6$s" - "%1$s, %2$s%4$s, %5$s" - "%2$s, %3$s%5$s, %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%1$s, %2$s, %3$s" - "%2$s, %3$s" - "%1$s, %3$s" - "%1$s, %2$s" "%1$s, %2$s" - "%1$s, %2$s" - "MMMM' 'd', 'yyyy" - "d' 'MMMM' 'yyyy" - "MMM' 'd', 'yyyy" - "d' 'MMM' 'yyyy" - "h':'mm' 'a" - "HH':'mm" "mezzogiorno" "Mezzogiorno" "mezzanotte" "Mezzanotte" - "%-d %B" - "%B %-d, %Y" - "%B %Y" - "%H:%M:%S" - "%H:%M:%S %-d %B, %Y" - "%3$s %2$s%8$s %7$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s" - "%3$s %2$s%8$s %7$s, %9$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s, %9$s" - "%3$s %2$s, %5$s%8$s %7$s, %10$s" - "%1$s, %3$s %2$s, %5$s%6$s, %8$s %7$s, %10$s" - "%3$s %2$s, %4$s, %5$s%8$s %7$s, %9$s, %10$s" - "%1$s, %3$s %2$s %4$s, %5$s%6$s, %8$s %7$s %9$s, %10$s" - "%3$s/%2$s%8$s/%7$s" - "%1$s, %3$s/%2$s%6$s, %8$s/%7$s" - "%3$s/%2$s/%4$s%8$s/%7$s/%9$s" - "%1$s, %3$s/%2$s/%4$s%6$s, %8$s/%7$s/%9$s" - "%3$s/%2$s, %5$s%8$s/%7$s, %10$s" - "%1$s, %3$s/%2$s, %5$s%6$s, %8$s/%7$s, %10$s" - "%3$s/%2$s/%4$s, %5$s%8$s/%7$s/%9$s, %10$s" - "%1$s, %3$s/%2$s/%4$s, %5$s%6$s, %8$s/%7$s/%9$s, %10$s" - "%3$s%8$s %2$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s" - "%3$s%8$s %2$s, %9$s" - "%1$s, %3$s %2$s, %4$s%6$s, %8$s %7$s, %9$s" - "%3$s %2$s, %5$s%8$s %7$s, %10$s" - "%1$s, %3$s %2$s, %5$s%6$s, %8$s %7$s, %10$s" - "%3$s %2$s %4$s, %5$s%8$s %7$s %9$s, %10$s" - "%1$s, %3$s %2$s, %4$s, %5$s%6$s, %8$s %7$s, %9$s, %10$s" - "%-d %b, %Y" - "%b %Y" - "%-d %b" - "Domenica" - "Lunedì" - "Martedì" - "Mercoledì" - "Giovedì" - "Venerdì" - "Sabato" - "Dom" - "Lun" - "Mar" - "Mer" - "Gio" - "Ven" - "Sab" - "Do" - "Lu" - "Ma" - "Me" - "Gi" - "Ve" - "Sa" - "Do" - "Lu" - "Ma" - "Me" - "Gi" - "V" - "Sa" - "D" - "Lun" - "M" - "Me" - "G" - "V" - "Sa" - "Gennaio" - "Febbraio" - "Marzo" - "Aprile" - "Maggio" - "Giugno" - "Luglio" - "Agosto" - "Settembre" - "Ottobre" - "Novembre" - "Dicembre" - "Gen" - "Feb" - "Mar" - "Apr" - "Mag" - "Giu" - "Lug" - "Ago" - "Set" - "Ott" - "Nov" - "Dic" - "G" - "F" - "M" - "Ap" - "Mag" - "Gi" - "Lug" - "Ago" - "Set" - "O" - "N" - "Di" "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "Seleziona tutto" diff --git a/core/res/res/values-ja-rJP/donottranslate-cldr.xml b/core/res/res/values-ja-rJP/donottranslate-cldr.xml new file mode 100644 index 000000000000..d2510f60132a --- /dev/null +++ b/core/res/res/values-ja-rJP/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + 日曜日 + 月曜日 + 火曜日 + 水曜日 + 木曜日 + 金曜日 + 土曜日 + + + + + + + + + + + + + + + + + + + + + + + + + + 午前 + 午後 + 昨日 + 今日 + 明日 + + %-k:%M + %p%-l:%M + %p%-l:%M + ah:mm + H:mm + %Y/%m/%d + yyyy/MM/dd + "%s/%s/%s" + %Y年%-m月%-e日 + %-k:%M:%S + %-k:%M:%S %Y/%m/%d + %2$s %1$s + %1$s %3$s + %Y/%m/%d + %-m月%-e日 + %-B + %Y年%-m月 + %-m月%-e日 + %-b + %Y年%-m月 + %1$s~%2$s + %2$s~%5$s + %2$s/%3$s~%7$s/%8$s + %2$s/%3$s(%1$s)~%7$s/%8$s(%6$s) + %4$s/%2$s/%3$s~%9$s/%7$s/%8$s + %4$s/%2$s/%3$s(%1$s)~%9$s/%7$s/%8$s(%6$s) + %5$s %4$s/%2$s/%3$s(%1$s)~%10$s %9$s/%7$s/%8$s(%6$s) + %5$s %2$s/%3$s~%10$s %7$s/%8$s + %5$s %2$s/%3$s(%1$s)~%10$s %7$s/%8$s(%6$s) + %5$s %4$s/%2$s/%3$s~%10$s %9$s/%7$s/%8$s + %3$s %2$s(%1$s)~%6$s %5$s(%4$s) + %2$s(%1$s)~%5$s(%4$s) + %3$s %2$s~%6$s %5$s + %1$s %3$s(%2$s) + %3$s(%2$s) + %1$s %2$s + %2$s%3$s日~%7$s%8$s日 + %2$s%3$s日(%1$s)~%7$s%8$s日(%6$s) + %5$s %2$s%3$s日~%10$s %7$s%8$s日 + %5$s %2$s%3$s日~%10$s %7$s%8$s日 + %5$s %2$s%3$s日(%1$s)~%10$s %7$s%8$s日(%6$s) + %5$s %2$s%3$s日(%1$s)~%10$s %7$s%8$s日(%6$s) + %5$s %4$s年%2$s%3$s日~%10$s %9$s年%7$s%8$s日 + %5$s %4$s年%2$s%3$s日~%10$s %9$s年%7$s%8$s日 + %5$s %4$s年%2$s%3$s日(%1$s)~%10$s %9$s年%7$s%8$s日(%6$s) + %5$s %4$s年%2$s%3$s日(%1$s)~%10$s %9$s年%7$s%8$s日(%6$s) + %4$s年%2$s%3$s日(%1$s)~%9$s年%7$s%8$s日(%6$s) + %2$s%3$s日~%8$s日 + %2$s%3$s日(%1$s)~%7$s%8$s日(%6$s) + %9$s年%2$s%3$s日~%7$s%8$s日 + %9$s年%2$s%3$s日~%8$s日 + %9$s年%2$s%3$s日(%1$s)~%7$s%8$s日(%6$s) + %b + diff --git a/core/res/res/values-ja/donottranslate-cldr.xml b/core/res/res/values-ja/donottranslate-cldr.xml new file mode 100644 index 000000000000..d2510f60132a --- /dev/null +++ b/core/res/res/values-ja/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + 日曜日 + 月曜日 + 火曜日 + 水曜日 + 木曜日 + 金曜日 + 土曜日 + + + + + + + + + + + + + + + + + + + + + + + + + + 午前 + 午後 + 昨日 + 今日 + 明日 + + %-k:%M + %p%-l:%M + %p%-l:%M + ah:mm + H:mm + %Y/%m/%d + yyyy/MM/dd + "%s/%s/%s" + %Y年%-m月%-e日 + %-k:%M:%S + %-k:%M:%S %Y/%m/%d + %2$s %1$s + %1$s %3$s + %Y/%m/%d + %-m月%-e日 + %-B + %Y年%-m月 + %-m月%-e日 + %-b + %Y年%-m月 + %1$s~%2$s + %2$s~%5$s + %2$s/%3$s~%7$s/%8$s + %2$s/%3$s(%1$s)~%7$s/%8$s(%6$s) + %4$s/%2$s/%3$s~%9$s/%7$s/%8$s + %4$s/%2$s/%3$s(%1$s)~%9$s/%7$s/%8$s(%6$s) + %5$s %4$s/%2$s/%3$s(%1$s)~%10$s %9$s/%7$s/%8$s(%6$s) + %5$s %2$s/%3$s~%10$s %7$s/%8$s + %5$s %2$s/%3$s(%1$s)~%10$s %7$s/%8$s(%6$s) + %5$s %4$s/%2$s/%3$s~%10$s %9$s/%7$s/%8$s + %3$s %2$s(%1$s)~%6$s %5$s(%4$s) + %2$s(%1$s)~%5$s(%4$s) + %3$s %2$s~%6$s %5$s + %1$s %3$s(%2$s) + %3$s(%2$s) + %1$s %2$s + %2$s%3$s日~%7$s%8$s日 + %2$s%3$s日(%1$s)~%7$s%8$s日(%6$s) + %5$s %2$s%3$s日~%10$s %7$s%8$s日 + %5$s %2$s%3$s日~%10$s %7$s%8$s日 + %5$s %2$s%3$s日(%1$s)~%10$s %7$s%8$s日(%6$s) + %5$s %2$s%3$s日(%1$s)~%10$s %7$s%8$s日(%6$s) + %5$s %4$s年%2$s%3$s日~%10$s %9$s年%7$s%8$s日 + %5$s %4$s年%2$s%3$s日~%10$s %9$s年%7$s%8$s日 + %5$s %4$s年%2$s%3$s日(%1$s)~%10$s %9$s年%7$s%8$s日(%6$s) + %5$s %4$s年%2$s%3$s日(%1$s)~%10$s %9$s年%7$s%8$s日(%6$s) + %4$s年%2$s%3$s日(%1$s)~%9$s年%7$s%8$s日(%6$s) + %2$s%3$s日~%8$s日 + %2$s%3$s日(%1$s)~%7$s%8$s日(%6$s) + %9$s年%2$s%3$s日~%7$s%8$s日 + %9$s年%2$s%3$s日~%8$s日 + %9$s年%2$s%3$s日(%1$s)~%7$s%8$s日(%6$s) + %b + diff --git a/core/res/res/values-ja/donottranslate.xml b/core/res/res/values-ja/donottranslate.xml new file mode 100644 index 000000000000..f7c3566f644c --- /dev/null +++ b/core/res/res/values-ja/donottranslate.xml @@ -0,0 +1,23 @@ + + + + + Shift_JIS + diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 8da040e410f6..a2e3e51846c4 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -161,14 +161,10 @@ "地域/言語やフォントのサイズなど、現在の設定の変更をアプリケーションに許可します。" "他のアプリケーションの再起動" "他のアプリケーションの強制的な再起動をアプリケーションに許可します。" - "停止の阻止" - "フォアグラウンドでプロセスを実行して、強制終了できないようにすることをアプリケーションに許可します。通常のアプリケーションではまったく必要ありません。" "アプリケーションの強制終了" "フォアグラウンドで実行されている操作を強制終了して戻ることをアプリケーションに許可します。通常のアプリケーションではまったく必要ありません。" "システムの内部状態の取得" "システムの内部状態の取得をアプリケーションに許可します。悪意のあるアプリケーションが、通常は必要としない広範囲にわたる非公開の機密情報を取得する恐れがあります。" - "低レベルサービスの公開" - "独自の低レベルのシステムサービスを公開することをアプリケーションに許可します。悪意のあるアプリケーションがシステムを乗っ取って、データの盗用や破壊をする恐れがあります。" "起動中のすべてのアプリケーションの監視と制御" "システムが起動する操作の監視と制御をアプリケーションに許可します。悪意のあるアプリケーションがシステムを完全に破壊する恐れがあります。この許可は開発にのみ必要で、携帯電話の通常の使用にはまったく必要ありません。" "パッケージ削除ブロードキャストの送信" @@ -181,8 +177,6 @@ "実行するプロセス数の上限の制御をアプリケーションに許可します。通常のアプリケーションにはまったく必要ありません。" "バックグラウンドアプリケーションをすべて終了する" "バックグラウンドになり次第必ず操作を終了させるかどうかの制御をアプリケーションに許可します。通常のアプリケーションではまったく必要ありません。" - "システムアップデートの自動インストール" - "保留中のシステムアップデートに関する通知の受信とインストールの開始をアプリケーションに許可します。悪意のあるアプリケーションが許可なく更新を行ってシステムを破壊したり、更新処理を妨害する恐れがあります。" "電池統計情報の変国" "収集した電池統計情報の変更を許可します。通常のアプリケーションでは使用しません。" "未許可のウィンドウの表示" @@ -418,9 +412,6 @@ "パスワード" "ログイン" "ユーザー名またはパスワードが正しくありません。" - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%-l%P" "%-l%p" "通知を消去" @@ -452,9 +443,6 @@ "Enter" "Del" "検索" - "今日" - "昨日" - "明日" "1か月前" "1か月前" @@ -536,13 +524,6 @@ "週間" "年" "年" - "日曜日" - "月曜日" - "火曜日" - "水曜日" - "木曜日" - "金曜日" - "土曜日" "平日(月~金)" "毎日" "毎週%s" @@ -552,137 +533,15 @@ "この動画はご使用の端末でストリーミングできません。" "この動画は再生できません。" "OK" - "AM" - "PM" - "%Y/%m/%d" - "%2$s%1$s%3$s%5$s%4$s%6$s" - "%2$s%1$s%5$s%4$s" - "%2$s %3$s%5$s %6$s" - "%2$s%5$s" - "%1$s - %2$s" - "%3$s%2$s%1$s" - "%3$s%2$s" - "%3$s%1$s" - "%1$s %2$s" "%1$s %2$s" - "%2$s%1$s" - "MMMMd'日 'yyyy" - "yyyy'年'MMMM'月'd'日'" - "MMM'/'d' 'yyyy'年'" - "d'/'MMM'/'yyyy" - "h':'mm' 'a" - "HH':'mm" "正午" "正午" "午前0時" "午前0時" - "%B%-d日" - "%Y%B%-d日" - "%Y%B" - "%H:%M:%S" - "%Y/%B/%-d %H:%M:%S" - "%2$s/%3$s%7$s/%8$s" - "%2$s/%3$s%1$s%7$s/%8$s%6$s" - "%2$s/%3$s%7$s/%8$s, %9$s" - "%9$s/%2$s/%3$s%1$s%7$s/%8$s%6$s" - "%2$s/%3$s %5$s%7$s/%8$s %10$s" - "%2$s/%3$s%1$s%5$s%7$s/%8$s%6$s%10$s" - "%4$s/%2$s/%3$s %5$s%9$s/%7$s/%8$s %10$s" - "%4$s/%2$s/%3$s%1$s%5$s%9$s/%7$s/%8$s%6$s%10$s" - "%2$s/%3$s%7$s/%8$s" - "%2$s/%3$s%1$s%7$s/%8$s%6$s" - "%4$s/%2$s/%3$s%9$s/%7$s/%8$s" - "%4$s/%2$s/%3$s%1$s%9$s/%7$s/%8$s%6$s" - "%2$s/%3$s %5$s%7$s/%8$s %10$s" - "%2$s/%3$s%1$s%5$s%7$s/%8$s%6$s%10$s" - "%4$s/%2$s/%3$s %5$s%9$s/%7$s/%8$s %10$s" - "%4$s/%2$s/%3$s%1$s%5$s%9$s/%7$s/%8$s%6$s%10$s" - "%2$s%3$s日~%8$s日" - "%2$s/%3$s%1$s%7$s/%8$s%6$s" - "%2$s/%3$s - %8$s, %9$s" - "%4$s/%2$s/%3$s%1$s%9$s/%7$s/%8$s%6$s" - "%2$s/%3$s%5$s%7$s/%8$s%10$s" - "%2$s/%3$s%1$s%5$s%7$s/%8$s%6$s%10$s" - "%4$s/%2$s/%3$s%5$s%9$s/%7$s/%8$s%10$s" - "%4$s/%2$s/%3$s%1$s%5$s%9$s/%7$s/%8$s%6$s%10$s" - "%Y/%b/%-d" - "%Y%b月" - "%b/%-d" - "日曜日" - "月曜日" - "火曜日" - "水曜日" - "木曜日" - "金曜日" - "土曜日" - "(日)" - "(月)" - "(火)" - "(水)" - "(木)" - "(金)" - "(土)" - "日" - "月" - "火" - "水" - "木" - "金" - "土" - "日" - "月" - "火" - "水" - "木" - "金" - "土" - "日" - "月" - "火" - "水" - "火" - "金" - "土" - "1月" - "2月" - "3月" - "4月" - "5月" - "6月" - "7月" - "8月" - "9月" - "10月" - "11月" - "12月" - "1" - "2" - "3" - "4" - "5" - "6" - "7" - "8" - "9" - "10" - "11" - "12" - "1" - "2" - "3" - "4" - "5" - "6" - "7" - "8" - "9" - "10" - "11" - "12" "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "すべて選択" diff --git a/core/res/res/values-ko-rKR/donottranslate-cldr.xml b/core/res/res/values-ko-rKR/donottranslate-cldr.xml new file mode 100644 index 000000000000..57cd35692e36 --- /dev/null +++ b/core/res/res/values-ko-rKR/donottranslate-cldr.xml @@ -0,0 +1,135 @@ + + + 1월 + 2월 + 3월 + 4월 + 5월 + 6월 + 7월 + 8월 + 9월 + 10월 + 11월 + 12월 + + 1월 + 2월 + 3월 + 4월 + 5월 + 6월 + 7월 + 8월 + 9월 + 10월 + 11월 + 12월 + + + 1월 + 2월 + 3월 + 4월 + 5월 + 6월 + 7월 + 8월 + 9월 + 10월 + 11월 + 12월 + + 일요일 + 월요일 + 화요일 + 수요일 + 목요일 + 금요일 + 토요일 + + + + + + + + + + + + + + + + + + + + + + + + + + 오전 + 오후 + 어제 + 오늘 + 내일 + + %-k:%M + %-l:%M %p + %-l:%M %p + h:mm a + H:mm + %Y. %-m. %-e. + yyyy. M. d. + "%s. %s. %s." + %Y년 %-m월 %-e일 + %p %-l:%M:%S + %p %-l:%M:%S %Y. %-m. %-e. + %2$s %1$s + %1$s %3$s + %Y. %-m. %-e. + %B %-e일 + %-B + %Y년 %B + %b %-e일 + %-b + %Y년 %b + %1$s – %2$s + %2$s – %5$s + %2$s. %3$s ~ %7$s. %8$s + %2$s. %3$s %1$s ~ %7$s. %8$s %6$s + %4$s. %2$s. %3$s. ~ %9$s. %7$s. %8$s. + %4$s. %2$s. %3$s. %1$s ~ %9$s. %7$s. %8$s. %6$s + %5$s %4$s. %2$s. %3$s. %1$s – %10$s %9$s. %7$s. %8$s. %6$s + %5$s %2$s. %3$s. – %10$s %7$s. %8$s. + %5$s %2$s. %3$s. (%1$s) – %10$s %7$s. %8$s. (%6$s) + %5$s %4$s. %2$s. %3$s. – %10$s %9$s. %7$s. %8$s. + %3$s %2$s (%1$s) – %6$s %5$s (%4$s) + %2$s (%1$s) – %5$s (%4$s) + %3$s %2$s – %6$s %5$s + %1$s %3$s (%2$s) + %3$s (%2$s) + %1$s %2$s + %2$s %3$s일 – %7$s %8$s일 + %2$s %3$s일 (%1$s) – %7$s %8$s일 (%6$s) + %5$s %2$s %3$s일 – %10$s %7$s %8$s일 + %5$s %2$s %3$s일 – %10$s %7$s %8$s일 + %5$s %2$s %3$s일 (%1$s) – %10$s %7$s %8$s일 (%6$s) + %5$s %2$s %3$s일 (%1$s) – %10$s %7$s %8$s일 (%6$s) + %5$s %4$s년 %2$s %3$s일 – %10$s %9$s년 %7$s %8$s일 + %5$s %4$s년 %2$s %3$s일 – %10$s %9$s년 %7$s %8$s일 + %5$s %4$s년 %2$s %3$s일 %1$s – %10$s %9$s년 %7$s %8$s일 %6$s + %5$s %4$s년 %2$s %3$s일 %1$s – %10$s %9$s년 %7$s %8$s일 %6$s + %4$s년 %2$s %3$s일 %1$s – %9$s년 %7$s %8$s일 %6$s + %2$s %3$s일 ~ %8$s일 + %2$s %3$s일 (%1$s) – %7$s %8$s일 (%6$s) + %9$s년 %2$s %3$s일 ~ %7$s %8$s일 + %9$s년 %2$s %3$s일~%8$s일 + %9$s년 %2$s %3$s일 %1$s ~ %7$s %8$s일 %6$s + %b + diff --git a/core/res/res/values-ko/donottranslate-cldr.xml b/core/res/res/values-ko/donottranslate-cldr.xml new file mode 100644 index 000000000000..57cd35692e36 --- /dev/null +++ b/core/res/res/values-ko/donottranslate-cldr.xml @@ -0,0 +1,135 @@ + + + 1월 + 2월 + 3월 + 4월 + 5월 + 6월 + 7월 + 8월 + 9월 + 10월 + 11월 + 12월 + + 1월 + 2월 + 3월 + 4월 + 5월 + 6월 + 7월 + 8월 + 9월 + 10월 + 11월 + 12월 + + + 1월 + 2월 + 3월 + 4월 + 5월 + 6월 + 7월 + 8월 + 9월 + 10월 + 11월 + 12월 + + 일요일 + 월요일 + 화요일 + 수요일 + 목요일 + 금요일 + 토요일 + + + + + + + + + + + + + + + + + + + + + + + + + + 오전 + 오후 + 어제 + 오늘 + 내일 + + %-k:%M + %-l:%M %p + %-l:%M %p + h:mm a + H:mm + %Y. %-m. %-e. + yyyy. M. d. + "%s. %s. %s." + %Y년 %-m월 %-e일 + %p %-l:%M:%S + %p %-l:%M:%S %Y. %-m. %-e. + %2$s %1$s + %1$s %3$s + %Y. %-m. %-e. + %B %-e일 + %-B + %Y년 %B + %b %-e일 + %-b + %Y년 %b + %1$s – %2$s + %2$s – %5$s + %2$s. %3$s ~ %7$s. %8$s + %2$s. %3$s %1$s ~ %7$s. %8$s %6$s + %4$s. %2$s. %3$s. ~ %9$s. %7$s. %8$s. + %4$s. %2$s. %3$s. %1$s ~ %9$s. %7$s. %8$s. %6$s + %5$s %4$s. %2$s. %3$s. %1$s – %10$s %9$s. %7$s. %8$s. %6$s + %5$s %2$s. %3$s. – %10$s %7$s. %8$s. + %5$s %2$s. %3$s. (%1$s) – %10$s %7$s. %8$s. (%6$s) + %5$s %4$s. %2$s. %3$s. – %10$s %9$s. %7$s. %8$s. + %3$s %2$s (%1$s) – %6$s %5$s (%4$s) + %2$s (%1$s) – %5$s (%4$s) + %3$s %2$s – %6$s %5$s + %1$s %3$s (%2$s) + %3$s (%2$s) + %1$s %2$s + %2$s %3$s일 – %7$s %8$s일 + %2$s %3$s일 (%1$s) – %7$s %8$s일 (%6$s) + %5$s %2$s %3$s일 – %10$s %7$s %8$s일 + %5$s %2$s %3$s일 – %10$s %7$s %8$s일 + %5$s %2$s %3$s일 (%1$s) – %10$s %7$s %8$s일 (%6$s) + %5$s %2$s %3$s일 (%1$s) – %10$s %7$s %8$s일 (%6$s) + %5$s %4$s년 %2$s %3$s일 – %10$s %9$s년 %7$s %8$s일 + %5$s %4$s년 %2$s %3$s일 – %10$s %9$s년 %7$s %8$s일 + %5$s %4$s년 %2$s %3$s일 %1$s – %10$s %9$s년 %7$s %8$s일 %6$s + %5$s %4$s년 %2$s %3$s일 %1$s – %10$s %9$s년 %7$s %8$s일 %6$s + %4$s년 %2$s %3$s일 %1$s – %9$s년 %7$s %8$s일 %6$s + %2$s %3$s일 ~ %8$s일 + %2$s %3$s일 (%1$s) – %7$s %8$s일 (%6$s) + %9$s년 %2$s %3$s일 ~ %7$s %8$s일 + %9$s년 %2$s %3$s일~%8$s일 + %9$s년 %2$s %3$s일 %1$s ~ %7$s %8$s일 %6$s + %b + diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 96b897a495d5..e2c6e570fe27 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -161,14 +161,10 @@ "응용프로그램이 로케일 또는 전체 글꼴 크기 같은 현재 구성을 변경할 수 있습니다." "다른 응용프로그램 다시 시작" "응용프로그램이 다른 응용프로그램을 강제로 다시 시작할 수 있습니다." - "중지되지 않도록 하기" - "응용프로그램이 프로세스를 포그라운드에서 실행되도록 하여 프로세스를 중지할 수 있습니다. 일반 응용프로그램에는 필요하지 않습니다." "강제로 응용프로그램 닫기" "응용프로그램이 포그라운드에 있는 활동을 강제로 닫을 수 있습니다. 일반 응용프로그램에는 필요하지 않습니다." "시스템 내부 상태 검색" "응용프로그램이 시스템의 내부 상태를 검색할 수 있습니다. 악성 응용프로그램은 이 기능을 이용하여 일반적으로 필요하지 않은 다양한 개인 정보와 보안 정보를 검색할 수 있습니다." - "하위 수준 서비스 게시" - "응용프로그램이 자체 하위 수준 시스템 서비스를 게시할 수 있습니다. 악성 응용프로그램은 이 기능을 이용하여 시스템을 하이재킹하거나 시스템의 데이터를 도용 또는 손상시킬 수 있습니다." "실행 중인 모든 응용프로그램 모니터링 및 제어" "응용프로그램이 시스템에서 활동이 시작되는 방식을 모니터링하고 제어할 수 있습니다. 악성 응용프로그램은 이 기능을 이용하여 시스템을 완전히 손상시킬 수 있습니다. 이 권한은 개발 과정에만 필요하며 일반 전화기 사용 시에는 필요하지 않습니다." "패키지 제거 브로드캐스트 보내기" @@ -181,8 +177,6 @@ "응용프로그램이 실행할 최대 프로세스 수를 제어할 수 있습니다. 일반 응용프로그램에는 필요하지 않습니다." "모든 백그라운드 응용프로그램이 닫히도록 하기" "응용프로그램이 백그라운드로 이동한 활동을 항상 바로 마칠지 여부를 제어할 수 있습니다. 일반 응용프로그램에는 필요하지 않습니다." - "시스템 업데이트 자동으로 설치" - "응용프로그램이 대기 중인 시스템 업데이트에 대한 알림을 받고 설치를 트리거할 수 있습니다. 악성 응용프로그램은 이 기능을 이용하여 인증되지 않은 업데이트로 시스템을 손상시키거나 업데이트 절차를 방해할 수 있습니다." "배터리 통계 수정" "수집된 배터리 통계를 수정할 수 있습니다. 일반 응용프로그램에서는 사용하지 않습니다." "인증되지 않은 창 표시" @@ -418,9 +412,6 @@ "비밀번호" "로그인" "사용자 이름 또는 비밀번호가 잘못되었습니다." - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%-l%P" "%-l%p" "알림 지우기" @@ -452,9 +443,6 @@ "입력" "삭제" "검색" - "오늘" - "어제" - "내일" "한 달 전" "한 달 전" @@ -536,13 +524,6 @@ "주" "년" "년" - "일요일" - "월요일" - "화요일" - "수요일" - "목요일" - "금요일" - "토요일" "주중 매일(월-금)" "매일" "매주 %s" @@ -552,137 +533,15 @@ "죄송합니다. 이 기기로의 스트리밍에 적합하지 않은 동영상입니다." "죄송합니다. 동영상을 재생할 수 없습니다." "확인" - "AM" - "PM" - "%m/%d/%Y" - "%2$s, %1$s, %3$s%5$s, %4$s, %6$s" - "%2$s, %1$s%5$s, %4$s" - "%2$s, %3$s%5$s, %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%3$s, %2$s, %1$s" - "%2$s, %3$s" - "%3$s, %1$s" - "%1$s, %2$s" "%1$s, %2$s" - "%2$s, %1$s" - "yyyy' 'MMMM', 'd" - "yyyy' 'MMMM', 'd" - "MMM' 'd', 'yyyy" - "d' 'MMM', 'yyyy" - "h':'mm' 'a" - "HH':'mm" "정오" "정오" "자정" "자정" - "%B %-d" - "%Y, %B %-d" - "%B %Y" - "%H:%M:%S" - "%Y, %B %-d, %H:%M:%S" - "%2$s %3$s%7$s %8$s" - "%2$s %3$s, %1$s%7$s %8$s, %6$s" - "%9$s, %2$s %3$s%7$s %8$s" - "%9$s, %2$s %3$s, %1$s%7$s %8$s, %6$s" - "%2$s %3$s, %5$s%7$s %8$s, %10$s" - "%2$s %3$s, %1$s, %5$s%7$s %8$s, %6$s, %10$s" - "%4$s, %2$s %3$s, %5$s%9$s, %7$s %8$s, %10$s" - "%1$s, %2$s %3$s, %4$s, %5$s%6$s, %7$s %8$s, %9$s, %10$s" - "%2$s/%3$s%7$s/%8$s" - "%2$s/%3$s, %1$s%7$s/%8$s, %6$s" - "%4$s/%2$s/%3$s%9$s/%7$s/%8$s/" - "%4$s/%2$s/%3$s, %1$s%9$s/%7$s/%8$s, %6$s" - "%2$s/%3$s, %5$s%7$s/%8$s, %10$s" - "%2$s/%3$s, %1$s, %5$s%7$s/%8$s, %6$s, %10$s" - "%2$s/%3$s/%4$s, %5$s%7$s/%8$s/%9$s, %10$s" - "%1$s, %2$s/%3$s/%4$s, %5$s%6$s, %7$s/%8$s/%9$s, %10$s" - "%2$s %3$s%8$s" - "%2$s %3$s, %1$s%7$s %8$s, %6$s" - "%9$s, %2$s %3$s%8$s" - "%4$s, %2$s %3$s, %1$s%9$s, %7$s %8$s, %6$s" - "%2$s %3$s, %5$s%7$s %8$s, %10$s" - "%1$s, %2$s %3$s, %5$s%6$s, %7$s %8$s, %10$s" - "%2$s %3$s, %4$s, %5$s%7$s %8$s, %9$s, %10$s" - "%4$s, %2$s %3$s, %1$s, %5$s%9$s, %7$s %8$s, %6$s, %10$s" - "%Y %b, %-d" - "%b %Y" - "%b %-d" - "일요일" - "월요일" - "화요일" - "수요일" - "목요일" - "금요일" - "토요일" - "일요일" - "월" - "화" - "수" - "목" - "금" - "토" - "일" - "월" - "화" - "수" - "목" - "금" - "토" - "일" - "월" - "화" - "수" - "목" - "금" - "토" - "일" - "3월" - "목" - "수" - "목" - "금" - "토" - "1월" - "2월" - "3월" - "4월" - "5월" - "6월" - "7월" - "8월" - "9월" - "10월" - "11월" - "12월" - "1월" - "2월" - "3월" - "4월" - "5월" - "6월" - "7월" - "8월" - "9월" - "10월" - "11월" - "12월" - "1월" - "금" - "3월" - "4월" - "5월" - "6월" - "7월" - "8월" - "9월" - "10월" - "11월" - "12월" "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "모두 선택" diff --git a/core/res/res/values-lt-rLT/donottranslate-cldr.xml b/core/res/res/values-lt-rLT/donottranslate-cldr.xml new file mode 100644 index 000000000000..20d58e05fea5 --- /dev/null +++ b/core/res/res/values-lt-rLT/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Sausis + Vasaris + Kovas + Balandis + Gegužė + Birželis + Liepa + Rugpjūtis + Rugsėjis + Spalis + Lapkritis + Gruodis + + sausio + vasario + kovo + balandžio + gegužės + birželio + liepos + rugpjūčio + rugsėjo + spalio + lapkričio + gruodžio + + Sau + Vas + Kov + Bal + Geg + Bir + Lie + Rgp + Rgs + Spl + Lap + Grd + + S + V + K + B + G + B + L + R + R + S + L + G + + sekmadienis + pirmadienis + antradienis + trečiadienis + ketvirtadienis + penktadienis + šeštadienis + + Sk + Pr + An + Tr + Kt + Pn + Št + + Sk + Pr + An + Tr + Kt + Pn + Št + + S + P + A + T + K + P + Š + + priešpiet + popiet + vakar + šiandien + rytoj + + %-k:%M + %-l:%M %p + %-l:%M %p + h:mm a + H:mm + %Y-%m-%d + yyyy-MM-dd + "%s-%s-%s" + %Y m. %B %-e d. + %H:%M:%S + %H:%M:%S %Y.%m.%d + %2$s %1$s + %1$s %3$s + %Y.%m.%d + %B %-e + %-B + %Y %B + %b %-e d. + %b + %Y m. %b + %1$s - %2$s + %2$s - %5$s + %2$s-%3$s - %7$s-%8$s + %2$s-%3$s%1$s - %7$s-%8$s%6$s + %4$s-%2$s-%3$s - %9$s-%7$s-%8$s + %4$s-%2$s-%3$s%1$s - %9$s-%7$s-%8$s%6$s + %5$s %4$s-%2$s-%3$s%1$s - %10$s %9$s-%7$s-%8$s%6$s + %5$s %2$s-%3$s - %10$s %7$s-%8$s + %5$s %2$s-%3$s%1$s - %10$s %7$s-%8$s%6$s + %5$s %4$s-%2$s-%3$s - %10$s %9$s-%7$s-%8$s + %3$s %2$s%1$s - %6$s %5$s%4$s + %2$s%1$s - %5$s%4$s + %3$s %2$s - %6$s %5$s + %1$s %3$s%2$s + %3$s%2$s + %1$s %2$s + %2$s %3$s - %7$s %8$s + %2$s %3$s d.%1$s - %7$s %8$s d.%6$s + %5$s %2$s %3$s - %10$s %7$s %8$s + %5$s %2$s %3$s - %10$s %7$s %8$s + %5$s %2$s %3$s d.%1$s - %10$s %7$s %8$s d.%6$s + %5$s %2$s %3$s d.%1$s - %10$s %7$s %8$s d.%6$s + %5$s %4$s m. %2$s %3$s d. - %10$s %9$s m. %7$s %8$s d. + %5$s %4$s m. %2$s %3$s d. - %10$s %9$s m. %7$s %8$s d. + %5$s %4$s m. %2$s %3$s d.,%1$s - %10$s %9$s m. %7$s %8$s d.,%6$s + %5$s %4$s m. %2$s %3$s d.,%1$s - %10$s %9$s m. %7$s %8$s d.,%6$s + %4$s m. %2$s %3$s d.,%1$s - %9$s m. %7$s %8$s d.,%6$s + %2$s %3$s d.-%8$s d. + %2$s %3$s d.%1$s - %7$s %8$s d.%6$s + %9$s m. %2$s %3$s d. - %7$s %8$s d. + %9$s m. %2$s %3$s d.-%8$s d. + %9$s m. %2$s %3$s d.,%1$s - %7$s %8$s d.,%6$s + %b + diff --git a/core/res/res/values-lv-rLV/donottranslate-cldr.xml b/core/res/res/values-lv-rLV/donottranslate-cldr.xml new file mode 100644 index 000000000000..3dec1d2e3726 --- /dev/null +++ b/core/res/res/values-lv-rLV/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + janvāris + februāris + marts + aprīlis + maijs + jūnijs + jūlijs + augusts + septembris + oktobris + novembris + decembris + + janvāris + februāris + marts + aprīlis + maijs + jūnijs + jūlijs + augusts + septembris + oktobris + novembris + decembris + + janv. + febr. + marts + apr. + maijs + jūn. + jūl. + aug. + sept. + okt. + nov. + dec. + + J + F + M + A + M + J + J + A + S + O + N + D + + svētdiena + pirmdiena + otrdiena + trešdiena + ceturtdiena + piektdiena + sestdiena + + Sv + Pr + Ot + Tr + Ce + Pk + Se + + Sv + Pr + Ot + Tr + Ce + Pk + Se + + S + P + O + T + C + P + S + + AM + PM + vakar + šodien + rīt + + %H:%M + %-l:%M %p + %-l:%M %^p + h:mm a + HH:mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %Y. gada %-e. %B + %H:%M:%S + %H:%M:%S %Y. gada %-e. %b + %2$s %1$s + %1$s %3$s + %Y. gada %-e. %b + %-e. %B + %-B + %Y. g. %B + %-e. %b + %-b + %Y. g. %b + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s–%8$s.%7$s + %1$s, %3$s.%2$s - %6$s, %8$s.%7$s + %3$s.%2$s.%4$s.–%8$s.%7$s.%9$s. + %1$s, %3$s.%2$s.%4$s. – %6$s, %8$s.%7$s.%9$s. + %5$s %1$s, %3$s.%2$s.%4$s. - %10$s %6$s, %8$s.%7$s.%9$s. + %5$s %3$s.%2$s. - %10$s %8$s.%7$s. + %5$s %1$s, %3$s.%2$s. - %10$s %6$s, %8$s.%7$s. + %5$s %3$s.%2$s.%4$s - %10$s %8$s.%7$s.%9$s + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s. %2$s - %8$s. %7$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %1$s, %3$s. %2$s - %10$s %6$s, %8$s. %7$s + %5$s %1$s, %3$s. %2$s - %10$s %6$s, %8$s. %7$s + %5$s %4$s. gada %3$s. %2$s - %10$s %9$s. gada %8$s. %7$s + %5$s %4$s. gada %3$s. %2$s - %10$s %9$s. gada %8$s. %7$s + %5$s %1$s, %4$s. g. %3$s. %2$s - %10$s %6$s, %9$s. g. %8$s. %7$s + %5$s %1$s, %4$s. g. %3$s. %2$s - %10$s %6$s, %9$s. g. %8$s. %7$s + %1$s, %4$s. g. %3$s. %2$s - %6$s, %9$s. g. %8$s. %7$s + %3$s.-%8$s. %2$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s + %9$s. gada %3$s. %2$s - %8$s. %7$s + %9$s. gada %3$s.-%8$s. %2$s + %1$s, %9$s. gada %3$s. %2$s - %6$s, y. gada %8$s. %7$s + %b + diff --git a/core/res/res/values-mcc204-pt/strings.xml b/core/res/res/values-mcc204-pt/strings.xml new file mode 100644 index 000000000000..7d962307a3de --- /dev/null +++ b/core/res/res/values-mcc204-pt/strings.xml @@ -0,0 +1,19 @@ + + + + "nl_nl" + diff --git a/core/res/res/values-mcc230-pt/strings.xml b/core/res/res/values-mcc230-pt/strings.xml new file mode 100644 index 000000000000..d3ecdbba28ed --- /dev/null +++ b/core/res/res/values-mcc230-pt/strings.xml @@ -0,0 +1,19 @@ + + + + "cs_cz" + diff --git a/core/res/res/values-mcc232-pt/strings.xml b/core/res/res/values-mcc232-pt/strings.xml new file mode 100644 index 000000000000..4773838f9c47 --- /dev/null +++ b/core/res/res/values-mcc232-pt/strings.xml @@ -0,0 +1,19 @@ + + + + "de_at" + diff --git a/core/res/res/values-mcc234-pt/strings.xml b/core/res/res/values-mcc234-pt/strings.xml new file mode 100644 index 000000000000..2538b7329239 --- /dev/null +++ b/core/res/res/values-mcc234-pt/strings.xml @@ -0,0 +1,19 @@ + + + + "en_gb" + diff --git a/core/res/res/values-mcc260-pt/strings.xml b/core/res/res/values-mcc260-pt/strings.xml new file mode 100644 index 000000000000..1161f9a6356f --- /dev/null +++ b/core/res/res/values-mcc260-pt/strings.xml @@ -0,0 +1,19 @@ + + + + "pl_pl" + diff --git a/core/res/res/values-mcc262-pt/strings.xml b/core/res/res/values-mcc262-pt/strings.xml new file mode 100644 index 000000000000..9505cf4b4226 --- /dev/null +++ b/core/res/res/values-mcc262-pt/strings.xml @@ -0,0 +1,19 @@ + + + + "de_de" + diff --git a/core/res/res/values-nb/donottranslate-cldr.xml b/core/res/res/values-nb/donottranslate-cldr.xml new file mode 100644 index 000000000000..ecf01118298f --- /dev/null +++ b/core/res/res/values-nb/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + januar + februar + mars + april + mai + juni + juli + august + september + oktober + november + desember + + januar + februar + mars + april + mai + juni + juli + august + september + oktober + november + desember + + jan. + feb. + mars + apr. + mai + juni + juli + aug. + sep. + okt. + nov. + des. + + J + F + M + A + M + J + J + A + S + O + N + D + + søndag + mandag + tirsdag + onsdag + torsdag + fredag + lørdag + + søn. + man. + tir. + ons. + tor. + fre. + lør. + + søn. + man. + tir. + ons. + tor. + fre. + lør. + + S + M + T + O + T + F + L + + AM + PM + i går + i dag + i morgen + + %H.%M + %-l.%M %p + %-l.%M %^p + h.mm a + HH.mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %-e. %B %Y + %H.%M.%S + %H.%M.%S %-e. %b %Y + %2$s %1$s + %1$s %3$s + %-e. %b %Y + %-e. %B + %-B + %B %Y + %-e. %b + %-b + %b %Y + %1$s–%2$s + %2$s–%5$s + %3$s.%2$s.–%8$s.%7$s. + %1$s %3$s.%2$s.–%6$s %8$s.%7$s. + %3$s.%2$s.%4$s–%8$s.%7$s.%9$s + %1$s %3$s.%2$s.%4$s–%6$s %8$s.%7$s.%9$s + %5$s %1$s %3$s.%2$s.%4$s–%10$s %6$s %8$s.%7$s.%9$s + %5$s %3$s.%2$s.–%10$s %8$s.%7$s. + %5$s %1$s %3$s.%2$s–%10$s %6$s %8$s.%7$s + %5$s %3$s.%2$s.%4$s–%10$s %8$s.%7$s.%9$s + %3$s %1$s %2$s–%6$s %4$s %5$s + %1$s %2$s–%4$s %5$s + %3$s %2$s–%6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s. %2$s–%8$s. %7$s + %1$s %3$s. %2$s–%6$s %8$s. %7$s + %5$s %3$s. %2$s–%10$s %8$s. %7$s + %5$s %3$s. %2$s–%10$s %8$s. %7$s + %5$s %1$s %3$s. %2$s–%10$s %6$s %8$s. %7$s + %5$s %1$s %3$s. %2$s–%10$s %6$s %8$s. %7$s + %5$s %3$s. %2$s %4$s–%10$s %8$s. %7$s %9$s + %5$s %3$s. %2$s %4$s–%10$s %8$s. %7$s %9$s + %5$s %1$s %3$s. %2$s %4$s–%10$s %6$s %8$s. %7$s %9$s + %5$s %1$s %3$s. %2$s %4$s–%10$s %6$s %8$s. %7$s %9$s + %1$s %3$s. %2$s %4$s–%6$s %8$s. %7$s %9$s + %3$s.–%8$s. %2$s + %1$s %3$s. %2$s–%6$s %8$s. %7$s + %3$s. %2$s–%8$s. %7$s %9$s + %3$s.–%8$s. %2$s %9$s + %1$s %3$s. %2$s–%6$s %8$s. %7$s %9$s + %b + diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 7bed159c51ca..33d015997b34 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -166,14 +166,10 @@ "Tillater applikasjonen å endre gjeldende innstillinger, slik som språk eller skriftstørrelse." "omstarte andre applikasjoner" "Lar applikasjonen tvinge andre applikasjoner til å starte på nytt." - "unngå å bli stoppet" - "Lar applikasjonen sette en vilkårlig prosess i forgrunnen, så den ikke kan bli drept. Vanlige applikasjoner bør aldri trenge dette." "tvinge applikasjoner til å lukkes" "Lar applikasjonen tvinge enhver aktivitet som er i forgrunnen til å lukkes og gå tilbake. Vanlige applikasjoner bør aldri trenge dette." "hente intern systemtilstand" "Lar applikasjonen hente intern tilstand fra systemet. Onsdinnede applikasjoner kan hente et bredt spekter av privat og sikker informasjon som de vanligvis aldri burde ha behov for." - "publisere lavnivåtjenester" - "Lar applikasjonen publisere sine egne lavnivås systemtjenester. Ondsinnede applikasjoner kan kapre systemet, og stjele eller ødelegge alle data på det." "overvåke og kontrollere all applikasjonsoppstart" "Lar applikasjonen overvåke og kontrollere hvordan systemet starter applikasjoner. Ondsinnede applikasjoner kan ta over systemet helt. Denne rettigheten behøves bare for utvikling, aldri for vanlig bruk av telefonen." "kringkaste melding om fjernet pakke" @@ -186,8 +182,6 @@ "Lar applikasjonen kontrollere maksimalt antall kjørende prosesser. Behøves aldri for vanlige applikasjoner." "få alle bakgrunnsapplikasjoner til å lukkes" "Lar applikasjonen kontrollere om aktiviteter alltid avsluttes når de sendes til bakgrunnen. Behøves aldri for vanlige applikasjoner." - "installere systemoppdateringer automatisk" - "Lar applikasjonen motta meldinger om pågående systemoppdateringer, og starte installeringen av dem. Ondsinnede applikasjoner kan bruke dette for å skade systemet med uautoriserte oppdateringer, eller generelt forstyrre oppdateringsprosessen." "endre batteristatistikk" "Lar applikasjonen endre på innsamlet batteristatistikk. Ikke ment for vanlige applikasjoner." "vis uautoriserte vinduer" @@ -424,9 +418,6 @@ "Password" "Sign in" "Invalid username or password." - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%-l%P" "%-l%p" "Fjern varslinger" @@ -458,9 +449,6 @@ "enter" "slett" "Søk" - "I dag" - "I går" - "I morgen" "For en måned siden" "For over en måned siden" @@ -542,13 +530,6 @@ "uker" "år" "år" - "søndag" - "mandag" - "tirsdag" - "onsdag" - "torsdag" - "fredag" - "lørdag" "Hverdager (man–fre)" "Hver dag" "Hver %s" @@ -558,26 +539,7 @@ "Beklager, denne videoen er ikke gyldig for streaming til denne enheten." "Beklager, kan ikke spille denne videoen." "OK" - "AM" - "PM" - "%Y-%m-%d" - "%1$s %2$s %3$s%4$s %5$s %6$s" - "%1$s %2$s%4$s %5$s" - "%2$s %3$s%5$s %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%1$s, %2$s %3$s" - "%2$s %3$sPLACEHOLDERplaceholder" - "%1$s, %3$s" - "%1$s, %2$s" "%1$s, %2$s" - "%1$s, %2$s" - "MMMM' 'd'., 'yyyy" - "d'. 'MMMM' 'yyyy" - "MMM' 'd', 'yyyy" - "d'. 'MMM' 'yyyy" - "h':'mm' 'a" - "HH':'mm" "middag" "Middag" "midnatt" @@ -586,111 +548,10 @@ - "%-d. %B %Y" - "%B %Y" - "%H:%M:%S" - "%H:%M:%S %-d. %B %Y" - "%2$s %3$s%7$s %8$s" - "%1$s %3$s. %2$s%6$s %8$s. %7$s" - "%3$s. %2$s%8$s. %7$s %9$s" - "%1$s %2$s %3$s%6$s %7$s %8$s, %9$s" - "%3$s. %2$s %5$s%8$s. %7$s %10$s" - "%1$s %3$s. %2$s %5$s%6$s %8$s. %7$s %10$s" - "%3$s. %2$s %4$s %5$s%8$s. %7$s %9$s %10$s" - "%1$s %3$s. %2$s %4$s %5$s%6$s %8$s. %7$s %9$s %10$s" - "%3$s.%2$s. – %8$s.%7$s." - "%1$s %3$s.%2$s. – %6$s %8$s.%7$s." - "%3$s.%2$s.%4$s%8$s.%7$s.%9$s" - "%1$s %3$s.%2$s.%4$s%6$s %8$s.%7$s.%9$s" - "%3$s.%2$s. %5$s%8$s.%7$s. %10$s" - "%1$s %3$s.%2$s. %5$s%6$s %8$s.%7$s. %10$s" - "%3$s.%2$s.%4$s %5$s%8$s.%7$s.%9$s %10$s" - "%1$s %3$s.%2$s.%4$s %5$s%6$s %8$s.%7$s.%9$s %10$s" - "%3$s.–%8$s. %2$s" - "%1$s %3$s. %2$s%6$s %8$s. %7$s" - "%3$s.–%8$s %2$s %9$s" - "%1$s %3$s. %2$s %4$s%6$s %8$s. %7$s %9$s" - "%3$s. %2$s %5$s%8$s. %7$s %10$s" - "%1$s %3$s. %2$s %5$s%6$s %8$s. %7$s %10$s" - "%3$s. %2$s %4$s %5$s%8$s. %7$s %9$s %10$s" - "%1$s %3$s. %2$s %4$s %5$s%6$s %8$s. %7$s %9$s %10$s" - "%-d. %b %Y" - "%b %Y" - "søndag" - "mandag" - "tirsdag" - "onsdag" - "torsdag" - "fredag" - "lørdag" - "søn" - "man" - "tir" - "ons" - "tor" - "fre" - "lør" - "sø" - "ma" - "ti" - "on" - "to" - "fr" - "lø" - "S" - "M" - "Ti" - "O" - "To" - "F" - "L" - "S" - "M" - "T" - "O" - "T" - "F" - "L" - "januar" - "februar" - "mars" - "april" - "mai" - "juni" - "juli" - "august" - "september" - "oktober" - "november" - "desember" - "jan" - "feb" - "mar" - "apr" - "mai" - "jun" - "jul" - "aug" - "sep" - "okt" - "nov" - "des" - "J" - "F" - "M" - "A" - "M" - "J" - "J" - "A" - "S" - "O" - "N" - "D" "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "Merk alt" diff --git a/core/res/res/values-nl-rBE/donottranslate-cldr.xml b/core/res/res/values-nl-rBE/donottranslate-cldr.xml new file mode 100644 index 000000000000..680a39286357 --- /dev/null +++ b/core/res/res/values-nl-rBE/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + januari + februari + maart + april + mei + juni + juli + augustus + september + oktober + november + december + + januari + februari + maart + april + mei + juni + juli + augustus + september + oktober + november + december + + jan. + feb. + mrt. + apr. + mei + jun. + jul. + aug. + sep. + okt. + nov. + dec. + + J + F + M + A + M + J + J + A + S + O + N + D + + zondag + maandag + dinsdag + woensdag + donderdag + vrijdag + zaterdag + + zo + ma + di + wo + do + vr + za + + zo + ma + di + wo + do + vr + za + + Z + M + D + W + D + V + Z + + AM + PM + Gisteren + Vandaag + Morgen + + %H:%M + %-l:%M %p + %-l:%M %^p + h:mm a + HH:mm + %-e/%m/%Y + d/MM/yyyy + "%s/%s/%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S %-e-%b-%Y + %2$s %1$s + %1$s %3$s + %-e-%b-%Y + %-e %B + %-B + %B %Y + %-e-%b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s %3$s/%2$s - %6$s %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s - %6$s %8$s/%7$s/%9$s + %5$s %1$s %3$s/%2$s/%4$s - %10$s %6$s %8$s/%7$s/%9$s + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %1$s %3$s/%2$s - %10$s %6$s %8$s/%7$s + %5$s %3$s/%2$s/%4$s - %10$s %8$s/%7$s/%9$s + %3$s %1$s %2$s - %6$s %4$s %5$s + %1$s %2$s - %4$s %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s - %10$s %6$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s - %10$s %6$s %8$s %7$s %9$s + %1$s %3$s %2$s %4$s - %6$s %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s %3$s %2$s - %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-nl-rNL/donottranslate-cldr.xml b/core/res/res/values-nl-rNL/donottranslate-cldr.xml new file mode 100644 index 000000000000..b6231b622790 --- /dev/null +++ b/core/res/res/values-nl-rNL/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + januari + februari + maart + april + mei + juni + juli + augustus + september + oktober + november + december + + januari + februari + maart + april + mei + juni + juli + augustus + september + oktober + november + december + + jan. + feb. + mrt. + apr. + mei + jun. + jul. + aug. + sep. + okt. + nov. + dec. + + J + F + M + A + M + J + J + A + S + O + N + D + + zondag + maandag + dinsdag + woensdag + donderdag + vrijdag + zaterdag + + zo + ma + di + wo + do + vr + za + + zo + ma + di + wo + do + vr + za + + Z + M + D + W + D + V + Z + + AM + PM + Gisteren + Vandaag + Morgen + + %H:%M + %-l:%M %p + %-l:%M %^p + h:mm a + HH:mm + %d-%m-%Y + dd-MM-yyyy + "%s-%s-%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S %-e %b %Y + %2$s %1$s + %1$s %3$s + %-e %b %Y + %-e %B + %-B + %B %Y + %-e-%b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s-%2$s - %8$s-%7$s + %1$s %3$s-%2$s - %6$s %8$s-%7$s + %3$s-%2$s-%4$s - %8$s-%7$s-%9$s + %1$s %3$s-%2$s-%4$s - %6$s %8$s-%7$s-%9$s + %5$s %1$s %3$s-%2$s-%4$s - %10$s %6$s %8$s-%7$s-%9$s + %5$s %3$s-%2$s - %10$s %8$s-%7$s + %5$s %1$s %3$s-%2$s - %10$s %6$s %8$s-%7$s + %5$s %3$s-%2$s-%4$s - %10$s %8$s-%7$s-%9$s + %3$s %1$s %2$s - %6$s %4$s %5$s + %1$s %2$s - %4$s %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s - %10$s %6$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s - %10$s %6$s %8$s %7$s %9$s + %1$s %3$s %2$s %4$s - %6$s %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s %3$s %2$s - %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-nl/donottranslate-cldr.xml b/core/res/res/values-nl/donottranslate-cldr.xml new file mode 100644 index 000000000000..b6231b622790 --- /dev/null +++ b/core/res/res/values-nl/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + januari + februari + maart + april + mei + juni + juli + augustus + september + oktober + november + december + + januari + februari + maart + april + mei + juni + juli + augustus + september + oktober + november + december + + jan. + feb. + mrt. + apr. + mei + jun. + jul. + aug. + sep. + okt. + nov. + dec. + + J + F + M + A + M + J + J + A + S + O + N + D + + zondag + maandag + dinsdag + woensdag + donderdag + vrijdag + zaterdag + + zo + ma + di + wo + do + vr + za + + zo + ma + di + wo + do + vr + za + + Z + M + D + W + D + V + Z + + AM + PM + Gisteren + Vandaag + Morgen + + %H:%M + %-l:%M %p + %-l:%M %^p + h:mm a + HH:mm + %d-%m-%Y + dd-MM-yyyy + "%s-%s-%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S %-e %b %Y + %2$s %1$s + %1$s %3$s + %-e %b %Y + %-e %B + %-B + %B %Y + %-e-%b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s-%2$s - %8$s-%7$s + %1$s %3$s-%2$s - %6$s %8$s-%7$s + %3$s-%2$s-%4$s - %8$s-%7$s-%9$s + %1$s %3$s-%2$s-%4$s - %6$s %8$s-%7$s-%9$s + %5$s %1$s %3$s-%2$s-%4$s - %10$s %6$s %8$s-%7$s-%9$s + %5$s %3$s-%2$s - %10$s %8$s-%7$s + %5$s %1$s %3$s-%2$s - %10$s %6$s %8$s-%7$s + %5$s %3$s-%2$s-%4$s - %10$s %8$s-%7$s-%9$s + %3$s %1$s %2$s - %6$s %4$s %5$s + %1$s %2$s - %4$s %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s - %10$s %6$s %8$s %7$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s - %10$s %6$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s - %10$s %6$s %8$s %7$s %9$s + %1$s %3$s %2$s %4$s - %6$s %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s %3$s %2$s - %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 3a9e32c52471..a418d72a882f 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -161,14 +161,10 @@ "Hiermee kan een toepassing de huidige configuratie, zoals de landinstelling of de algemene lettergrootte, wijzigen." "andere toepassingen opnieuw starten" "Hiermee kan een toepassing andere toepassingen opnieuw starten." - "stoppen voorkomen" - "Hiermee kan een toepassing ervoor zorgen dat elk willekeurig proces op de voorgrond wordt uitgevoerd en dus niet kan worden afgesloten. Nooit vereist voor normale toepassingen." "toepassing nu sluiten" "Hiermee kan een toepassing elke willekeurige activiteit die op de voorgrond wordt uitgevoerd, sluiten en naar de achtergrond verplaatsen. Nooit vereist voor normale toepassingen." "interne systeemstatus ophalen" "Hiermee kan een toepassing de interne status van het systeem ophalen. Schadelijke toepassingen kunnen privé- of veiligheidsgegevens ophalen die ze normaal niet nodig hebben." - "services op laag niveau publiceren" - "Hiermee kunnen toepassingen hun eigen systeemservices op laag niveau publiceren. Schadelijke toepassingen kunnen het systeem mogelijk kapen en willekeurige gegevens van het systeem stelen of beschadigen." "alle startende toepassingen bijhouden en beheren" "Hiermee kan een toepassing de manier waarop het systeem activiteiten start, bijhouden en beheren. Schadelijke toepassingen kunnen het systeem volledig in gevaar brengen. Deze machtiging is alleen voor ontwikkeling vereist, nooit voor normaal telefoongebruik." "melding verzenden dat pakket is verwijderd" @@ -181,8 +177,6 @@ "Hiermee kan een toepassing het maximum aantal processen bepalen dat wordt uitgevoerd. Nooit vereist voor normale toepassingen." "alle achtergrondtoepassingen sluiten" "Hiermee kan een toepassing bepalen of activiteiten altijd worden afgesloten zodra deze naar de achtergrond gaan. Nooit nodig voor normale toepassingen." - "systeemupdates automatisch installeren" - "Hiermee ontvangt een toepassing meldingen over beschikbare systeemupdates en kan hun installatie starten. Schadelijke toepassingen kunnen hiervan gebruik maken om het systeem met ongeautoriseerde updates te beschadigen of het updateproces in het algemeen te verstoren." "accustatistieken aanpassen" "Hiermee kunnen verzamelde accustatistieken worden gewijzigd. Niet voor gebruik door normale toepassingen." "niet-geautoriseerde vensters weergeven" @@ -418,9 +412,6 @@ "Wachtwoord" "Aanmelden" "Gebruikersnaam of wachtwoord ongeldig." - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%-l%P" "%-l%p" "Meldingen wissen" @@ -452,9 +443,6 @@ "invoeren" "verwijderen" "Zoeken" - "Vandaag" - "Gisteren" - "Morgen" "1 maand geleden" "Meer dan 1 maand geleden" @@ -536,13 +524,6 @@ "weken" "jaar" "jaren" - "Zondag" - "Maandag" - "Dinsdag" - "Woensdag" - "Donderdag" - "Vrijdag" - "Zaterdag" "Elke weekdag (ma-vr)" "Dagelijks" "Wekelijks op %s" @@ -552,137 +533,15 @@ "Deze video kan helaas niet worden gestreamd naar dit apparaat." "Deze video kan niet worden afgespeeld." "OK" - "am" - "pm" - "%d-%m-%Y" - "%1$s %2$s, %3$s%4$s %5$s, %6$s" - "%1$s %2$s%4$s %5$s" - "%2$s, %3$s%5$s, %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%1$s, %2$s %3$s" - "%2$s %3$s" - "%1$s, %3$s" - "%1$s, %2$s" "%1$s, %2$s" - "%1$s, %2$s" - "d' 'MMMM' 'yyyy" - "d' 'MMMM' 'yyyy" - "d' 'MMM' 'yyyy" - "d' 'MMM' 'yyyy" - "h':'mm' 'a" - "HH':'mm" "twaalf uur \'s middags" "Twaalf uur \'s middags" "middernacht" "Middernacht" - "%-d %B" - "%-d %B %Y" - "%B %Y" - "%H:%M:%S" - "%H:%M:%S %-d %B %Y" - "%3$s %2$s%8$s %7$s" - "%1$s %3$s %2$s%6$s %8$s %7$s" - "%3$s %2$s%8$s %7$s %9$s" - "%1$s %3$s %2$s%6$s %8$s %7$s %9$s" - "%3$s %2$s, %5$s%8$s %7$s, %10$s" - "%1$s %3$s %2$s, %5$s%6$s %8$s %7$s, %10$s" - "%3$s %2$s %4$s, %5$s%8$s %7$s %9$s, %10$s" - "%1$s %3$s %2$s %4$s, %5$s%6$s %8$s %7$s %9$s, %10$s" - "%3$s-%2$s%8$s-%7$s" - "%1$s %3$s-%2$s%6$s %8$s-%7$s" - "%3$s-%2$s-%4$s%8$s-%7$s-%9$s" - "%1$s %3$s-%2$s-%4$s%6$s %8$s-%7$s-%9$s" - "%3$s-%2$s, %5$s%8$s-%7$s, %10$s" - "%1$s %3$s-%2$s, %5$s%6$s %8$s-%7$s, %10$s" - "%3$s-%2$s-%4$s, %5$s%8$s-%7$s-%9$s, %10$s" - "%1$s %3$s-%2$s-%4$s, %5$s%6$s %8$s-%7$s-%9$s, %10$s" - "%3$s%8$s %2$s" - "%1$s %3$s %2$s%6$s %8$s %7$s" - "%3$s%8$s %2$s %9$s" - "%1$s %3$s %2$s %4$s%6$s %8$s %7$s %9$s" - "%3$s %2$s, %5$s%8$s %7$s, %10$s" - "%1$s %3$s %2$s, %5$s%6$s %8$s %7$s, %10$s" - "%3$s %2$s %4$s, %5$s%8$s %7$s %9$s, %10$s" - "%1$s %3$s %2$s %4$s, %5$s%6$s %8$s %7$s %9$s, %10$s" - "%-d %b %Y" - "%b %Y" - "%-d %b" - "Zondag" - "Maandag" - "Dinsdag" - "Woensdag" - "Donderdag" - "Vrijdag" - "Zaterdag" - "Zo" - "Ma" - "Di" - "Wo" - "Do" - "Vr" - "Za" - "Zo" - "Ma" - "Di" - "Wo" - "Do" - "Vr" - "Za" - "Zo" - "M" - "Di" - "W" - "Do" - "V" - "Za" - "Z" - "M" - "D" - "W" - "D" - "V" - "Z" - "Januari" - "Februari" - "Maart" - "April" - "Mei" - "Juni" - "Juli" - "Augustus" - "September" - "Oktober" - "November" - "December" - "Jan" - "Feb" - "Mrt" - "Apr" - "Mei" - "Jun" - "Jul" - "Aug" - "Sep" - "Okt" - "Nov" - "Dec" - "J" - "V" - "M" - "A" - "M" - "J" - "J" - "A" - "S" - "O" - "N" - "D" "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "Alles selecteren" diff --git a/core/res/res/values-pl-rPL/donottranslate-cldr.xml b/core/res/res/values-pl-rPL/donottranslate-cldr.xml new file mode 100644 index 000000000000..4ad17bf11c46 --- /dev/null +++ b/core/res/res/values-pl-rPL/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + styczeń + luty + marzec + kwiecień + maj + czerwiec + lipiec + sierpień + wrzesień + październik + listopad + grudzień + + stycznia + lutego + marca + kwietnia + maja + czerwca + lipca + sierpnia + września + października + listopada + grudnia + + sty + lut + mar + kwi + maj + cze + lip + sie + wrz + paź + lis + gru + + s + l + m + k + m + c + l + s + w + p + l + g + + niedziela + poniedziałek + wtorek + środa + czwartek + piątek + sobota + + niedz. + pon. + wt. + śr. + czw. + pt. + sob. + + niedz. + pon. + wt. + śr. + czw. + pt. + sob. + + N + P + W + Ś + C + P + S + + AM + PM + Wczoraj + Dzisiaj + Jutro + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d-%m-%Y + dd-MM-yyyy + "%s-%s-%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S %d-%m-%Y + %2$s %1$s + %1$s %3$s + %d-%m-%Y + %-e %B + %-B + %-B %Y + %b %-e + %-b + %Y %b + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s-%8$s.%7$s + %1$s, %3$s.%2$s - %6$s, %8$s.%7$s + %3$s.%2$s.%4$s-%8$s.%7$s.%9$s + %1$s, %3$s-%2$s-%4$s-%6$s, %8$s-%7$s-%9$s + %5$s %1$s, %3$s.%2$s.%4$s - %10$s %6$s, %8$s.%7$s.%9$s + %5$s %3$s.%2$s - %10$s %8$s.%7$s + %5$s %1$s, %2$s-%3$s - %10$s %6$s, %7$s-%8$s + %5$s %3$s-%2$s-%4$s - %10$s %8$s-%7$s-%9$s + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %3$s %2$s %1$s - %8$s %7$s %6$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s %1$s - %10$s %8$s %7$s %6$s + %5$s %3$s %2$s %1$s - %10$s %8$s %7$s %6$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %1$s, %3$s %2$s %4$s - %6$s, %8$s %7$s %9$s + %3$s-%8$s %2$s + %3$s %2$s %1$s - %8$s %7$s %6$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-pl/donottranslate-cldr.xml b/core/res/res/values-pl/donottranslate-cldr.xml new file mode 100644 index 000000000000..4ad17bf11c46 --- /dev/null +++ b/core/res/res/values-pl/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + styczeń + luty + marzec + kwiecień + maj + czerwiec + lipiec + sierpień + wrzesień + październik + listopad + grudzień + + stycznia + lutego + marca + kwietnia + maja + czerwca + lipca + sierpnia + września + października + listopada + grudnia + + sty + lut + mar + kwi + maj + cze + lip + sie + wrz + paź + lis + gru + + s + l + m + k + m + c + l + s + w + p + l + g + + niedziela + poniedziałek + wtorek + środa + czwartek + piątek + sobota + + niedz. + pon. + wt. + śr. + czw. + pt. + sob. + + niedz. + pon. + wt. + śr. + czw. + pt. + sob. + + N + P + W + Ś + C + P + S + + AM + PM + Wczoraj + Dzisiaj + Jutro + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d-%m-%Y + dd-MM-yyyy + "%s-%s-%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S %d-%m-%Y + %2$s %1$s + %1$s %3$s + %d-%m-%Y + %-e %B + %-B + %-B %Y + %b %-e + %-b + %Y %b + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s-%8$s.%7$s + %1$s, %3$s.%2$s - %6$s, %8$s.%7$s + %3$s.%2$s.%4$s-%8$s.%7$s.%9$s + %1$s, %3$s-%2$s-%4$s-%6$s, %8$s-%7$s-%9$s + %5$s %1$s, %3$s.%2$s.%4$s - %10$s %6$s, %8$s.%7$s.%9$s + %5$s %3$s.%2$s - %10$s %8$s.%7$s + %5$s %1$s, %2$s-%3$s - %10$s %6$s, %7$s-%8$s + %5$s %3$s-%2$s-%4$s - %10$s %8$s-%7$s-%9$s + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %3$s %2$s %1$s - %8$s %7$s %6$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s %1$s - %10$s %8$s %7$s %6$s + %5$s %3$s %2$s %1$s - %10$s %8$s %7$s %6$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %1$s, %3$s %2$s %4$s - %6$s, %8$s %7$s %9$s + %3$s-%8$s %2$s + %3$s %2$s %1$s - %8$s %7$s %6$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 50d245b5d8e1..c6c9bd07dec2 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -161,14 +161,10 @@ "Pozwala aplikacji zmieniać bieżącą konfigurację, na przykład lokalny lub globalny rozmiar czcionki." "resetowanie innych aplikacji" "Pozwala aplikacji na wymuszenie ponownego uruchomienia innych aplikacji." - "zapobieganie zatrzymaniu" - "Pozwala aplikacji na uruchamianie dowolnego procesu na pierwszym planie tak, że nie można go wyłączyć. Nigdy nie powinno być potrzebne normalnym aplikacjom." "wymuszanie zamknięcia aplikacji" "Pozwala aplikacji na wymuszenie zamknięcia i cofnięcia dowolnej operacji działającej na pierwszym planie. Nigdy nie powinno być potrzebne normalnym aplikacjom." "pobieranie informacji o wewnętrznym stanie systemu" "Pozwala aplikacjom na pobieranie informacji o wewnętrznym stanie systemu. Szkodliwe aplikacje mogą pobrać szeroką gamę osobistych i zabezpieczonych informacji, które normalnie nie powinny im być nigdy potrzebne." - "publikowanie usług niskiego poziomu" - "Pozwala aplikacji na publikowanie własnych usług systemowych niskiego poziomu. Szkodliwe aplikacje mogą przejąć kontrolę nad systemem oraz wykraść lub uszkodzić znajdujące się w nim dane." "monitorowanie i kontrolowanie wszystkich uruchamianych aplikacji" "Pozwala aplikacji na monitorowanie i kontrolowanie sposobu, w jaki w systemie uruchamiane są różne działania. Szkodliwe aplikacje mogą całkowicie przejąć system. Te uprawnienia potrzebne są tylko programistom, nigdy w przypadku normalnego wykorzystywania telefonu." "wysyłanie transmisji informującej o usuniętym pakiecie" @@ -181,8 +177,6 @@ "Pozwala aplikacji na kontrolowanie maksymalnej liczby uruchamianych procesów. Nigdy nie wykorzystywane przez normalne aplikacje." "zamykanie wszystkich aplikacji działających w tle" "Pozwala aplikacji na kontrolowanie, czy czynności są zawsze kończone, kiedy zaczynają działać w tle. Nigdy nie jest potrzebne normalnym aplikacjom." - "automatyczne instalowanie aktualizacji systemu" - "Pozwala aplikacji na otrzymywanie powiadomień o oczekujących aktualizacjach systemu i uruchamianie ich instalacji. Szkodliwe aplikacje mogą to wykorzystać do uszkodzenia systemu za pomocą nieuwierzytelnionych aktualizacji lub ogólnie wpłynąć na proces aktualizowania." "zmienianie statystyk dotyczących baterii" "Pozwala na zmianę zebranych statystyk dotyczących baterii. Nie do wykorzystania przez normalne aplikacje." "wyświetlanie nieuwierzytelnionych okien" @@ -418,9 +412,6 @@ "Hasło" "Zaloguj" "Błędna nazwa użytkownika lub hasło." - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%-l%P" "%-l%p" "Wyczyść powiadomienia" @@ -452,9 +443,6 @@ "enter" "usuń" "Szukaj" - "Dzisiaj" - "Wczoraj" - "Jutro" "1 miesiąc temu" "Ponad 1 miesiąc temu" @@ -536,13 +524,6 @@ "tygodni" "rok" "lat" - "niedziela" - "poniedziałek" - "wtorek" - "środa" - "czwartek" - "piątek" - "sobota" "W każdy dzień roboczy (pon–pt)" "Codziennie" "Co tydzień w %s" @@ -552,137 +533,15 @@ "Przepraszamy, ten film wideo nie nadaje się do przesyłania strumieniowego do tego urządzenia." "Niestety, nie można odtworzyć tego filmu wideo." "OK" - "rano" - "po południu" - "%m/%d/%Y" - "%1$s, %2$s, %3$s%4$s, %5$s, %6$s" - "%1$s, %2$s%4$s, %5$s" - "%2$s, %3$s%5$s, %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%1$s, %2$s, %3$s" - "%2$s, %3$s" - "%1$s, %3$s" - "%1$s, %2$s" "%1$s, %2$s" - "%1$s, %2$s" - "MMMM' 'd', 'yyyy" - "d' 'MMMM', 'yyyy" - "MMM' 'd', 'yyyy" - "d' 'MMM', 'yyyy" - "h':'mm' 'a" - "HH':'mm" "południe" "Południe" "północ" "Północ" - "%-d %B" - "%-d %B %Y" - "%B %Y" - "%H:%M:%S" - "%H:%M:%S %B %-d, %Y" - "%2$s %3$s%7$s %8$s" - "%1$s, %2$s %3$s%6$s, %7$s %8$s" - "%2$s %3$s%7$s %8$s, %9$s" - "%1$s, %2$s %3$s%6$s, %7$s %8$s, %9$s" - "%2$s %3$s, %5$s%7$s %8$s, %10$s" - "%1$s, %2$s %3$s, %5$s%6$s, %7$s %8$s, %10$s" - "%2$s %3$s, %4$s, %5$s%7$s %8$s, %9$s, %10$s" - "%1$s, %2$s %3$s, %4$s, %5$s%6$s, %7$s %8$s, %9$s, %10$s" - "%2$s/%3$s%7$s/%8$s" - "%1$s, %2$s/%3$s%6$s, %7$s/%8$s" - "%2$s/%3$s/%4$s%7$s/%8$s/%9$s" - "%1$s, %2$s/%3$s/%4$s%6$s, %7$s/%8$s/%9$s" - "%2$s/%3$s, %5$s%7$s/%8$s, %10$s" - "%1$s, %2$s/%3$s, %5$s%6$s, %7$s/%8$s, %10$s" - "%2$s/%3$s/%4$s, %5$s%7$s/%8$s/%9$s, %10$s" - "%1$s, %2$s/%3$s/%4$s, %5$s%6$s, %7$s/%8$s/%9$s, %10$s" - "%2$s %3$s%8$s" - "%1$s, %2$s %3$s%6$s, %7$s %8$s" - "%2$s %3$s%8$s, %9$s" - "%1$s, %2$s %3$s, %4$s%6$s, %7$s %8$s, %9$s" - "%2$s %3$s, %5$s%7$s %8$s, %10$s" - "%1$s, %2$s %3$s, %5$s%6$s, %7$s %8$s, %10$s" - "%2$s %3$s, %4$s, %5$s%7$s %8$s, %9$s, %10$s" - "%1$s, %2$s %3$s, %4$s, %5$s%6$s, %7$s %8$s, %9$s, %10$s" - "%-d %b %Y" - "%b %Y" - "%b %-d" - "niedziela" - "poniedziałek" - "wtorek" - "środa" - "czwartek" - "piątek" - "sobota" - "Nie" - "Pon" - "Wt" - "Śro" - "Czw" - "Pią" - "Sob" - "Nd" - "Pn" - "Wt" - "Śr" - "Czw" - "Pt" - "So" - "Nd" - "Pon" - "Wt" - "Śr" - "Czw" - "Pt" - "So" - "Nd" - "Pon" - "Czw" - "Śr" - "Czw" - "Pt" - "Sob" - "Styczeń" - "Luty" - "Marzec" - "Kwiecień" - "Maj" - "Czerwiec" - "Lipiec" - "Sierpień" - "Wrzesień" - "Październik" - "Listopad" - "Grudzień" - "Sty" - "Lut" - "Mar" - "Kwi" - "Maj" - "Cze" - "Lip" - "Sie" - "Wrz" - "Paź" - "Lis" - "Gru" - "Sty" - "Lut" - "Pon" - "Kwi" - "Maj" - "Cze" - "Lip" - "Sie" - "Wrz" - "Paź" - "Lis" - "Gru" "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "Zaznacz wszystko" diff --git a/core/res/res/values-pt-rBR/donottranslate-cldr.xml b/core/res/res/values-pt-rBR/donottranslate-cldr.xml new file mode 100644 index 000000000000..47290552dd2e --- /dev/null +++ b/core/res/res/values-pt-rBR/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + janeiro + fevereiro + março + abril + maio + junho + julho + agosto + setembro + outubro + novembro + dezembro + + janeiro + fevereiro + março + abril + maio + junho + julho + agosto + setembro + outubro + novembro + dezembro + + jan + fev + mar + abr + mai + jun + jul + ago + set + out + nov + dez + + J + F + M + A + M + J + J + A + S + O + N + D + + domingo + segunda-feira + terça-feira + quarta-feira + quinta-feira + sexta-feira + sábado + + dom + seg + ter + qua + qui + sex + sáb + + dom + seg + ter + qua + qui + sex + sáb + + D + S + T + Q + Q + S + S + + AM + PM + Ontem + Hoje + Amanhã + + %-kh%M + %-l:%M %p + %-l:%M %^p + h:mm a + H'h'mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e de %B de %Y + %H:%M:%S + %H:%M:%S %d/%m/%Y + %2$s %1$s + %1$s %3$s + %d/%m/%Y + %-e de %B + %-B + %B de %Y + %-e de %b + %-b + %b de %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s, %3$s/%2$s - %6$s, %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s, %3$s/%2$s/%4$s - %6$s, %8$s/%7$s/%9$s + %5$s %1$s, %3$s/%2$s/%4$s - %10$s %6$s, %8$s/%7$s/%9$s + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %1$s, %3$s/%2$s - %10$s %6$s, %8$s/%7$s + %5$s %3$s/%2$s/%4$s - %10$s %8$s/%7$s/%9$s + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s de %2$s - %8$s de %7$s + %1$s, %3$s de %2$s - %6$s, %8$s de %7$s + %5$s %3$s de %2$s - %10$s %8$s de %7$s + %5$s %3$s de %2$s - %10$s %8$s de %7$s + %5$s %1$s, %3$s de %2$s - %10$s %6$s, %8$s de %7$s + %5$s %1$s, %3$s de %2$s - %10$s %6$s, %8$s de %7$s + %5$s %3$s de %2$s de %4$s - %10$s %8$s de %7$s de %9$s + %5$s %3$s de %2$s de %4$s - %10$s %8$s de %7$s de %9$s + %5$s %1$s, %3$s de %2$s de %4$s - %10$s %6$s, %8$s de %7$s de %9$s + %5$s %1$s, %3$s de %2$s de %4$s - %10$s %6$s, %8$s de %7$s de %9$s + %1$s, %3$s de %2$s de %4$s - %6$s, %8$s de %7$s de %9$s + %3$s-%8$s de %2$s + %1$s, %3$s de %2$s - %6$s, %8$s de %7$s + %3$s de %2$s - %8$s de %7$s de %9$s + %3$s-%8$s de %2$s de %9$s + %1$s, %3$s de %2$s - %6$s, %8$s de %7$s de %9$s + %b + diff --git a/core/res/res/values-pt-rPT/donottranslate-cldr.xml b/core/res/res/values-pt-rPT/donottranslate-cldr.xml new file mode 100644 index 000000000000..f38a2d0499d7 --- /dev/null +++ b/core/res/res/values-pt-rPT/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Janeiro + Fevereiro + Março + Abril + Maio + Junho + Julho + Agosto + Setembro + Outubro + Novembro + Dezembro + + Janeiro + Fevereiro + Março + Abril + Maio + Junho + Julho + Agosto + Setembro + Outubro + Novembro + Dezembro + + Jan + Fev + Mar + Abr + Mai + Jun + Jul + Ago + Set + Out + Nov + Dez + + J + F + M + A + M + J + J + A + S + O + N + D + + domingo + segunda-feira + terça-feira + quarta-feira + quinta-feira + sexta-feira + sábado + + dom + seg + ter + qua + qui + sex + sáb + + dom + seg + ter + qua + qui + sex + sáb + + D + S + T + Q + Q + S + S + + Antes do meio-dia + Depois do meio-dia + Ontem + Hoje + Amanhã + + %-kh%M + %-l:%M %p + %-l:%M %^p + h:mm a + H'h'mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e de %B de %Y + %H:%M:%S + %H:%M:%S %-e de %b de %Y + %2$s %1$s + %1$s %3$s + %-e de %b de %Y + %-e de %B + %-B + %B de %Y + %-e de %b + %b + %b de %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s, %3$s/%2$s - %6$s, %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s, %3$s/%2$s/%4$s - %6$s, %8$s/%7$s/%9$s + %5$s %1$s, %3$s/%2$s/%4$s - %10$s %6$s, %8$s/%7$s/%9$s + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %1$s, %3$s/%2$s - %10$s %6$s, %8$s/%7$s + %5$s %3$s/%2$s/%4$s - %10$s %8$s/%7$s/%9$s + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s de %2$s - %8$s de %7$s + %1$s, %3$s de %2$s - %6$s, %8$s de %7$s + %5$s %3$s de %2$s - %10$s %8$s de %7$s + %5$s %3$s de %2$s - %10$s %8$s de %7$s + %5$s %1$s, %3$s de %2$s - %10$s %6$s, %8$s de %7$s + %5$s %1$s, %3$s de %2$s - %10$s %6$s, %8$s de %7$s + %5$s %3$s de %2$s de %4$s - %10$s %8$s de %7$s de %9$s + %5$s %3$s de %2$s de %4$s - %10$s %8$s de %7$s de %9$s + %5$s %1$s, %3$s de %2$s de %4$s - %10$s %6$s, %8$s de %7$s de %9$s + %5$s %1$s, %3$s de %2$s de %4$s - %10$s %6$s, %8$s de %7$s de %9$s + %1$s, %3$s de %2$s de %4$s - %6$s, %8$s de %7$s de %9$s + %3$s-%8$s de %2$s + %1$s, %3$s de %2$s - %6$s, %8$s de %7$s + %3$s de %2$s - %8$s de %7$s de %9$s + %3$s-%8$s de %2$s de %9$s + %1$s, %3$s de %2$s - %6$s, %8$s de %7$s de %9$s + %b + diff --git a/core/res/res/values-pt/donottranslate-cldr.xml b/core/res/res/values-pt/donottranslate-cldr.xml new file mode 100644 index 000000000000..47290552dd2e --- /dev/null +++ b/core/res/res/values-pt/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + janeiro + fevereiro + março + abril + maio + junho + julho + agosto + setembro + outubro + novembro + dezembro + + janeiro + fevereiro + março + abril + maio + junho + julho + agosto + setembro + outubro + novembro + dezembro + + jan + fev + mar + abr + mai + jun + jul + ago + set + out + nov + dez + + J + F + M + A + M + J + J + A + S + O + N + D + + domingo + segunda-feira + terça-feira + quarta-feira + quinta-feira + sexta-feira + sábado + + dom + seg + ter + qua + qui + sex + sáb + + dom + seg + ter + qua + qui + sex + sáb + + D + S + T + Q + Q + S + S + + AM + PM + Ontem + Hoje + Amanhã + + %-kh%M + %-l:%M %p + %-l:%M %^p + h:mm a + H'h'mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + %-e de %B de %Y + %H:%M:%S + %H:%M:%S %d/%m/%Y + %2$s %1$s + %1$s %3$s + %d/%m/%Y + %-e de %B + %-B + %B de %Y + %-e de %b + %-b + %b de %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s, %3$s/%2$s - %6$s, %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s, %3$s/%2$s/%4$s - %6$s, %8$s/%7$s/%9$s + %5$s %1$s, %3$s/%2$s/%4$s - %10$s %6$s, %8$s/%7$s/%9$s + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %1$s, %3$s/%2$s - %10$s %6$s, %8$s/%7$s + %5$s %3$s/%2$s/%4$s - %10$s %8$s/%7$s/%9$s + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s de %2$s - %8$s de %7$s + %1$s, %3$s de %2$s - %6$s, %8$s de %7$s + %5$s %3$s de %2$s - %10$s %8$s de %7$s + %5$s %3$s de %2$s - %10$s %8$s de %7$s + %5$s %1$s, %3$s de %2$s - %10$s %6$s, %8$s de %7$s + %5$s %1$s, %3$s de %2$s - %10$s %6$s, %8$s de %7$s + %5$s %3$s de %2$s de %4$s - %10$s %8$s de %7$s de %9$s + %5$s %3$s de %2$s de %4$s - %10$s %8$s de %7$s de %9$s + %5$s %1$s, %3$s de %2$s de %4$s - %10$s %6$s, %8$s de %7$s de %9$s + %5$s %1$s, %3$s de %2$s de %4$s - %10$s %6$s, %8$s de %7$s de %9$s + %1$s, %3$s de %2$s de %4$s - %6$s, %8$s de %7$s de %9$s + %3$s-%8$s de %2$s + %1$s, %3$s de %2$s - %6$s, %8$s de %7$s + %3$s de %2$s - %8$s de %7$s de %9$s + %3$s-%8$s de %2$s de %9$s + %1$s, %3$s de %2$s - %6$s, %8$s de %7$s de %9$s + %b + diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml new file mode 100644 index 000000000000..c5c5bbbdf66e --- /dev/null +++ b/core/res/res/values-pt/strings.xml @@ -0,0 +1,793 @@ + + + + "B" + "KB" + "MB" + "GB" + "TB" + "PB" + "<sem título>" + "…" + "(Nenhum número de telefone)" + "(Desconhecido)" + "Correio de voz" + "MSISDN1" + "Problema de conexão ou código MMI inválido." + "O serviço foi ativado." + "O serviço foi ativado para:" + "O serviço foi desativado." + "O registro foi bem-sucedido." + "Exclusão bem-sucedida." + "Senha incorreta" + "MMI completo." + "O PIN antigo digitado não está correto." + "O PUK digitado não está correto." + "Os PINs digitados não correspondem." + "Digite um PIN com 4 a 8 números." + "Seu cartão SIM está bloqueado pelo código PUK. Digite o PUK para desbloqueá-lo." + "Digite PUK2 para desbloquear cartão SIM." + "ID do chamador" + "ID de quem realiza a chamada" + "Transferência de chamada" + "Chamada em espera" + "Bloqueio de chamada" + "Alteração da senha" + "Alteração de PIN" + + + + + + + + + + + + + "ID do chamador assume o padrão de restrito. Próxima chamada: restrita" + "ID do chamador assume o padrão de restrito. Próxima chamada: não restrita" + "ID do chamador assume o padrão de não restrito. Próxima chamada: restrita" + "ID do chamador assume o padrão de não restrito. Próxima chamada: não restrita" + "Serviço não fornecido" + "A configuração da ID do chamador não pode ser alterada." + + + + + + + + + + + "Voz" + "Dados" + "FAX" + "SMS" + "Assíncrono" + "Sincronizar" + "Pacote" + "PAD" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "{0}: Não transferido" + "{0}: {1}" + "{0}: {1} após {2} segundos" + "{0}: Não transferido" + "{0}: Não transferido" + + + + + "OK" + "A página da web contém um erro." + "Não foi possível encontrar o URL." + "O esquema de autenticação não é suportado." + "Falha na autenticação." + "Falha na autenticação pelo servidor proxy." + "Falha na conexão com o servidor." + "Falha de comunicação com o servidor. Tente novamente mais tarde." + "Tempo limite da conexão com o servidor esgotado." + "A página contém muitos redirecionamentos do servidor." + "O protocolo não é suportado." + "Não foi possível estabelecer uma conexão segura." + "A página não pode ser aberta, pois o URL é inválido." + "Não foi possível acessar o arquivo." + "O arquivo solicitado não foi encontrado." + "Muitas solicitações sendo processadas. Tente novamente mais tarde." + "Sincronizar" + "Sincronizar" + "Muitas exclusões do %s." + "O armazenamento do telefone está cheio! Exclua alguns arquivos para liberar espaço." + "Eu" + "Opções do telefone" + "Modo silencioso" + "Ativar rede sem fio" + "Desativar a rede sem fio" + "Bloqueio de tela" + "Desligar" + "Desligando…" + "Seu telefone desligará" + "Nenhum aplicativo recente." + "Opções do telefone" + "Bloqueio de tela" + "Desligar" + "Modo silencioso" + "O som está DESLIGADO" + "O som está ATIVADO" + + + + + + + "Modo de segurança" + + + "Serviços que custam dinheiro" + "Permite que os aplicativos façam coisas que podem custar dinheiro." + "Suas mensagens" + "Ler e gravar suas mensagens SMS, e-mail e outras mensagens." + "Suas informações pessoais" + "Acesso direto aos seus contatos e calendário armazenados no telefone." + "Sua localização" + "Monitore seu local físico" + "Comunicação de rede" + "Permite que os aplicativos acessem diversos recursos de rede." + "Suas contas do Google" + "Acesse as contas do Google disponíveis." + "Controles de hardware" + "Acesso direto ao hardware no handset." + "Chamadas telefônicas" + "Monitorar, registrar e processar chamadas telefônicas." + "Ferramentas do sistema" + "Acesso de nível inferior e controle do sistema." + "Ferramentas de desenvolvimento" + "Recursos necessários apenas aos desenvolvedores de aplicativo." + + + + + "desativar ou modificar a barra de status" + "Permite que os aplicativos desativem a barra de status ou adicionem e removam ícones do sistema." + "expandir/recolher barra de status" + "Permite que um aplicativo expanda ou recolha a barra de status." + "Interceptar chamadas realizadas" + "Permite que aplicativos processem chamadas realizadas e alterem o número a ser discado. Aplicativos maliciosos podem monitorar, redirecionar ou impedir chamadas realizadas." + "receber SMS" + "Permite que o aplicativo receba e processe mensagens SMS. Aplicativos maliciosos podem monitorar suas mensagens ou excluí-las sem mostrá-las a você." + "receber MMS" + "Permite que o aplicativo receba e processe mensagens MMS. Aplicativos maliciosos podem monitorar suas mensagens ou excluí-las sem mostrá-las a você." + "enviar mensagens SMS" + "Permite que os aplicativos enviem mensagens SMS. Os aplicativos maliciosos podem causar prejuízo financeiro a você ao enviar mensagens sem a sua confirmação." + "ler SMS ou MMS" + "Permite que um aplicativo leia mensagens SMS armazenadas no seu telefone ou cartão SIM. Aplicativos maliciosos podem ler suas mensagens confidenciais." + "editar SMS ou MMS" + "Permite que um aplicativo grave mensagens SMS armazenadas no seu telefone ou cartão SIM. Aplicativos maliciosos podem excluir suas mensagens." + "receber WAP" + "Permite que o aplicativo receba e processe mensagens WAP. Aplicativos maliciosos podem monitorar suas mensagens ou excluí-las sem mostrá-las a você." + "recuperar aplicativos em execução" + "Permite que os aplicativos recuperem informações sobre as tarefas em execução no momento ou recentemente. Pode permitir que aplicativos maliciosos descubram informações particulares sobre outros aplicativos." + "reorganizar os aplicativos em execução" + "Permite que um aplicativo mova as tarefas para o primeiro ou segundo plano. Os aplicativos maliciosos podem forçar sua permanência no primeiro plano sem o seu controle." + "ativar depuração do aplicativo" + "Permite que um aplicativo ative a depuração de outro aplicativo. Aplicativos maliciosos podem usar isso para encerrar outros aplicativos." + "alterar as configurações da sua IU" + "Permite que um aplicativo mude a configuração atual, como a localidade ou o tamanho geral de fonte." + "reiniciar outros aplicativos" + "Permite que um aplicativo reinicie outros aplicativos forçosamente." + "forçar fechamento do aplicativo" + "Permite que um aplicativo force qualquer atividade que esteja em primeiro plano a fechar e voltar. Normalmente não é necessário para aplicativos normais." + "recuperar estado interno do sistema" + "Permite que um aplicativo recupere o estado interno do sistema. Aplicativos maliciosos podem recuperar um ampla variedade de informações privadas e seguras, as quais não deveriam precisar normalmente." + + + + + + + + + "monitorar e controle toda inicialização de aplicativo" + "Permite que um aplicativo monitore e controle como o sistema inicia as atividades. Os aplicativos maliciosos podem comprometer completamente o sistema. Esta permissão é necessária apenas para desenvolvimento, nunca para uso normal do telefone." + "enviar transmissão de pacote removido" + "Permite que um aplicativo transmita uma notificação de que o pacote de um aplicativo foi removido. Aplicativos maliciosos podem usar isso para encerrar outro aplicativo em execução." + "enviar transmissão de SMS recebido" + "Permite que um aplicativo transmita uma notificação de que uma mensagem SMS foi recebida. Aplicativos maliciosos podem usar isso para forjar o recebimento de mensagens SMS." + "enviar transmissão de WAP-PUSH recebido" + "Permite que um aplicativo transmita uma notificação de que uma mensagem WAP PUSH foi recebida. Aplicativos maliciosos podem usar isso para forjar o recebimento de uma mensagem MMS ou substituir silenciosamente o conteúdo de qualquer página da web por variantes maliciosas." + "limitar o número de processos em execução" + "Permite que um aplicativo controle o número máximo de processos que serão executados. Nunca é necessário para aplicativos normais." + "fazer todos os aplicativos em segundo plano fechar" + "Permite que um aplicativo controle se as atividades são sempre concluídas assim que vão para o segundo plano. Nunca é necessário para aplicativos normais." + "Modificar as estatísticas da bateria" + "Permite a modificação das estatísticas coletadas sobre a bateria. Não deve ser usado em aplicativos normais." + + + + + "exibir janelas não autorizadas" + "Permite a criação de janelas que devem ser usadas pela interface de usuário do sistema interno. Normalmente não é necessário para aplicativos normais." + "exibir alertas do nível do sistema" + "Permite que um aplicativo mostre janelas de alerta do sistema. Aplicativos maliciosos podem assumir o controle de toda a tela do telefone." + "modificar a velocidade de animação global" + "Permite que um aplicativo altere a velocidade de animação global (animações mais rápidas ou mais lentas) a qualquer momento." + "gerenciar os símbolos do aplicativo" + "Permite que um aplicativo crie e gerencie seus próprio símbolos, ignorando a ordem-Z (Z-ordering). Normalmente não é necessário para aplicativos normais." + "pressionar as teclas e os botões de controle" + "Permite que um aplicativo proporcione seus próprios eventos de entrada (pressionamentos de tecla etc.) a outros aplicativos. Aplicativos maliciosos podem usar isso para assumir o controle do telefone." + "registrar o que você digita e as ações que executa" + "Permite que os aplicativos observem as teclas que você pressiona ao interagir com outro aplicativo (como ao digitar uma senha). Normalmente não é necessário para aplicativos normais." + "aderir a um método de entrada" + "Permite que o portador se vincule à interface de nível superior de um método de entrada. Normalmente não é necessário em aplicativos normais." + "alterar orientação da tela" + "Permite que um aplicativo altere a rotação da tela a qualquer momento. Normalmente não é necessário para aplicativos normais." + "enviar sinais de Linux aos aplicativos" + "Permite que o aplicativo solicite que o sinal fornecido seja enviado a todos os processos persistentes." + "fazer com que o aplicativo execute sempre" + "Permite que um aplicativo torne partes dele mesmo persistentes, para que o sistema não possa usá-lo para outros aplicativos." + "excluir aplicativos" + "Permite que um aplicativo exclua pacotes do Android. Aplicativos maliciosos podem usar isso para excluir aplicativos importantes." + "excluir os dados de outros aplicativos" + "Permite que um aplicativo limpe os dados do usuário." + "excluir o cache de outros aplicativos" + "Permite que um aplicativo exclua arquivos armazenados em cache." + "medir o espaço de armazenamento do aplicativo" + "Permite que um aplicativo recupere seu código, dados e tamanho de cache" + "instalar os aplicativos diretamente" + "Permite que um aplicativo instale pacotes novos ou atualizados do Android. Aplicativos maliciosos podem usar isso para adicionar novos aplicativos com permissões aleatórias avançadas." + "excluir todos os dados do cache do aplicativo" + "Permite que um aplicativo libere espaço de armazenamento do telefone excluindo arquivos no diretório de cache do aplicativo. O acesso é normalmente restrito ao processo do sistema." + "ler arquivos do registro do sistema" + "Permite que um aplicativo leia os diversos arquivos de registro do sistema. Isso permite que ele descubra informações gerais sobre o que você está fazendo com o telefone, mas esses arquivos não devem conter informações pessoais ou privadas." + "ler/gravar em recursos que pertencem ao diagnóstico" + "Permite que um aplicativo leia e grave em qualquer recurso que pertença ao grupo diag; por exemplo, arquivos em /dev. Isso poderia afetar a estabilidade e a segurança do sistema. Por isso, SÓ deve ser usado para diagnósticos específicos do hardware pelo fabricante ou operador." + "ativar ou desativar componentes do aplicativo" + "Permite que um aplicativo altere a ativação ou desativação de um componente de outro aplicativo. Aplicativos maliciosos podem usar isso para desativar recursos importantes do telefone. É preciso ter permissão e cuidado no uso, pois é possível deixar os componentes do aplicativo em um estado inutilizável, inconsistente ou instável." + "definir aplicativos preferidos" + "Permite que um aplicativo modifique seus aplicativos preferidos. Isso pode permitir que aplicativos maliciosos alterem silenciosamente os aplicativos em execução, falsificando seus aplicativos existentes para coletar seus dados privados." + "modificar configurações globais do sistema" + "Permite que um aplicativo modifique os dados da configuração do sistema. Aplicativos maliciosos podem corromper a configuração do sistema." + "modificar configurações de segurança do sistema" + "Permite que um aplicativo modifique os dados das configurações de segurança dos sistemas. Não deve ser usado em aplicativos normais." + "modificar o mapa de serviços do Google" + "Permite que um aplicativo modifique o mapa de serviços do Google. Não deve ser usado em aplicativos normais." + "iniciar automaticamente na inicialização" + "Permite que um aplicativo se inicie assim que o sistema termina de inicializar. Isso pode causar uma demora na inicialização do telefone e faz com que todo o telefone fique mais lento pela execução contínua do aplicativo." + "enviar transmissão complexa" + "Permite que um aplicativo envie transmissões persistentes, as quais permanecem após o término da transmissão. Aplicativos maliciosos podem tornar o telefone lento ou instável fazendo com que use muita memória." + "ler dados de contato" + "Permite que um aplicativo leia todos os dados de contato (endereço) armazenados no telefone. Aplicativos maliciosos podem usar isso para enviar seus dados a outras pessoas." + "gravar dados de contato" + "Permite que um aplicativo modifique os dados de contato (endereço) armazenados no telefone. Aplicativos maliciosos podem usar isso para apagar ou modificar seus dados de contato." + "gravar dados do proprietário" + "Permite que um aplicativo modifique os dados do proprietário do telefone armazenados no seu telefone. Aplicativos maliciosos podem usar isso para apagar ou modificar os dados do proprietário." + "ler dados do proprietário" + "Permite que um aplicativo leia os dados do proprietário do telefone armazenados no seu telefone. Aplicativos maliciosos podem usar isso para ler os dados do proprietário." + "ler os dados do calendário" + "Permite que um aplicativo leia todos os eventos de calendário armazenados no seu telefone. Aplicativos maliciosos podem usar isso para enviar os eventos do seu calendário a outras pessoas." + "gravar dados do calendário" + "Permite que um aplicativo modifique os eventos do calendário armazenados no seu telefone. Aplicativos maliciosos podem usar isso para apagar ou modificar seus dados de contato." + "imitar fontes de localização para teste" + "Criar imitação de fontes de localização para teste. Os aplicativos maliciosos podem usar isso para sobrescrever o local e/ou status retornado pelas fontes de localização reais como GPS ou provedores de rede." + "acessar comandos extra do provedor de localização" + "Acessar comandos extra de fornecedor de localização. Aplicativos maliciosos podem usar isso para interferir com a operação do GPS ou com outras fontes de localização." + + + + + "Localização precisa (GPS)" + "Acesse fontes de localização precisa como o sistema GPS (Global Positioning System) no telefone, quando estiver disponível. Aplicativos maliciosos podem usar isso para determinar onde você está e também pode consumir energia da bateria." + "Local inadequado (com base na rede)" + "Acessar fontes de localização aproximada como o banco de dados de rede de celular para determinar a localização aproximada de um telefone, quando houver disponibilidade. Aplicativos maliciosos podem usar isso para determinar sua localização aproximada." + "acessar SurfaceFlinger" + "Permite que o aplicativo use os recursos de nível inferior do SurfaceFlinger." + "ler buffer do quadro" + "Permite que o aplicativo leia o conteúdo do buffer do quadro." + "alterar as configurações do seu áudio" + "Permite que o aplicativo modifique as configurações de áudio globais como volume e roteamento." + "gravar áudio" + "Permite que o aplicativo acesso o caminho do registro de áudio." + "tirar fotos" + "Permite que o aplicativo tire fotos com a câmera. Isso permite que o aplicativo colete imagens exibidas pela câmera a qualquer momento." + "desativar permanentemente o telefone" + "Permite que o aplicativo desative todo o telefone permanentemente. Isso é muito perigoso." + "forçar reinicializarão do telefone" + "Permite que o aplicativo force a reinicialização do telefone." + "montar e desmontar sistemas de arquivos" + "Permite que o aplicativo monte e desmonte sistemas de arquivos para armazenamento removível." + + + + + "controlar vibrador" + "Permite que o aplicativo controle o vibrador." + "controlar lanterna" + "Permite que o aplicativo controle a lanterna." + "testar hardware" + "Permite que o aplicativo controle diversos periféricos para teste de hardware." + "chamar números de telefone diretamente" + "Permite que o aplicativo chame números de telefone sem sua intervenção. Aplicativos maliciosos podem causar a aparição de chamadas inesperadas na conta do seu telefone. Observe que isso não permite que o aplicativo ligue para números de emergência." + "chamar quaisquer números de telefone diretamente" + "Permite que o aplicativo chame qualquer número de telefone, incluindo números de emergência, sem sua intervenção. Aplicativos maliciosos podem fazer chamadas desnecessárias e ilegais para serviços de emergência." + "controlar notificações de atualização de localização" + "Permite a ativação/desativação das notificações sobre atualização de localização pelo rádio. Não deve ser usado em aplicativos normais." + "acessar propriedades de verificação" + "Permite acesso de leitura/gravação às propriedades enviadas pelo serviço de verificação. Não deve ser usado em aplicativos normais." + + + + + "modificar estado do telefone" + "Permite que o aplicativo controle os recursos do telefone do dispositivo. Um aplicativo com essa permissão pode alternar entre redes, ligar e desligar o rádio e executar ações parecidas sem o notificar." + "ler estado do telefone" + "Permite que o aplicativo acesse os recursos do telefone do aparelho. Um aplicativo com essa permissão pode determinar o número deste telefone, se uma chamada está ativa, o número com o qual está chamada está conectada e outras coisas semelhantes." + "impedir que o telefone entre em repouso" + "Permite que um aplicativo impeça o telefone de entrar em repouso." + "ligar ou desligar o telefone" + "Permite que o aplicativo ligue ou desligue o telefone." + "executar no modo de teste de fábrica" + "Executar como um teste de fabricante de nível inferior, permitindo o acesso completo ao hardware do telefone. Disponível apenas quando um telefone está executando no modo de teste de fábrica." + "definir papel de parede" + "Permite que o aplicativo defina o papel de parede do sistema." + "definir dicas de tamanho de papel de parede" + "Permite que o aplicativo defina as dicas de tamanho do papel de parede do sistema." + "reiniciar o sistema com o padrão de fábrica" + "Permite que um aplicativo reinicie completamente o sistema com suas configurações de fábrica, apagando todos os dados, configuração e aplicativos instalados." + "definir fuso horário" + "Permite que um aplicativo altere o fuso horário do telefone." + "descobrir contas conhecidas" + "Permite que um aplicativo obtenha a lista de contas conhecidas pelo telefone." + "exibir estado da rede" + "Permite que um aplicativo exiba o estado de todas as redes." + "acesso total à Internet" + "Permite que um aplicativo crie soquetes de rede." + "gravar configurações de Nome do ponto de acesso" + "Permite que um aplicativo modifique as configurações de APN, como Proxy e a Porta de qualquer APN." + "alterar conectividade da rede" + "Permite que um aplicativo mude o estado da conectividade da rede." + + + + + "exibir estado da rede Wi-Fi" + "Permite que um aplicativo exiba as informações sobre o estado da rede Wi-Fi." + "Alterar estado de Wi-Fi" + "Permite que um aplicativo se conecte e desconecte dos pontos de acesso Wi-Fi e faça alterações nas redes Wi-Fi configuradas." + + + + + "administração do bluetooth" + "Permite que um aplicativo configure o telefone Bluetooth local, além de descobrir e parear com dispositivos remotos." + "criar conexões Bluetooth" + "Permite que um aplicativo exiba a configuração do telefone Bluetooth local e faça e aceite conexões com os dispositivos pareados." + "desativar bloqueio de teclado" + "Permite que um aplicativo desative o bloqueio do teclado e qualquer segurança de senha associada. Um exemplo legítimo disso é o telefone desativando o bloqueio do teclado ao receber uma chamada e reativando o bloqueio ao final da chamada." + "ler configurações de sincronização" + "Permite que um aplicativo leia as configurações de sincronização, por exemplo se a sincronização está ativada para Contatos." + "gravar configurações de sincronização" + "Permite que um aplicativo modifique as configurações de sincronização, por exemplo se a sincronização está ativada para Contatos." + "ler estatísticas de sincronização" + "Permite que um aplicativo leia as estatísticas de sincronização; por exemplo, o histórico de sincronizações realizadas." + "ler feeds inscritos" + "Permite que um aplicativo obtenha detalhes sobre os feeds sincronizados atualmente." + "gravar feeds inscritos" + "Permite que um aplicativo modifique seus feeds sincronizados recentemente. Isso poderia permitir que um aplicativo malicioso alterasse seus feeds sincronizados." + + + + + + + + + + + + + + "Página Inicial" + "Celular" + "Trabalho" + "Fax comercial" + "Fax doméstico" + "Pager" + "Outro" + "Personalizar" + + + "Página Inicial" + "Trabalho" + "Outro" + "Personalizar" + + + + + "Página Inicial" + "Trabalho" + "Outro" + "Personalizar" + + + "Página Inicial" + "Trabalho" + "Outro" + "Personalizar" + + + "Trabalho" + "Outro" + "Personalizar" + + + "AIM" + "Windows Live" + "Yahoo" + "Skype" + "QQ" + "Google Talk" + "ICQ" + "Jabber" + + "Digite o código PIN" + "Código PIN incorreto!" + "Para desbloquear, pressione Menu e 0." + "Número de emergência" + "(Sem serviço)" + "Tela bloqueada." + "Pressione Menu para desbloquear ou fazer chamada de emergência." + "Pressione Menu para desbloquear." + "Desenhar padrão para desbloqueio" + "Chamada de emergência" + "Correto!" + "Sentimos muito, tente novamente" + + + "Conecte o carregador." + "Sem cartão SIM." + "Não há um cartão SIM no telefone." + "Insira um cartão SIM." + "Rede bloqueada" + "O cartão SIM está bloqueado pelo PUK." + + + "O cartão SIM está bloqueado." + "Desbloqueando cartão SIM…" + "Você desenhou incorretamente seu padrão de desbloqueio %d vezes. "\n\n"Tente novamente em %d segundos." + "Você desenhou seu padrão de desbloqueio incorretamente %d vezes. Após mais %d tentativas sem êxito, você receberá uma solicitação para desbloquear o telefone usando seu login do Google."\n\n" Tente novamente em %d segundos." + "Tentar novamente em %d segundos." + "Esqueceu o padrão?" + "Muitas tentativas de padrão!" + + + "Nome de usuário (e-mail)" + "Senha" + "Fazer login" + "Nome de usuário ou senha inválida." + + + + + "Limpar notificações" + "Sem modificações" + "Em andamento" + "Notificações" + + + "Carregando..." + "Conecte o carregador" + "A carga da bateria está ficando baixa:" + "menos de %d%% restantes." + "Falha no teste de fábrica" + "A ação FACTORY_TEST é suportada apenas para pacotes instalados em /system/app." + "Nenhum pacote foi encontrado que forneça a ação FACTORY_TEST." + "Reiniciar" + + + + + + + "Confirmar" + "Deseja que o navegador se lembre desta senha?" + "Não agora" + "Lembre-se" + "Nunca" + "Você não tem permissão para abrir essa página." + "Texto copiado para a área de transferência." + "Mais" + "Menu+" + "espaço" + "enter" + "excluir" + "Procurar" + "1 mês atrás" + "Antes de 1 mês atrás" + + "1 segundo atrás" + "%d segundos atrás" + + + "1 minute atrás" + "%d minutos atrás" + + + "1 hora trás" + "%d horas atrás" + + + "ontem" + "%d dias atrás" + + + "em 1 segundo" + "em %d segundos" + + + "em 1 minuto" + "em %d minutos" + + + "em 1 hora" + "em %d horas" + + + "amanhã" + "em %d dias" + + + + + + + + + + + + + + + + + + "em %s" + "a %s" + "em %s" + "dia" + "dias" + "hora" + "horas" + "minuto" + "minutos" + "segundos" + "segundos" + "semana" + "semanas" + "ano" + "anos" + "Todo dia de semana (Seg–Sex)" + "Diariamente" + "Semanalmente em %s" + "Mensalmente" + "Anualmente" + "Não é possível reproduzir o vídeo" + + + "Sentimos muito, este vídeo não pode ser reproduzido." + "OK" + + + "meio-dia" + "Meio-dia" + "meia-noite" + "Meia-noite" + "%1$02d:%2$02d" + "%1$d:%2$02d:%3$02d" + "Selecionar tudo" + "Selecionar texto" + "Interromper seleção de texto" + "Recortar" + "Recortar tudo" + "Copiar" + "Copiar tudo" + "Colar" + "Copiar URL" + "Método de entrada" + + + "Editar texto" + "Pouco espaço" + "O espaço de armazenamento do telefone está diminuindo." + "OK" + "Cancelar" + "OK" + "Cancelar" + + + "LIGAR" + "DESLIGADO" + "Completar ação usando" + "Use por padrão para esta ação." + "Limpar o padrão nas Configurações da página inicial> Aplicativos > Gerenciar aplicativos." + "Selecione uma ação" + "Nenhum aplicativo pode executar essa ação." + "Sentimos muito." + "O aplicativo %1$s(processo %2$s) parou inesperadamente. Tente novamente." + "O processo %1$s parou inesperadamente. Tente novamente." + "Sentimos muito." + "A atividade %1$s (no aplicativo %2$s) não está respondendo." + "A atividade %1$s (%2$s em processamento) não está respondendo." + "O aplicativo %1$s (%2$s em processamento) não está respondendo." + "O processo %1$s não está respondendo." + "Forçar fechamento" + + + "Aguarde" + "Depuração" + "Selecione uma ação para texto" + "Volume da campainha" + "Volume da mídia" + "Reprodução usando Bluetooth" + "Volume da chamada recebida" + + + "Volume do alarme" + "Volume da notificação" + "Volume" + "Ringtone padrão" + "Ringtone padrão (%1$s)" + "Silencioso" + "Ringtones" + "Ringtone desconhecido" + + "Rede Wi-Fi disponível" + "Redes Wi-Fi disponíveis" + + + "Redes Wi-Fi abertas disponíveis" + "Redes Wi-Fi abertas disponíveis" + + "Inserir caractere" + "Aplicativo desconhecido" + "Envio de mensagens SMS" + "Uma grande quantidade de mensagens SMS está sendo enviada. Selecione \"OK\" para continuar ou \"Cancelar\" para parar de enviar." + "OK" + "Cancelar" + "Definir" + "Padrão" + "Nenhuma permissão é necessária" + "Ocultar" + "Mostrar tudo" + "Carregando…" + "Conectado via USB" + "Você conectou o telefone ao seu computador via USB. Selecione \"Montar\" se quiser copiar os arquivos entre seu computador e o cartão SD do telefone." + "Montar" + "Não montar" + "Há um problema com o uso do seu cartão SD para armazenamento USB." + "Conectado via USB" + "Selecione para copiar os arquivos para/do computador." + + + + + + + + + + + + + + + + + + + + + "Selecionar método de entrada" + " ABCDEFGHIJKLMNOPQRSTUVWXYZ" + " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/res/res/values-ro-rRO/donottranslate-cldr.xml b/core/res/res/values-ro-rRO/donottranslate-cldr.xml new file mode 100644 index 000000000000..4622445ca6c2 --- /dev/null +++ b/core/res/res/values-ro-rRO/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + ianuarie + februarie + martie + aprilie + mai + iunie + iulie + august + septembrie + octombrie + noiembrie + decembrie + + ianuarie + februarie + martie + aprilie + mai + iunie + iulie + august + septembrie + octombrie + noiembrie + decembrie + + ian. + feb. + mar. + apr. + mai + iun. + iul. + aug. + sept. + oct. + nov. + dec. + + I + F + M + A + M + I + I + A + S + O + N + D + + duminică + luni + marți + miercuri + joi + vineri + sâmbătă + + Du + Lu + Ma + Mi + Jo + Vi + + + Du + Lu + Ma + Mi + Jo + Vi + + + D + L + M + M + J + V + S + + AM + PM + ieri + azi + mâine + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S, %d.%m.%Y + %2$s, %1$s + %1$s, %3$s + %d.%m.%Y + %-e %B + %-B + %B %Y + %-e %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s - %8$s.%7$s + %1$s, %3$s.%2$s - %6$s, %8$s.%7$s + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %1$s, %3$s.%2$s.%4$s - %6$s, %8$s.%7$s.%9$s + %5$s, %1$s, %3$s/%2$s/%4$s - %10$s, %6$s, %8$s/%7$s/%9$s + %5$s, %3$s.%2$s - %10$s, %8$s.%7$s + %5$s, %1$s, %3$s %2$s - %10$s, %6$s, %8$s %7$s + %5$s, %3$s.%2$s.%4$s - %10$s, %8$s.%7$s.%9$s + %3$s, %1$s, %2$s - %6$s, %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s, %2$s - %6$s, %5$s + %1$s, %2$s, %3$s + %2$s, %3$s + %1$s, %2$s + %3$s %2$s - %8$s %7$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s + %5$s, %3$s %2$s - %10$s, %8$s %7$s + %5$s, %3$s %2$s - %10$s, %8$s %7$s + %5$s, %1$s, %3$s %2$s - %10$s, %6$s, %8$s %7$s + %5$s, %1$s, %3$s %2$s - %10$s, %6$s, %8$s %7$s + %5$s, %3$s %2$s %4$s - %10$s, %8$s %7$s %9$s + %5$s, %3$s %2$s %4$s - %10$s, %8$s %7$s %9$s + %5$s, %1$s, %3$s %2$s %4$s - %10$s, %6$s, %8$s %7$s %9$s + %5$s, %1$s, %3$s %2$s %4$s - %10$s, %6$s, %8$s %7$s %9$s + %1$s, %3$s %2$s %4$s - %6$s, %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %1$s, %3$s %2$s - %6$s, %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-ru-rRU/donottranslate-cldr.xml b/core/res/res/values-ru-rRU/donottranslate-cldr.xml new file mode 100644 index 000000000000..21c06ff3a0ab --- /dev/null +++ b/core/res/res/values-ru-rRU/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Январь + Февраль + Март + Апрель + Май + Июнь + Июль + Август + Сентябрь + Октябрь + Ноябрь + Декабрь + + января + февраля + марта + апреля + мая + июня + июля + августа + сентября + октября + ноября + декабря + + янв. + февр. + марта + апр. + мая + июня + июля + авг. + сент. + окт. + нояб. + дек. + + Я + Ф + М + А + М + И + И + А + С + О + Н + Д + + воскресенье + понедельник + вторник + среда + четверг + пятница + суббота + + Вс + Пн + Вт + Ср + Чт + Пт + Сб + + Вс + Пн + Вт + Ср + Чт + Пт + Сб + + В + П + В + С + Ч + П + С + + AM + PM + Вчера + Сегодня + Завтра + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %-e %B %Y г. + %-k:%M:%S + %-k:%M:%S %d.%m.%Y + %2$s %1$s + %1$s %3$s + %d.%m.%Y + %-e %B + %-B + %B %Y + %-e %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s - %8$s.%7$s + %1$s, %2$s-%3$s – %6$s, %7$s-%8$s + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %5$s %1$s, %4$s-%2$s-%3$s - %10$s %6$s, %9$s-%7$s-%8$s + %5$s %3$s.%2$s - %10$s %8$s.%7$s + %5$s %1$s, %2$s-%3$s - %10$s %6$s, %7$s-%8$s + %5$s %3$s.%2$s.%4$s - %10$s %8$s.%7$s.%9$s + %3$s %2$s - %6$s %5$s + %2$s - %5$s + %3$s %2$s - %6$s %5$s + %1$s %3$s + %3$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %1$s %2$s %3$s - %6$s %7$s %8$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %1$s %2$s %3$s - %10$s %6$s %7$s %8$s + %5$s %1$s %2$s %3$s - %10$s %6$s %7$s %8$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %1$s, %3$s %2$s %4$s - %6$s, %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s %2$s %3$s - %6$s %7$s %8$s + %3$s %2$s - %8$s %7$s %9$s г. + %3$s-%8$s %2$s %9$s г. + %3$s %2$s - %8$s %7$s %9$s г. + %b + diff --git a/core/res/res/values-ru/donottranslate-cldr.xml b/core/res/res/values-ru/donottranslate-cldr.xml new file mode 100644 index 000000000000..21c06ff3a0ab --- /dev/null +++ b/core/res/res/values-ru/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Январь + Февраль + Март + Апрель + Май + Июнь + Июль + Август + Сентябрь + Октябрь + Ноябрь + Декабрь + + января + февраля + марта + апреля + мая + июня + июля + августа + сентября + октября + ноября + декабря + + янв. + февр. + марта + апр. + мая + июня + июля + авг. + сент. + окт. + нояб. + дек. + + Я + Ф + М + А + М + И + И + А + С + О + Н + Д + + воскресенье + понедельник + вторник + среда + четверг + пятница + суббота + + Вс + Пн + Вт + Ср + Чт + Пт + Сб + + Вс + Пн + Вт + Ср + Чт + Пт + Сб + + В + П + В + С + Ч + П + С + + AM + PM + Вчера + Сегодня + Завтра + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %-e %B %Y г. + %-k:%M:%S + %-k:%M:%S %d.%m.%Y + %2$s %1$s + %1$s %3$s + %d.%m.%Y + %-e %B + %-B + %B %Y + %-e %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s - %8$s.%7$s + %1$s, %2$s-%3$s – %6$s, %7$s-%8$s + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %5$s %1$s, %4$s-%2$s-%3$s - %10$s %6$s, %9$s-%7$s-%8$s + %5$s %3$s.%2$s - %10$s %8$s.%7$s + %5$s %1$s, %2$s-%3$s - %10$s %6$s, %7$s-%8$s + %5$s %3$s.%2$s.%4$s - %10$s %8$s.%7$s.%9$s + %3$s %2$s - %6$s %5$s + %2$s - %5$s + %3$s %2$s - %6$s %5$s + %1$s %3$s + %3$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %1$s %2$s %3$s - %6$s %7$s %8$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %1$s %2$s %3$s - %10$s %6$s %7$s %8$s + %5$s %1$s %2$s %3$s - %10$s %6$s %7$s %8$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s - %10$s %6$s, %8$s %7$s %9$s + %1$s, %3$s %2$s %4$s - %6$s, %8$s %7$s %9$s + %3$s-%8$s %2$s + %1$s %2$s %3$s - %6$s %7$s %8$s + %3$s %2$s - %8$s %7$s %9$s г. + %3$s-%8$s %2$s %9$s г. + %3$s %2$s - %8$s %7$s %9$s г. + %b + diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index fac6cb7ea753..048f6b1c20d0 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -161,14 +161,10 @@ "Позволяет приложению изменять текущую конфигурацию, например локаль и общий размер шрифта." "перезапускать другие приложения" "Разрешает приложению принудительно перезапускать другие приложения." - "предотвращать остановку" - "Разрешает приложению запускать любые процессы на переднем плане так, что их нельзя прекратить. Не требуется обычным приложениям." "принудительно закрывать приложения" "Позволяет приложению принудительно закрывать и переводить в фоновый режим действия, работающие на переднем плане. Не требуется обычным приложениям." "получать внутреннее состояние системы" "Разрешает приложениям получать внутреннее состояние системы. Вредоносное ПО может получать множество личной и защищенной информации, которая обычно не была бы им доступна." - "публиковать службы низкого уровня" - "Разрешает приложению публиковать собственные системные службы низкого уровня. Вредоносное ПО может взломать систему и украсть или повредить данные в ней." "наблюдать и управлять запуском всех приложений" "Разрешает приложению следить и управлять тем, как система запускает действия. Вредоносное ПО может полностью нарушить работу системы. Это разрешение нужно только для разработки, но не при обычном использовании телефона." "отправлять оповещения об удалении пакетов" @@ -181,8 +177,6 @@ "Позволяет приложению контролировать максимальное количество выполняемых процессов. Не требуется обычным приложениям." "закрывать все фоновые приложения" "Разрешает приложению следить, чтобы действия всегда завершались после перехода в фоновый режим. Не требуется обычным приложениям." - "автоматически устанавливать системные обновления" - "Разрешает приложению получать уведомления о предстоящих обновлениях системы и запускать их установку. Это дает вредоносному ПО возможность повредить систему неавторизованными обновлениями или помешать выполнению обновления." "изменять данные о батарее" "Разрешает изменять данные о батарее. Не используется обычными приложениями." "отображать неавторизованные окна" @@ -418,9 +412,6 @@ "Пароль" "Войти" "Недействительное имя пользователя или пароль." - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%-l%P" "%-l%p" "Очистить уведомления" @@ -452,9 +443,6 @@ "ввод" "удалить" "Поиск" - "Сегодня" - "Вчера" - "Завтра" "1 месяц назад" "Больше 1 месяца назад" @@ -536,13 +524,6 @@ "недели" "год" "годы" - "воскресенье" - "понедельник" - "вторник" - "среда" - "четверг" - "пятница" - "суббота" "По рабочим дням (пн-пт)" "Ежедневно" "Еженедельно в: %s" @@ -552,137 +533,15 @@ "К сожалению, это видео не подходит для потокового воспроизведения на данном устройстве." "К сожалению, это видео нельзя воспроизвести." "ОК" - "AM" - "PM" - "%d/%m/%Y" - "%1$s, %2$s, %3$s%4$s, %5$s, %6$s" - "%1$s, %2$s%4$s, %5$s" - "%2$s, %3$s%5$s, %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%1$s, %2$s, %3$s" - "%2$s, %3$s" - "%1$s, %3$s" - "%1$s, %2$s" "%1$s, %2$s" - "%1$s, %2$s" - "d' 'MMMM' 'yyyy" - "d' 'MMMM' 'yyyy" - "d' 'MMM' 'yyyy" - "d' 'MMM' 'yyyy" - "h':'mm' 'a" - "HH':'mm" "полдень" "Полдень" "полночь" "Полночь" - "%-d %B" - "%-d %B %Y" - "%Y %B г." - "%H:%M:%S" - "%H:%M:%S %-d %B %Y" - "%3$s %2$s%8$s %7$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s" - "%3$s %2$s%8$s %7$s %9$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s %9$s" - "%3$s %2$s, %5$s%8$s %7$s, %10$s" - "%1$s, %3$s %2$s, %5$s%6$s, %8$s %7$s, %10$s" - "%3$s %2$s %4$s, %5$s%8$s %7$s %9$s, %10$s" - "%1$s, %3$s %2$s %4$s, %5$s%6$s, %8$s %7$s %9$s, %10$s" - "%3$s/%2$s%8$s/%7$s" - "%1$s, %3$s/%2$s%6$s, %8$s/%7$s" - "%3$s/%2$s/%4$s%8$s/%7$s/%9$s" - "%1$s, %3$s/%2$s/%4$s%6$s, %8$s/%7$s/%9$s" - "%3$s/%2$s, %5$s%8$s/%7$s, %10$s" - "%1$s, %3$s/%2$s, %5$s%6$s, %8$s/%7$s, %10$s" - "%3$s/%2$s/%4$s, %5$s%8$s/%7$s/%9$s, %10$s" - "%1$s, %3$s/%2$s/%4$s, %5$s%6$s, %8$s/%7$s/%9$s, %10$s" - "%3$s%8$s %2$s" - "%1$s, %3$s %2$s%6$s, %8$s %7$s" - "%3$s%8$s %2$s %9$s" - "%1$s, %3$s %2$s %4$s%6$s, %8$s %7$s %9$s" - "%3$s %2$s, %5$s%8$s %7$s, %10$s" - "%1$s, %3$s %2$s, %5$s%6$s, %8$s %7$s, %10$s" - "%3$s %2$s %4$s, %5$s%8$s %7$s %9$s, %10$s" - "%1$s, %3$s %2$s %4$s, %5$s%6$s, %8$s %7$s %9$s, %10$s" - "%-d %b %Y" - "%b %Y г." - "%-d %b" - "воскресенье" - "понедельник" - "вторник" - "среда" - "четверг" - "пятница" - "суббота" - "вс" - "пн" - "вт" - "ср" - "чт" - "пт" - "сб" - "вс" - "пн" - "вт" - "ср" - "чт" - "пт" - "сб" - "вс" - "пн" - "вт" - "с" - "чт" - "пт" - "сб" - "в" - "п" - "в" - "с" - "ч" - "п" - "с" - "январь" - "февраль" - "март" - "апрель" - "май" - "июнь" - "июль" - "август" - "сентябрь" - "октябрь" - "ноябрь" - "декабрь" - "янв" - "фев" - "мар" - "апр" - "май" - "июн" - "июл" - "авг" - "сен" - "окт" - "ноя" - "дек" - "Я" - "ф" - "м" - "а" - "м" - "и" - "и" - "а" - "с" - "о" - "н" - "д" "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "Выбрать все" diff --git a/core/res/res/values-sk-rSK/donottranslate-cldr.xml b/core/res/res/values-sk-rSK/donottranslate-cldr.xml new file mode 100644 index 000000000000..16239df8c04e --- /dev/null +++ b/core/res/res/values-sk-rSK/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + január + február + marec + apríl + máj + jún + júl + august + september + október + november + december + + januára + februára + marca + apríla + mája + júna + júla + augusta + septembra + októbra + novembra + decembra + + jan + feb + mar + apr + máj + jún + júl + aug + sep + okt + nov + dec + + j + f + m + a + m + j + j + a + s + o + n + d + + nedeľa + pondelok + utorok + streda + štvrtok + piatok + sobota + + ne + po + ut + st + št + pi + so + + ne + po + ut + st + št + pi + so + + N + P + U + S + Š + P + S + + dopoludnia + popoludní + Včera + Dnes + Zajtra + + %H:%M + %-l:%M %p + %-l:%M %p + h:mm a + HH:mm + %-e.%-m.%Y + d.M.yyyy + "%s.%s.%s" + %-e. %B %Y + %-k:%M:%S + %-k:%M:%S %-e.%-m.%Y + %2$s %1$s + %1$s %3$s + %-e.%-m.%Y + %-e. %B + %-B + %B %Y + %-e. %b + %b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s. - %8$s.%7$s. + %1$s, %3$s.%2$s. - %6$s, %8$s.%7$s. + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %1$s, %3$s.%2$s.%4$s - %6$s, %8$s.%7$s.%9$s + %5$s %1$s, %3$s.%2$s.%4$s - %10$s %6$s, %8$s.%7$s.%9$s + %5$s %3$s.%2$s. - %10$s %8$s.%7$s. + %5$s %1$s, %3$s.%2$s. - %10$s %6$s, %8$s.%7$s. + %5$s %3$s.%2$s.%4$s - %10$s %8$s.%7$s.%9$s + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s. %2$s - %8$s. %7$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %3$s. %2$s - %10$s %8$s. %7$s + %5$s %1$s, %3$s. %2$s - %10$s %6$s, %8$s. %7$s + %5$s %1$s, %3$s. %2$s - %10$s %6$s, %8$s. %7$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %3$s. %2$s %4$s - %10$s %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %5$s %1$s, %3$s. %2$s %4$s - %10$s %6$s, %8$s. %7$s %9$s + %1$s, %3$s. %2$s %4$s - %6$s, %8$s. %7$s %9$s + %3$s. - %8$s. %2$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s + %3$s. %2$s - %8$s. %7$s %9$s + %3$s. - %8$s. %2$s %9$s + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s %9$s + %b + diff --git a/core/res/res/values-sl-rSI/donottranslate-cldr.xml b/core/res/res/values-sl-rSI/donottranslate-cldr.xml new file mode 100644 index 000000000000..b4ea32f37abd --- /dev/null +++ b/core/res/res/values-sl-rSI/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + januar + februar + marec + april + maj + junij + julij + avgust + september + oktober + november + december + + januar + februar + marec + april + maj + junij + julij + avgust + september + oktober + november + december + + jan + feb + mar + apr + maj + jun + jul + avg + sep + okt + nov + dec + + j + f + m + a + m + j + j + a + s + o + n + d + + nedelja + ponedeljek + torek + sreda + četrtek + petek + sobota + + ned + pon + tor + sre + čet + pet + sob + + ned + pon + tor + sre + čet + pet + sob + + n + p + t + s + č + p + s + + dop. + pop. + Včeraj + Danes + Jutri + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %-e. %m. %Y + d. MM. yyyy + "%s. %s. %s" + %d. %B %Y + %H:%M:%S + %H:%M:%S %-e. %b. %Y + %2$s %1$s + %1$s %3$s + %-e. %b. %Y + %-e. %B + %-B + %B %Y + %-e. %b. + %b + %b. %Y + %1$s – %2$s + %2$s – %5$s + %3$s. %2$s. – %8$s. %7$s. + %1$s., %3$s. %2$s. – %6$s., %8$s. %7$s. + %3$s. %2$s. %4$s – %8$s. %7$s. %9$s + %1$s., %3$s. %2$s. %4$s – %6$s., %8$s. %7$s. %9$s + %5$s %1$s., %3$s. %2$s. %4$s – %10$s %6$s., %8$s. %7$s. %9$s + %5$s %3$s. %2$s. – %10$s %8$s. %7$s. + %5$s %1$s., %3$s. %2$s. – %10$s %6$s., %8$s. %7$s. + %5$s %3$s. %2$s. %4$s – %10$s %8$s. %7$s. %9$s + %3$s %1$s., %2$s – %6$s %4$s., %5$s + %1$s., %2$s – %4$s., %5$s + %3$s %2$s – %6$s %5$s + %1$s %2$s., %3$s + %2$s., %3$s + %1$s %2$s + %3$s. %2$s – %8$s. %7$s + %1$s., %3$s. %2$s. – %6$s., %8$s. %7$s. + %5$s %3$s. %2$s – %10$s %8$s. %7$s + %5$s %3$s. %2$s – %10$s %8$s. %7$s + %5$s %1$s., %3$s. %2$s. – %10$s %6$s., %8$s. %7$s. + %5$s %1$s., %3$s. %2$s. – %10$s %6$s., %8$s. %7$s. + %5$s %3$s. %2$s. %4$s – %10$s %8$s. %7$s. %9$s + %5$s %3$s. %2$s. %4$s – %10$s %8$s. %7$s. %9$s + %5$s %1$s., %3$s. %2$s. %4$s – %10$s %6$s., %8$s. %7$s. %9$s + %5$s %1$s., %3$s. %2$s. %4$s – %10$s %6$s., %8$s. %7$s. %9$s + %1$s., %3$s. %2$s. %4$s – %6$s., %8$s. %7$s. %9$s + %3$s.–%8$s. %2$s. + %1$s., %3$s. %2$s. – %6$s., %8$s. %7$s. + %3$s. %2$s. – %8$s. %7$s. %9$s + %3$s.–%8$s. %2$s. %9$s + %1$s., %3$s. %2$s. – %6$s., %8$s. %7$s. %9$s + %b + diff --git a/core/res/res/values-sr-rRS/donottranslate-cldr.xml b/core/res/res/values-sr-rRS/donottranslate-cldr.xml new file mode 100644 index 000000000000..55ca96829f4e --- /dev/null +++ b/core/res/res/values-sr-rRS/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + јануар + фебруар + март + април + мај + јун + јул + август + септембар + октобар + новембар + децембар + + јануар + фебруар + март + април + мај + јун + јул + август + септембар + октобар + новембар + децембар + + јан + феб + мар + апр + мај + јун + јул + авг + сеп + окт + нов + дец + + ј + ф + м + а + м + ј + ј + а + с + о + н + д + + недеља + понедељак + уторак + среда + четвртак + петак + субота + + нед + пон + уто + сре + чет + пет + суб + + нед + пон + уто + сре + чет + пет + суб + + н + п + у + с + ч + п + с + + пре подне + поподне + јуче + данас + сутра + + %H.%M + %-l:%M %p + %-l:%M %p + h:mm a + HH.mm + %-e.%-m.%Y. + d.M.yyyy. + "%s.%s.%s." + %d. %B %Y. + %H.%M.%S + %H.%M.%S %d.%m.%Y. + %2$s %1$s + %1$s %3$s + %d.%m.%Y. + %B %-e. + %-B + %Y %B + %b %-e. + %-b + %b. %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s - %8$s.%7$s + %1$s, %3$s.%2$s - %6$s, %8$s.%7$s + %3$s.%2$s.%4$s. - %8$s.%7$s.%9$s. + %1$s, %3$s.%2$s.%4$s. - %6$s, %8$s.%7$s.%9$s. + %5$s %1$s, %3$s. %2$s. %4$s. - %10$s %6$s, %8$s. %7$s. %9$s. + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %1$s, %2$s-%3$s - %10$s %6$s, %7$s-%8$s + %5$s %3$s.%2$s.%4$s. - %10$s %8$s.%7$s.%9$s. + %3$s %1$s, %2$s - %6$s %4$s, %5$s + %1$s, %2$s - %4$s, %5$s + %3$s %2$s - %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %2$s %3$s. - %7$s %8$s. + %1$s %3$s. %2$s - %6$s %8$s. %7$s + %5$s %2$s %3$s. - %10$s %7$s %8$s. + %5$s %2$s %3$s. - %10$s %7$s %8$s. + %5$s %1$s %3$s. %2$s - %10$s %6$s %8$s. %7$s + %5$s %1$s %3$s. %2$s - %10$s %6$s %8$s. %7$s + %5$s %3$s. %2$s %4$s. - %10$s %8$s. %7$s %9$s. + %5$s %3$s. %2$s %4$s. - %10$s %8$s. %7$s %9$s. + %5$s %1$s, %3$s. %2$s %4$s. - %10$s %6$s, %8$s. %7$s %9$s. + %5$s %1$s, %3$s. %2$s %4$s. - %10$s %6$s, %8$s. %7$s %9$s. + %1$s, %3$s. %2$s %4$s. - %6$s, %8$s. %7$s %9$s. + %3$s.-%8$s. %2$s + %1$s %3$s. %2$s - %6$s %8$s. %7$s + %3$s. %2$s - %8$s. %7$s %9$s. + %3$s.-%8$s. %2$s %9$s. + %1$s, %3$s. %2$s - %6$s, %8$s. %7$s %9$s. + %b + diff --git a/core/res/res/values-sv-rSE/donottranslate-cldr.xml b/core/res/res/values-sv-rSE/donottranslate-cldr.xml new file mode 100644 index 000000000000..a6ffc9aa77af --- /dev/null +++ b/core/res/res/values-sv-rSE/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + januari + februari + mars + april + maj + juni + juli + augusti + september + oktober + november + december + + januari + februari + mars + april + maj + juni + juli + augusti + september + oktober + november + december + + jan + feb + mar + apr + maj + jun + jul + aug + sep + okt + nov + dec + + J + F + M + A + M + J + J + A + S + O + N + D + + söndag + måndag + tisdag + onsdag + torsdag + fredag + lördag + + sön + mån + tis + ons + tors + fre + lör + + sön + mån + tis + ons + tors + fre + lör + + S + M + T + O + T + F + L + + f.m. + e.m. + igår + idag + imorgon + + %-k.%M + %-l:%M %p + %-l:%M %^p + h:mm a + H.mm + %Y-%m-%d + yyyy-MM-dd + "%s-%s-%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S %-e %b %Y + %2$s %1$s + %1$s %3$s + %-e %b %Y + %-e %B + %-B + %Y %B + %-e %b + %-b + %Y %b + %1$s – %2$s + %2$s – %5$s + %3$s/%2$s – %8$s/%7$s + %1$s %3$s/%2$s – %6$s %8$s/%7$s + %4$s-%2$s-%3$s – %9$s-%7$s-%8$s + %1$s, %4$s-%2$s-%3$s – %6$s, %9$s-%7$s-%8$s + %5$s %1$s, %4$s-%2$s-%3$s – %10$s %6$s, %9$s-%7$s-%8$s + %5$s %3$s/%2$s – %10$s %8$s/%7$s + %5$s %1$s %3$s/%2$s – %10$s %6$s %8$s/%7$s + %5$s %4$s-%2$s-%3$s – %10$s %9$s-%7$s-%8$s + %3$s %1$s %2$s – %6$s %4$s %5$s + %1$s %2$s – %4$s %5$s + %3$s %2$s – %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s %2$s – %8$s %7$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s – %10$s %6$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s – %10$s %6$s %8$s %7$s %9$s + %1$s %3$s %2$s %4$s – %6$s %8$s %7$s %9$s + %3$s–%8$s %2$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %3$s %2$s–%8$s %7$s %9$s + %3$s–%8$s %2$s %9$s + %1$s %3$s %2$s–%6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-sv/donottranslate-cldr.xml b/core/res/res/values-sv/donottranslate-cldr.xml new file mode 100644 index 000000000000..a6ffc9aa77af --- /dev/null +++ b/core/res/res/values-sv/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + januari + februari + mars + april + maj + juni + juli + augusti + september + oktober + november + december + + januari + februari + mars + april + maj + juni + juli + augusti + september + oktober + november + december + + jan + feb + mar + apr + maj + jun + jul + aug + sep + okt + nov + dec + + J + F + M + A + M + J + J + A + S + O + N + D + + söndag + måndag + tisdag + onsdag + torsdag + fredag + lördag + + sön + mån + tis + ons + tors + fre + lör + + sön + mån + tis + ons + tors + fre + lör + + S + M + T + O + T + F + L + + f.m. + e.m. + igår + idag + imorgon + + %-k.%M + %-l:%M %p + %-l:%M %^p + h:mm a + H.mm + %Y-%m-%d + yyyy-MM-dd + "%s-%s-%s" + %-e %B %Y + %H:%M:%S + %H:%M:%S %-e %b %Y + %2$s %1$s + %1$s %3$s + %-e %b %Y + %-e %B + %-B + %Y %B + %-e %b + %-b + %Y %b + %1$s – %2$s + %2$s – %5$s + %3$s/%2$s – %8$s/%7$s + %1$s %3$s/%2$s – %6$s %8$s/%7$s + %4$s-%2$s-%3$s – %9$s-%7$s-%8$s + %1$s, %4$s-%2$s-%3$s – %6$s, %9$s-%7$s-%8$s + %5$s %1$s, %4$s-%2$s-%3$s – %10$s %6$s, %9$s-%7$s-%8$s + %5$s %3$s/%2$s – %10$s %8$s/%7$s + %5$s %1$s %3$s/%2$s – %10$s %6$s %8$s/%7$s + %5$s %4$s-%2$s-%3$s – %10$s %9$s-%7$s-%8$s + %3$s %1$s %2$s – %6$s %4$s %5$s + %1$s %2$s – %4$s %5$s + %3$s %2$s – %6$s %5$s + %1$s %2$s %3$s + %2$s %3$s + %1$s %2$s + %3$s %2$s – %8$s %7$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %1$s %3$s %2$s – %10$s %6$s %8$s %7$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s – %10$s %6$s %8$s %7$s %9$s + %5$s %1$s %3$s %2$s %4$s – %10$s %6$s %8$s %7$s %9$s + %1$s %3$s %2$s %4$s – %6$s %8$s %7$s %9$s + %3$s–%8$s %2$s + %1$s %3$s %2$s – %6$s %8$s %7$s + %3$s %2$s–%8$s %7$s %9$s + %3$s–%8$s %2$s %9$s + %1$s %3$s %2$s–%6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-th-rTH/donottranslate-cldr.xml b/core/res/res/values-th-rTH/donottranslate-cldr.xml new file mode 100644 index 000000000000..b3c76a33abf5 --- /dev/null +++ b/core/res/res/values-th-rTH/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + มกราคม + กุมภาพันธ์ + มีนาคม + เมษายน + พฤษภาคม + มิถุนายน + กรกฎาคม + สิงหาคม + กันยายน + ตุลาคม + พฤศจิกายน + ธันวาคม + + มกราคม + กุมภาพันธ์ + มีนาคม + เมษายน + พฤษภาคม + มิถุนายน + กรกฎาคม + สิงหาคม + กันยายน + ตุลาคม + พฤศจิกายน + ธันวาคม + + ม.ค. + ก.พ. + มี.ค. + เม.ย. + พ.ค. + มิ.ย. + ก.ค. + ส.ค. + ก.ย. + ต.ค. + พ.ย. + ธ.ค. + + ม.ค. + ก.พ. + มี.ค. + เม.ย. + พ.ค. + มิ.ย. + ก.ค. + ส.ค. + ก.ย. + ต.ค. + พ.ย. + ธ.ค. + + วันอาทิตย์ + วันจันทร์ + วันอังคาร + วันพุธ + วันพฤหัสบดี + วันศุกร์ + วันเสาร์ + + อา. + จ. + อ. + พ. + พฤ. + ศ. + ส. + + อา. + จ. + อ. + พ. + พฤ. + ศ. + ส. + + + + + + + + + + ก่อนเที่ยง + หลังเที่ยง + เมื่อวาน + วันนี้ + พรุ่งนี้ + + %-k:%M + %-l:%M %p + %-l:%M %p + h:mm a + H:mm + %-e/%-m/%Y + d/M/yyyy + "%s/%s/%s" + %-e %B %Y + %-k:%M:%S + %-k:%M:%S, %-e %b %Y + %2$s, %1$s + %1$s, %3$s + %-e %b %Y + %-e %B + %-B + %B %Y + %-e %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s %3$s/%2$s – %6$s %8$s/%7$s + %3$s/%2$s/%4$s – %8$s/%7$s/%9$s + %1$s %3$s/%2$s/%4$s – %6$s %8$s/%7$s/%9$s + %5$s, %1$s %3$s/%2$s/%4$s - %10$s, %6$s %8$s/%7$s/%9$s + %5$s, %3$s/%2$s - %10$s, %8$s/%7$s + %5$s, %1$s, %3$s/%2$s - %10$s, %6$s, %8$s/%7$s + %5$s, %3$s/%2$s/%4$s - %10$s, %8$s/%7$s/%9$s + %3$s, %1$s %2$s - %6$s, %4$s %5$s + %1$s %2$s - %4$s %5$s + %3$s, %2$s - %6$s, %5$s + %1$s, %2$s %3$s + %2$s %3$s + %1$s, %2$s + %3$s %2$s - %8$s %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %5$s, %3$s %2$s - %10$s, %8$s %7$s + %5$s, %3$s %2$s - %10$s, %8$s %7$s + %5$s, %1$s %3$s %2$s - %10$s, %6$s %8$s %7$s + %5$s, %1$s %3$s %2$s - %10$s, %6$s %8$s %7$s + %5$s, %3$s %2$s %4$s - %10$s, %8$s %7$s %9$s + %5$s, %3$s %2$s %4$s - %10$s, %8$s %7$s %9$s + %5$s, %1$s %3$s %2$s %4$s - %10$s, %6$s %8$s %7$s %9$s + %5$s, %1$s %3$s %2$s %4$s - %10$s, %6$s %8$s %7$s %9$s + %1$s %3$s %2$s %4$s - %6$s %8$s %7$s %9$s + %3$s – %8$s %2$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s – %8$s %7$s %9$s + %3$s–%8$s %2$s %9$s + %1$s %3$s %2$s – %6$s %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-tr-rTR/donottranslate-cldr.xml b/core/res/res/values-tr-rTR/donottranslate-cldr.xml new file mode 100644 index 000000000000..d61230593437 --- /dev/null +++ b/core/res/res/values-tr-rTR/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Ocak + Şubat + Mart + Nisan + Mayıs + Haziran + Temmuz + Ağustos + Eylül + Ekim + Kasım + Aralık + + Ocak + Şubat + Mart + Nisan + Mayıs + Haziran + Temmuz + Ağustos + Eylül + Ekim + Kasım + Aralık + + Oca + Şub + Mar + Nis + May + Haz + Tem + Ağu + Eyl + Eki + Kas + Ara + + O + Ş + M + N + M + H + T + A + E + E + K + A + + Pazar + Pazartesi + Salı + Çarşamba + Perşembe + Cuma + Cumartesi + + Paz + Pzt + Sal + Çar + Per + Cum + Cmt + + Paz + Pzt + Sal + Çar + Per + Cum + Cmt + + P + P + S + Ç + P + C + C + + AM + PM + Dün + Bugün + Yarın + + %H:%M + %-l:%M %p + %-l:%M %^p + h:mm a + HH:mm + %d %m %Y + dd MM yyyy + "%s %s %s" + %d %B %Y + %H:%M:%S + %H:%M:%S %d %b %Y + %2$s %1$s + %1$s %3$s + %d %b %Y + %d %B + %-B + %B %Y + %d %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s - %8$s.%7$s + %3$s.%2$s %1$s - %8$s.%7$s %6$s + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %3$s.%2$s.%4$s %1$s - %8$s.%7$s.%9$s %6$s + %5$s %3$s.%2$s.%4$s %1$s - %10$s %8$s.%7$s.%9$s %6$s + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %3$s/%2$s %1$s - %10$s %8$s/%7$s %6$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %3$s %2$s %1$s - %6$s %5$s %4$s + %2$s %1$s - %5$s %4$s + %3$s %2$s - %6$s %5$s + %1$s %3$s %2$s + %3$s %2$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %3$s %2$s %1$s - %8$s %7$s %6$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s %1$s - %10$s %8$s %7$s %6$s + %5$s %3$s %2$s %1$s - %10$s %8$s %7$s %6$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s %1$s - %10$s %8$s %7$s %9$s %6$s + %5$s %3$s %2$s %4$s %1$s - %10$s %8$s %7$s %9$s %6$s + %3$s %2$s %4$s %1$s - %8$s %7$s %9$s %6$s + %3$s-%8$s %2$s + %3$s %2$s %1$s - %8$s %7$s %6$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %3$s %2$s %9$s %1$s - %8$s %7$s y %6$s + %b + diff --git a/core/res/res/values-tr/donottranslate-cldr.xml b/core/res/res/values-tr/donottranslate-cldr.xml new file mode 100644 index 000000000000..d61230593437 --- /dev/null +++ b/core/res/res/values-tr/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Ocak + Şubat + Mart + Nisan + Mayıs + Haziran + Temmuz + Ağustos + Eylül + Ekim + Kasım + Aralık + + Ocak + Şubat + Mart + Nisan + Mayıs + Haziran + Temmuz + Ağustos + Eylül + Ekim + Kasım + Aralık + + Oca + Şub + Mar + Nis + May + Haz + Tem + Ağu + Eyl + Eki + Kas + Ara + + O + Ş + M + N + M + H + T + A + E + E + K + A + + Pazar + Pazartesi + Salı + Çarşamba + Perşembe + Cuma + Cumartesi + + Paz + Pzt + Sal + Çar + Per + Cum + Cmt + + Paz + Pzt + Sal + Çar + Per + Cum + Cmt + + P + P + S + Ç + P + C + C + + AM + PM + Dün + Bugün + Yarın + + %H:%M + %-l:%M %p + %-l:%M %^p + h:mm a + HH:mm + %d %m %Y + dd MM yyyy + "%s %s %s" + %d %B %Y + %H:%M:%S + %H:%M:%S %d %b %Y + %2$s %1$s + %1$s %3$s + %d %b %Y + %d %B + %-B + %B %Y + %d %b + %-b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s.%2$s - %8$s.%7$s + %3$s.%2$s %1$s - %8$s.%7$s %6$s + %3$s.%2$s.%4$s - %8$s.%7$s.%9$s + %3$s.%2$s.%4$s %1$s - %8$s.%7$s.%9$s %6$s + %5$s %3$s.%2$s.%4$s %1$s - %10$s %8$s.%7$s.%9$s %6$s + %5$s %3$s/%2$s - %10$s %8$s/%7$s + %5$s %3$s/%2$s %1$s - %10$s %8$s/%7$s %6$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %3$s %2$s %1$s - %6$s %5$s %4$s + %2$s %1$s - %5$s %4$s + %3$s %2$s - %6$s %5$s + %1$s %3$s %2$s + %3$s %2$s + %1$s %2$s + %3$s %2$s - %8$s %7$s + %3$s %2$s %1$s - %8$s %7$s %6$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s - %10$s %8$s %7$s + %5$s %3$s %2$s %1$s - %10$s %8$s %7$s %6$s + %5$s %3$s %2$s %1$s - %10$s %8$s %7$s %6$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s - %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s %1$s - %10$s %8$s %7$s %9$s %6$s + %5$s %3$s %2$s %4$s %1$s - %10$s %8$s %7$s %9$s %6$s + %3$s %2$s %4$s %1$s - %8$s %7$s %9$s %6$s + %3$s-%8$s %2$s + %3$s %2$s %1$s - %8$s %7$s %6$s + %3$s %2$s - %8$s %7$s %9$s + %3$s-%8$s %2$s %9$s + %3$s %2$s %9$s %1$s - %8$s %7$s y %6$s + %b + diff --git a/core/res/res/values-uk-rUA/donottranslate-cldr.xml b/core/res/res/values-uk-rUA/donottranslate-cldr.xml new file mode 100644 index 000000000000..c51f8d1eae06 --- /dev/null +++ b/core/res/res/values-uk-rUA/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + Січень + Лютий + Березень + Квітень + Травень + Червень + Липень + Серпень + Вересень + Жовтень + Листопад + Грудень + + січня + лютого + березня + квітня + травня + червня + липня + серпня + вересня + жовтня + листопада + грудня + + січ. + лют. + бер. + квіт. + трав. + черв. + лип. + серп. + вер. + жовт. + лист. + груд. + + С + Л + Б + К + Т + Ч + Л + С + В + Ж + Л + Г + + Неділя + Понеділок + Вівторок + Середа + Четвер + Пʼятниця + Субота + + Нд + Пн + Вт + Ср + Чт + Пт + Сб + + Нд + Пн + Вт + Ср + Чт + Пт + Сб + + Н + П + В + С + Ч + П + С + + дп + пп + Вчора + Сьогодні + Завтра + + %-k:%M + %-l:%M %p + %-l:%M %p + h:mm a + H:mm + %d.%m.%Y + dd.MM.yyyy + "%s.%s.%s" + %-e %B %Y р. + %H:%M:%S + %H:%M:%S %-e %b %Y + %2$s %1$s + %1$s %3$s + %-e %b %Y + %-e %B + %-B + %-B %Y + %-e %b + %-b + %-b %Y + %1$s – %2$s + %2$s – %5$s + %3$s.%2$s – %8$s.%7$s + %1$s, %3$s.%2$s – %6$s, %8$s.%7$s + %3$s.%2$s.%4$s – %8$s.%7$s.%9$s + %1$s, %3$s.%2$s.%4$s – %6$s, %8$s.%7$s.%9$s + %5$s %1$s, %3$s.%2$s.%4$s – %10$s %6$s, %8$s.%7$s.%9$s + %5$s %3$s.%2$s – %10$s %8$s.%7$s + %5$s %1$s, %3$s.%2$s – %10$s %6$s, %8$s.%7$s + %5$s %3$s.%2$s.%4$s – %10$s %8$s.%7$s.%9$s + %3$s %1$s, %2$s – %6$s %4$s, %5$s + %1$s, %2$s – %4$s, %5$s + %3$s %2$s – %6$s %5$s + %1$s %2$s, %3$s + %2$s, %3$s + %1$s %2$s + %3$s %2$s – %8$s %7$s + %1$s, %3$s %2$s – %6$s, %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %3$s %2$s – %10$s %8$s %7$s + %5$s %1$s, %3$s %2$s – %10$s %6$s, %8$s %7$s + %5$s %1$s, %3$s %2$s – %10$s %6$s, %8$s %7$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %3$s %2$s %4$s – %10$s %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s – %10$s %6$s, %8$s %7$s %9$s + %5$s %1$s, %3$s %2$s %4$s – %10$s %6$s, %8$s %7$s %9$s + %1$s, %3$s %2$s %4$s – %6$s, %8$s %7$s %9$s + %3$s–%8$s %2$s + %1$s, %3$s %2$s – %6$s, %8$s %7$s + %3$s %2$s – %8$s %7$s %9$s + %3$s–%8$s %2$s %9$s + %1$s, %3$s %2$s – %6$s, %8$s %7$s %9$s + %b + diff --git a/core/res/res/values-vi-rVN/donottranslate-cldr.xml b/core/res/res/values-vi-rVN/donottranslate-cldr.xml new file mode 100644 index 000000000000..72ff8b68999c --- /dev/null +++ b/core/res/res/values-vi-rVN/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + tháng một + tháng hai + tháng ba + tháng tư + tháng năm + tháng sáu + tháng bảy + tháng tám + tháng chín + tháng mười + tháng mười một + tháng mười hai + + tháng một + tháng hai + tháng ba + tháng tư + tháng năm + tháng sáu + tháng bảy + tháng tám + tháng chín + tháng mười + tháng mười một + tháng mười hai + + thg 1 + thg 2 + thg 3 + thg 4 + thg 5 + thg 6 + thg 7 + thg 8 + thg 9 + thg 10 + thg 11 + thg 12 + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + Chủ nhật + Thứ hai + Thứ ba + Thứ tư + Thứ năm + Thứ sáu + Thứ bảy + + CN + Th 2 + Th 3 + Th 4 + Th 5 + Th 6 + Th 7 + + CN + Th 2 + Th 3 + Th 4 + Th 5 + Th 6 + Th 7 + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + + SA + CH + Yesterday + Today + Tomorrow + + %-k:%M + %-l:%M %p + %-l:%M %^p + h:mm a + H:mm + %d/%m/%Y + dd/MM/yyyy + "%s/%s/%s" + Ngày %d tháng %-m năm %Y + %H:%M:%S + %d-%m-%Y %H:%M:%S + %1$s %2$s + %3$s %1$s + %d-%m-%Y + %-e %B + %-B + %B %Y + %-e %b + %b + %b %Y + %1$s - %2$s + %2$s - %5$s + %3$s/%2$s - %8$s/%7$s + %1$s, %3$s/%2$s - %6$s, %8$s/%7$s + %3$s/%2$s/%4$s - %8$s/%7$s/%9$s + %1$s, %3$s/%2$s/%4$s - %6$s, %8$s/%7$s/%9$s + %1$s, %3$s-%2$s-%4$s %5$s - %6$s, %8$s-%7$s-%9$s %10$s + %3$s-%2$s %5$s - %8$s-%7$s %10$s + %1$s, %3$s-%2$s %5$s - %6$s, %8$s-%7$s %10$s + %3$s/%2$s/%4$s %5$s - %8$s/%7$s/%9$s %10$s + %1$s %2$s %3$s - %4$s %5$s %6$s + %1$s %2$s - %4$s %5$s + %2$s %3$s - %5$s %6$s + %2$s %3$s %1$s + %2$s %3$s + %2$s %1$s + %3$s %2$s - %8$s %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + %3$s %2$s %5$s - %8$s %7$s %10$s + %3$s %2$s %5$s - %8$s %7$s %10$s + %1$s %3$s %2$s %5$s - %6$s %8$s %7$s %10$s + %1$s %3$s %2$s %5$s - %6$s %8$s %7$s %10$s + Ngày %3$s tháng %2$s năm %4$s %5$s - 'Ngày %8$s tháng %7$s năm %9$s %10$s + Ngày %3$s tháng %2$s năm %4$s %5$s - 'Ngày %8$s tháng %7$s năm %9$s %10$s + %1$s, %3$s %2$s %4$s %5$s - %6$s, %8$s %7$s %9$s %10$s + %1$s, %3$s %2$s %4$s %5$s - %6$s, %8$s %7$s %9$s %10$s + %1$s, %3$s %2$s %4$s - %6$s, %8$s %7$s %9$s + Ngày %3$s tháng %2$s - Ngày %8$s tháng %7$s + %1$s %3$s %2$s - %6$s %8$s %7$s + Ngày %3$s tháng %2$s - Ngày %8$s tháng %7$s năm %9$s + Ngày %3$s tháng %2$s - Ngày %8$s tháng M năm %9$s + %1$s, ngày %3$s %2$s - %6$s, ngày %8$s %7$s năm %9$s + %b + diff --git a/core/res/res/values-zh-rCN/donottranslate-cldr.xml b/core/res/res/values-zh-rCN/donottranslate-cldr.xml new file mode 100644 index 000000000000..6d52d7046f99 --- /dev/null +++ b/core/res/res/values-zh-rCN/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + 一月 + 二月 + 三月 + 四月 + 五月 + 六月 + 七月 + 八月 + 九月 + 十月 + 十一月 + 十二月 + + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + 星期日 + 星期一 + 星期二 + 星期三 + 星期四 + 星期五 + 星期六 + + 周日 + 周一 + 周二 + 周三 + 周四 + 周五 + 周六 + + 周日 + 周一 + 周二 + 周三 + 周四 + 周五 + 周六 + + + + + + + + + + 上午 + 下午 + 昨天 + 今天 + 明天 + + %-k:%M + %p%-l:%M + %p%-l:%M + ah:mm + H:mm + %Y-%-m-%-e + yyyy-M-d + "%s-%s-%s" + %Y年%-m月%-e日 + %p%I:%M:%S + %p%I:%M:%S %Y-%-m-%-e + %2$s %1$s + %1$s %3$s + %Y-%-m-%-e + %B%-e日 + %-B + %Y年%B + %b%-e日 + %-b + %Y年%b + %1$s–%2$s + %2$s–%5$s + %2$s-%3$s至%7$s-%8$s + %2$s-%3$s%1$s至%7$s-%8$s%6$s + %4$s-%2$s-%3$s至%9$s-%7$s-%8$s + %4$s-%2$s-%3$s%1$s至%9$s-%7$s-%8$s%6$s + %5$s %4$s年%2$s月%3$s日,%1$s–%10$s %9$s年%7$s月%8$s日,%6$s + %5$s %2$s-%3$s–%10$s %7$s-%8$s + %5$s %2$s-%3$s%1$s–%10$s %7$s-%8$s%6$s + %5$s %4$s-%2$s-%3$s–%10$s %9$s-%7$s-%8$s + %3$s %2$s%1$s–%6$s %5$s%4$s + %2$s%1$s–%5$s%4$s + %3$s %2$s–%6$s %5$s + %1$s %3$s%2$s + %3$s%2$s + %1$s %2$s + %2$s%3$s日–%7$s%8$s日 + %2$s%3$s日%1$s–%7$s%8$s日%6$s + %5$s %2$s%3$s日–%10$s %7$s%8$s日 + %5$s %2$s%3$s日–%10$s %7$s%8$s日 + %5$s %2$s%3$s日%1$s–%10$s %7$s%8$s日%6$s + %5$s %2$s%3$s日%1$s–%10$s %7$s%8$s日%6$s + %5$s %4$s年%2$s%3$s日–%10$s %9$s年%7$s%8$s日 + %5$s %4$s年%2$s%3$s日–%10$s %9$s年%7$s%8$s日 + %5$s %4$s年%2$s%3$s日%1$s–%10$s %9$s年%7$s%8$s日%6$s + %5$s %4$s年%2$s%3$s日%1$s–%10$s %9$s年%7$s%8$s日%6$s + %4$s年%2$s%3$s日%1$s–%9$s年%7$s%8$s日%6$s + %2$s%3$s日至%8$s日 + %2$s%3$s日%1$s–%7$s%8$s日%6$s + %9$s年%2$s%3$s日至%7$s%8$s日 + %9$s年%2$s%3$s日至%8$s日 + %9$s年%2$s%3$s日%1$s至%7$s%8$s日%6$s + %b + diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 54b0b97d9691..3be8aa09a5fe 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -166,14 +166,10 @@ "允许应用程序更改当前配置,例如语言设置或整体的字体大小。" "重新启动其他应用程序" "允许应用程序强制重新启动其他应用程序。" - "防止停止" - "允许应用程序在前台运行任何进程,因此该进程不能被终止。普通应用程序从不需要使用此权限。" "强制应用程序关闭" "允许应用程序强制前台的任何活动关闭和重新开始。普通应用程序从不需要使用此权限。" "检索系统内部状态" "允许应用程序检索系统的内部状态。恶意应用程序可能会借此检索通常它们本不需要的各种私有和安全信息。" - "发布低级服务" - "允许应用程序发布自己的低级系统服务。恶意应用程序可能会借此攻击系统,以及盗取或破坏系统中的任何数据。" "监视和控制所有应用程序启动" "允许应用程序监视和控制系统启动活动的方式。恶意应用程序可能会借此彻底损坏系统。此权限仅在开发时才需要,普通的手机应用不需要。" "发送包删除的广播" @@ -186,8 +182,6 @@ "允许应用程序控制运行的进程数上限。普通应用程序从不需要使用此权限。" "关闭所有后台应用程序" "允许应用程序控制活动是否始终是一转至后台就完成。普通应用程序从不需要使用此权限。" - "自动安装系统更新" - "允许应用程序接收有关未决系统更新的通知并安装这些更新。恶意应用程序可能会借此通过未经授权的更新破坏系统,通常情况下,它们会干扰更新过程。" "修改电池统计信息" "允许修改收集的电池统计信息。普通应用程序不能使用此权限。" "显示未授权的窗口" @@ -424,9 +418,6 @@ "密码" "登录" "用户名或密码无效。" - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%P%-l点" "%p%-l点" "清除通知" @@ -458,9 +449,6 @@ "Enter 键" "删除" "搜索" - "今天" - "昨天" - "明天" "1 个月前" "1 个月前" @@ -542,13 +530,6 @@ "周" "年" "年" - "周日" - "周一" - "周二" - "周三" - "周四" - "周五" - "周六" "每个工作日(周一到周五)" "每天" "每周的%s" @@ -558,137 +539,15 @@ "抱歉,该视频不适合在此设备上播放。" "很抱歉,此视频不能播放。" "确定" - "上午" - "下午" - "%Y%m%d 日" - "%2$s%1$s %3$s%5$s%4$s %6$s" - "%2$s%1$s%5$s%4$s" - "%2$s %3$s%5$s %6$s" - "%2$s%5$s" - "%1$s%2$s" - "%3$s%2$s %1$s" - "%3$s%2$s" - "%3$s %1$s" - "%1$s%2$s" "%1$s%2$s" - "%2$s %1$s" - "yyyy' 年 'MMMM' 月 'd' 日'" - "yyyy' 年 'MMMM' 月 'd' 日'" - "yyyy' 年 'MMM' 月 'd' 日'" - "yyyy' 年 'd' 月 'MMM' 日'" - "h':'mm' 'a" - "HH':'mm" "中午" "中午" "午夜" "午夜" - "%B%-d 日" - "%Y%B%-d 日" - "%Y%B 月" - "%H:%M:%S" - "%Y%B%-d%H:%M:%S" - "%2$s%3$s 日至 %7$s%8$s 日" - "%2$s%3$s%1$s%7$s%8$s%6$s" - "%9$s%2$s%3$s 日至 %7$s%8$s 日" - "%9$s%2$s%3$s%1$s%7$s%8$s%6$s" - "%2$s%3$s%5$s%7$s%8$s%10$s" - "%2$s%3$s%1$s %5$s%7$s%8$s%6$s %10$s" - "%4$s%2$s%3$s%5$s%9$s%7$s%8$s%10$s" - "%4$s%2$s%3$s%1$s %5$s 至 – %9$s%7$s%8$s%6$s %10$s" - "%2$s%3$s 日至 %7$s%8$s 日" - "%2$s%3$s%1$s%7$s%8$s%6$s" - "%4$s%2$s%3$s 日至 %9$s%7$s%8$s 日" - "%4$s%2$s%3$s%1$s%9$s%7$s%8$s%6$s" - "%2$s%3$s%5$s%7$s%8$s%10$s" - "%2$s%3$s%1$s %5$s%7$s%8$s%6$s %10$s" - "%4$s%2$s%3$s%5$s%9$s%7$s%8$s%10$s" - "%4$s%2$s%3$s%1$s %5$s%9$s%7$s%8$s%6$s %10$s" - "%2$s%3$s 日至 %8$s 日" - "%2$s%3$s%1$s%7$s%8$s%6$s" - "%9$s%2$s%3$s 日至 %8$s 日" - "%4$s%2$s%3$s%1$s%9$s%7$s%8$s%6$s" - "%2$s%3$s%5$s%7$s%8$s%10$s" - "%2$s%3$s%1$s %5$s%7$s%8$s%6$s %10$s" - "%4$s%2$s%3$s%5$s%9$s%7$s%8$s%10$s" - "%4$s%2$s%3$s%1$s %5$s%9$s%7$s%8$s%6$s %10$s" - "%Y%b%-d 日" - "%Y%b 月" - "%b%-d 日" - "周日" - "周一" - "周二" - "周三" - "周四" - "周五" - "周六" - "周日" - "周一" - "周二" - "周三" - "周四" - "周五" - "周六" - "周日" - "周一" - "周二" - "周三" - "周四" - "周五" - "周六" - "周日" - "周一" - "周二" - "周三" - "周四" - "周五" - "周六" - "周日" - "周一" - "周二" - "周三" - "周四" - "周五" - "周六" - "1 月" - "2 月" - "3 月" - "4 月" - "5 月" - "6 月" - "7 月" - "8 月" - "9 月" - "10 月" - "11 月" - "12 月" - "1 月" - "2 月" - "3 月" - "4 月" - "5 月" - "6 月" - "7 月" - "8 月" - "9 月" - "10 月" - "11 月" - "12 月" - "1 月" - "2 月" - "3 月" - "4 月" - "5 月" - "6 月" - "7 月" - "8 月" - "9 月" - "10 月" - "11 月" - "12 月" "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "全选" diff --git a/core/res/res/values-zh-rTW/donottranslate-cldr.xml b/core/res/res/values-zh-rTW/donottranslate-cldr.xml new file mode 100644 index 000000000000..6d52d7046f99 --- /dev/null +++ b/core/res/res/values-zh-rTW/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + 一月 + 二月 + 三月 + 四月 + 五月 + 六月 + 七月 + 八月 + 九月 + 十月 + 十一月 + 十二月 + + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + 星期日 + 星期一 + 星期二 + 星期三 + 星期四 + 星期五 + 星期六 + + 周日 + 周一 + 周二 + 周三 + 周四 + 周五 + 周六 + + 周日 + 周一 + 周二 + 周三 + 周四 + 周五 + 周六 + + + + + + + + + + 上午 + 下午 + 昨天 + 今天 + 明天 + + %-k:%M + %p%-l:%M + %p%-l:%M + ah:mm + H:mm + %Y-%-m-%-e + yyyy-M-d + "%s-%s-%s" + %Y年%-m月%-e日 + %p%I:%M:%S + %p%I:%M:%S %Y-%-m-%-e + %2$s %1$s + %1$s %3$s + %Y-%-m-%-e + %B%-e日 + %-B + %Y年%B + %b%-e日 + %-b + %Y年%b + %1$s–%2$s + %2$s–%5$s + %2$s-%3$s至%7$s-%8$s + %2$s-%3$s%1$s至%7$s-%8$s%6$s + %4$s-%2$s-%3$s至%9$s-%7$s-%8$s + %4$s-%2$s-%3$s%1$s至%9$s-%7$s-%8$s%6$s + %5$s %4$s年%2$s月%3$s日,%1$s–%10$s %9$s年%7$s月%8$s日,%6$s + %5$s %2$s-%3$s–%10$s %7$s-%8$s + %5$s %2$s-%3$s%1$s–%10$s %7$s-%8$s%6$s + %5$s %4$s-%2$s-%3$s–%10$s %9$s-%7$s-%8$s + %3$s %2$s%1$s–%6$s %5$s%4$s + %2$s%1$s–%5$s%4$s + %3$s %2$s–%6$s %5$s + %1$s %3$s%2$s + %3$s%2$s + %1$s %2$s + %2$s%3$s日–%7$s%8$s日 + %2$s%3$s日%1$s–%7$s%8$s日%6$s + %5$s %2$s%3$s日–%10$s %7$s%8$s日 + %5$s %2$s%3$s日–%10$s %7$s%8$s日 + %5$s %2$s%3$s日%1$s–%10$s %7$s%8$s日%6$s + %5$s %2$s%3$s日%1$s–%10$s %7$s%8$s日%6$s + %5$s %4$s年%2$s%3$s日–%10$s %9$s年%7$s%8$s日 + %5$s %4$s年%2$s%3$s日–%10$s %9$s年%7$s%8$s日 + %5$s %4$s年%2$s%3$s日%1$s–%10$s %9$s年%7$s%8$s日%6$s + %5$s %4$s年%2$s%3$s日%1$s–%10$s %9$s年%7$s%8$s日%6$s + %4$s年%2$s%3$s日%1$s–%9$s年%7$s%8$s日%6$s + %2$s%3$s日至%8$s日 + %2$s%3$s日%1$s–%7$s%8$s日%6$s + %9$s年%2$s%3$s日至%7$s%8$s日 + %9$s年%2$s%3$s日至%8$s日 + %9$s年%2$s%3$s日%1$s至%7$s%8$s日%6$s + %b + diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 514e304f1b25..8cace6638b43 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -161,14 +161,10 @@ "允許應用程式變更目前設定,例如:地區設定或字型大小。" "重新啟動其他應用程式" "允許應用程式強制重新啟動其他應用程式。" - "保持已停止狀態" - "允許應用程式在前端執行任何程序 (無法中止)。一般應用程式不需要此功能。" "強制關閉應用程式" "允許應用程式強制關閉在前端運作的活動並返回。一般應用程式不需要此功能。" "接收系統內部狀態" "允許應用程式取得系統內部狀態。請注意:惡意程式可能利用此功能,不當取得私人或安全性資料。" - "發行低階服務" - "允許應用程式發行自有低階系統服務。請注意:惡意程式可能利用此功能綁架系統或偷取、竄改資料內容。" "監視控制所有應用程式啟動狀態。" "允許應用程式監控管理系統啟動活動。請注意:惡意程式可能因此癱瘓整個系統。此權限只在開發時需要,一般手機使用不需要此權限。" "傳送程式已移除廣播" @@ -181,8 +177,6 @@ "允許應用程式控制可使用的最大執行緒。一般應用程式不需要此功能。" "關閉所有背景程式" "允許應用程式控制哪些活動在被移到背景執行時,儘速結束。一般應用程式不需要此功能。" - "自動安裝系統更新" - "允許應用程式接收可安裝系統更新的通知,並啟動安裝。請注意:惡意程式可能透過未授權的更新竄改系統,或干擾更新程序。" "編輯電池狀態" "允許修改電池狀態。一般應用程式不會使用此功能。" "顯示未授權視窗" @@ -418,9 +412,6 @@ "密碼" "登入" "使用者名稱或密碼錯誤。" - "h:mm AA" - "%-l:%M%P" - "%-l:%M%p" "%-l%P" "%-l%p" "清除通知" @@ -452,9 +443,6 @@ "輸入" "刪除" "搜尋" - "今天" - "昨天" - "明天" "1 個月以前" "1 個月前" @@ -536,13 +524,6 @@ "週" "年" "年" - "星期日" - "星期一" - "星期二" - "星期三" - "星期四" - "星期五" - "星期六" "每天 (週一至週五)" "每天" "每週%s" @@ -552,137 +533,15 @@ "很抱歉,影片格式無效,裝置無法進行串流處理。" "很抱歉,此影片無法播放。" "確定" - "上午" - "下午" - "%m/%d/%Y" - "%2$s%1$s%3$s%5$s%4$s%6$s" - "%2$s%1$s%5$s%4$s" - "%2$s%3$s%5$s%6$s" - "%2$s%5$s" - "%1$s%2$s" - "%3$s%2$s%1$s" - "%3$s%2$s" - "%3$s%1$s" - "%1$s%2$s" "%1$s%2$s" - "%2$s%1$s" - "MMMM' 'd','yyyy" - "yyyy' 年 'MMMM' 'd' 日'" - "MMM' 'd','yyyy" - "yyyy' 年 'MMM' 'd' 日'" - "h':'mm' 'a" - "HH':'mm" "中午" "中午" "午夜" "午夜" - "%B %-d 日" - "%Y%B %-d 日" - "%Y%B" - "%H:%M:%S" - "%Y%B %-d 日,%H:%M:%S" - "%2$s %3$s%7$s %8$s" - "%2$s %3$s 日,%1$s%7$s %8$s 日,%6$s" - "%9$s%2$s %3$s 日 – %7$s %8$s 日" - "%9$s%2$s %3$s 日,%1$s%7$s %8$s日,%6$s" - "%2$s %3$s 日,%5$s%7$s %8$s 日,%10$s" - "%2$s %3$s%1$s%5$s%7$s %8$s%6$s%10$s" - "%4$s%2$s %3$s 日,%5$s%9$s%7$s %8$s 日,%10$s" - "%4$s%2$s %3$s%1$s%5$s%9$s%7$s %8$s%6$s%10$s" - "%2$s/%3$s%7$s/%8$s" - "%2$s/%3$s%1$s%7$s/%8$s%6$s" - "%4$s/%2$s/%3$s%9$s/%7$s/%8$s" - "%4$s/%2$s/%3$s%1$s%9$s/%7$s/%8$s%6$s" - "%2$s/%3$s%5$s%7$s/%8$s%10$s" - "%2$s/%3$s%1$s%5$s%7$s/%8$s%6$s%10$s" - "%4$s/%2$s/%3$s%5$s%9$s/%7$s/%8$s%10$s" - "%4$s/%2$s/%3$s%1$s%5$s%9$s/%7$s/%8$s%6$s%10$s" - "%2$s %3$s 日 – %8$s 日" - "%2$s %3$s 日,%1$s%7$s %8$s 日,%6$s" - "%9$s%2$s %3$s 日 – %8$s 日" - "%4$s%2$s %3$s 日,%1$s%9$s%7$s %8$s 日,%6$s" - "%2$s %3$s 日,%5$s%7$s %8$s 日,%10$s" - "%2$s %3$s 日,%1$s%5$s%7$s %8$s 日,%6$s%10$s" - "%4$s%2$s %3$s%5$s%9$s%7$s %8$s%10$s" - "%4$s%2$s %3$s 日,%1$s%5$s%9$s%7$s %8$s 日,%6$s%10$s" - "%Y%b %-d 日" - "%Y%b" - "%b %-d 日" - "星期日" - "星期一" - "星期二" - "星期三" - "星期四" - "星期五" - "星期六" - "週日" - "週一" - "週二" - "週三" - "週四" - "五" - "週六" - "日" - "一" - "二" - "三" - "週四" - "五" - "六" - "日" - "一" - "二" - "三" - "四" - "五" - "六" - "日" - "一" - "二" - "三" - "四" - "五" - "六" - "1 月" - "2 月" - "3 月" - "4 月" - "5 月" - "6 月" - "7 月" - "8 月" - "9 月" - "10 月" - "11 月" - "12 月" - "1 月" - "2 月" - "3 月" - "4 月" - "5 月" - "6 月" - "7 月" - "8 月" - "9 月" - "10 月" - "11 月" - "12 月" - "1" - "2" - "3" - "4" - "5" - "6" - "7" - "8" - "9" - "10" - "11" - "12" "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" "全部選取" diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml index 7db73f014140..66f0e820cb38 100644 --- a/core/res/res/values/arrays.xml +++ b/core/res/res/values/arrays.xml @@ -110,7 +110,10 @@ alarm_clock battery phone_signal + phone_evdo_signal data_connection + cdma_eri + tty volume mute speakerphone @@ -122,4 +125,14 @@ sync_failing ime + + + + com.google.android.providers.enhancedgooglesearch/.Launcher + com.android.googlesearch/.GoogleSearch + com.android.websearch/.Search.1 + diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 633a831f0b18..6f2a5d3c6f8a 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -4,9 +4,9 @@ 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. @@ -64,10 +64,13 @@ - + + + + @@ -80,6 +83,11 @@ + + + + + @@ -94,27 +102,28 @@ - - - + + + + - + - + - + @@ -139,7 +148,7 @@ - + @@ -152,27 +161,27 @@ - - + + + the indicator that will be shown to next to the item. --> + If this is not provided, it defaults to the expandableListPreferredItemPaddingLeft. --> + indicator, use expandableListPreferredChildIndicatorLeft. --> + indicator, use expandableListPreferredChildIndicatorRight. --> - + - + @@ -221,7 +230,7 @@ any of the attributes defined by {@link android.R.styleable#WindowAnimation}. --> - + @@ -243,7 +252,7 @@ - + - + - + - + @@ -320,6 +329,8 @@ + + @@ -342,6 +353,12 @@ + + + + + + @@ -381,7 +398,7 @@ - + @@ -402,7 +419,7 @@ - + @@ -420,7 +437,7 @@ --> - + @@ -428,26 +445,26 @@ - + - + - + - + - + - + @@ -456,7 +473,7 @@ - + - - + + @@ -721,8 +738,7 @@ + Defines how to place the view, both its x and y axis, within its parent view group. --> @@ -769,11 +785,11 @@ - - + @@ -906,7 +922,7 @@ - + @@ -950,7 +966,7 @@ allows you to later retrieve the view with findViewById(R.id.my_id). --> - + - + @@ -972,7 +988,7 @@ @@ -1044,14 +1060,14 @@ - + - + @@ -1113,10 +1129,10 @@ - + - + - + @@ -1142,16 +1158,16 @@ - + - + - + @@ -1165,6 +1181,11 @@ enabled for events such as long presses. --> + + + - + - + @@ -1330,7 +1351,7 @@ - @@ -1353,13 +1374,13 @@ already visible on screen. --> + are currently visible. --> - - @@ -1458,14 +1479,14 @@ + use childIndicatorLeft. --> + use childIndicatorRight. --> - + - + - - @@ -1573,9 +1594,9 @@ - @@ -1620,7 +1641,7 @@ - + @@ -1653,27 +1674,27 @@ - + - + - + - + - + - - - - - - - - + + + + + + + + - + @@ -1695,7 +1716,7 @@ indices are ignored. You can shrink all columns by using the value "*" instead. Note that a column can be marked stretchable and shrinkable at the same time. --> - + @@ -1796,7 +1817,7 @@ - @@ -1921,7 +1942,7 @@ - @@ -1986,6 +2007,16 @@ + + + + + + + @@ -2012,7 +2043,7 @@ - + @@ -2053,6 +2084,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2136,7 +2205,7 @@ {@link android.graphics.drawable.Drawable#setVisible} --> - + - + @@ -2161,15 +2230,15 @@ restarting at the first frame after the last has finished. --> - + - + - + @@ -2192,18 +2261,18 @@ - + - + - + @@ -2214,18 +2283,18 @@ - + - + - + @@ -2233,14 +2302,14 @@ - + - + @@ -2249,7 +2318,7 @@ - + @@ -2257,7 +2326,7 @@ - + @@ -2267,6 +2336,15 @@ + + + + + + + + + @@ -2413,7 +2491,7 @@ - + @@ -2456,14 +2534,14 @@ - + - + @@ -2472,14 +2550,14 @@ - + - + @@ -2541,12 +2619,12 @@ - + - + @@ -2656,18 +2734,18 @@ - + - + - + - + @@ -2677,7 +2755,7 @@ @@ -2686,29 +2764,29 @@ plain text. This is a reference to a drawable (icon) resource. Optional attribute. --> - - - + - + @@ -2757,14 +2835,14 @@ - - - + - + + + + + + + - + - + - + - + - + - + - + - + @@ -2888,11 +2979,11 @@ - + - + @@ -2903,7 +2994,7 @@ this group. --> - + @@ -2917,7 +3008,7 @@ - + @@ -2928,15 +3019,15 @@ - + + the title should be sufficient in describing this item. --> - + @@ -2944,14 +3035,14 @@ - + - - - + @@ -2977,7 +3068,7 @@ with a View's attributes. Some subclasses (e.g., EditTextPreference) proxy all attributes to its EditText widget. --> - + @@ -3106,7 +3197,7 @@ it had previously been shown. --> - + @@ -3139,13 +3230,13 @@ - + - + - @@ -3228,7 +3319,7 @@ If not supplied, then no activity will be launched. --> - - + + diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index 7b48267045fa..7571e2453627 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -512,6 +512,9 @@ + + @@ -570,6 +573,15 @@ + + + + + + + {@link #AndroidManifestInstrumentation instrumentation}, + {@link #AndroidManifestUsesFeature uses-feature}. --> @@ -643,6 +656,8 @@ + + + + + + + - - - + {@link #AndroidManifest manifest} tag. --> + + + + + + + + + + + + + + + + + + + + + + + + - #ffffffff + #fff9f9f9 #ff1a1a1a #ff000000 #ff000000 @@ -37,7 +37,7 @@ #323232 #80323232 #808080 - #ffffffff + #fff9f9f9 #ff000000 #ffffffff #80000000 @@ -58,7 +58,7 @@ @drawable/editbox_dropdown_background_dark @drawable/editbox_dropdown_background - #ffffffff + #fff9f9f9 #ff0092f4 @@ -73,5 +73,9 @@ #eeeeee #c0c0c0 + + #7fa87f + @android:color/lighter_gray + diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 83ac8e27e146..7215685a3d46 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -34,4 +34,8 @@ 300 + + + false diff --git a/core/res/res/values/donottranslate-cldr.xml b/core/res/res/values/donottranslate-cldr.xml new file mode 100644 index 000000000000..286cc0e554f2 --- /dev/null +++ b/core/res/res/values/donottranslate-cldr.xml @@ -0,0 +1,147 @@ + + + January + February + March + April + May + June + July + August + September + October + November + December + + January + February + March + April + May + June + July + August + September + October + November + December + + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + J + F + M + A + M + J + J + A + S + O + N + D + + Sunday + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + + Sun + Mon + Tue + Wed + Thu + Fri + Sat + + Su + Mo + Tu + We + Th + Fr + Sa + + S + M + T + W + T + F + S + + am + pm + Yesterday + Today + Tomorrow + + %H:%M + %-l:%M%p + %-l:%M%^p + h:mm a + HH:mm + %-m/%-e/%Y + M/d/yyyy + "%s/%s/%s" + %B %-e, %Y + %-l:%M:%S %p + %b %-e, %Y, %-l:%M:%S %p + %1$s, %2$s + %1$s, %3$s + %b %-e, %Y + %B %-e + %-B + %B %Y + %b %-e + %-b + %b %Y + %1$s – %2$s + %2$s – %5$s + %2$s/%3$s – %7$s/%8$s + %1$s, %2$s/%3$s – %6$s, %7$s/%8$s + %2$s/%3$s/%4$s – %7$s/%8$s/%9$s + %1$s, %2$s/%3$s/%4$s – %6$s, %7$s/%8$s/%9$s + %1$s, %2$s/%3$s/%4$s, %5$s – %6$s, %7$s/%8$s/%9$s, %10$s + %2$s/%3$s, %5$s – %7$s/%8$s, %10$s + %1$s, %2$s/%3$s, %5$s – %6$s, %7$s/%8$s, %10$s + %2$s/%3$s/%4$s, %5$s – %7$s/%8$s/%9$s, %10$s + %1$s, %2$s, %3$s – %4$s, %5$s, %6$s + %1$s, %2$s – %4$s, %5$s + %2$s, %3$s – %5$s, %6$s + %1$s, %2$s, %3$s + %2$s, %3$s + %1$s, %2$s + %2$s %3$s – %7$s %8$s + %1$s, %2$s %3$s – %6$s, %7$s %8$s + %2$s %3$s, %5$s – %7$s %8$s, %10$s + %2$s %3$s, %5$s – %7$s %8$s, %10$s + %1$s, %2$s %3$s, %5$s – %6$s, %7$s %8$s, %10$s + %1$s, %2$s %3$s, %5$s – %6$s, %7$s %8$s, %10$s + %2$s %3$s, %4$s, %5$s – %7$s %8$s, %9$s, %10$s + %2$s %3$s, %4$s, %5$s – %7$s %8$s, %9$s, %10$s + %1$s, %2$s %3$s, %4$s, %5$s – %6$s, %7$s %8$s, %9$s, %10$s + %1$s, %2$s %3$s, %4$s, %5$s – %6$s, %7$s %8$s, %9$s, %10$s + %1$s, %2$s %3$s, %4$s – %6$s, %7$s %8$s, %9$s + %2$s %3$s – %8$s + %1$s, %2$s %3$s – %6$s, %7$s %8$s + %2$s %3$s – %7$s %8$s, %9$s + %2$s %3$s – %8$s, %9$s + %1$s, %2$s %3$s – %6$s, %7$s %8$s, %9$s + %b + diff --git a/core/res/res/values/donottranslate.xml b/core/res/res/values/donottranslate.xml new file mode 100644 index 000000000000..6def3bfdd1b0 --- /dev/null +++ b/core/res/res/values/donottranslate.xml @@ -0,0 +1,23 @@ + + + + + Latin-1 + diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index f90c6b82edf9..32c693757dcf 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -1091,22 +1091,73 @@ =============================================================== --> - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 331ef1a0feaa..9b9ba681713a 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -30,6 +30,11 @@ TB PB + + %1$s%2$s @@ -148,6 +153,24 @@ PAD + + + Roaming Indicator On + Roaming Indicator Off + Roaming Indicator Flashing + Out of Neighborhood + Out of Building + Roaming - Preferred System + Roaming - Available System + Roaming - Alliance Partner + Roaming - Premium Partner + Roaming - Full Service Functionality + Roaming - Partial Service Functionality + Roaming Banner On + Roaming Banner Off + Searching for Service + + Too many requests are being processed. Try again later. + + The certificate is saved in the system\'s key store. @@ -437,13 +462,6 @@ Allows an application to forcibly restart other applications. - - keep from being stopped - - Allows an application to make - any process run in the foreground, so it can\'t be killed. - Should never be needed for normal applications. - force application to close @@ -459,19 +477,18 @@ a wide variety of private and secure information that they should never normally need. - - publish low-level services - - Allows application to publish - its own low-level system services. Malicious applications may hijack - the system, and steal or corrupt any data on it. - partial shutdown Puts the activity manager into a shutdown state. Does not perform a complete shutdown. + + prevent app switches + + Prevents the user from switching to + another application. + monitor and control all application launching @@ -518,21 +535,17 @@ to control whether activities are always finished as soon as they go to the background. Never needed for normal applications. - - automatically install system updates - - Allows an application to receive - notifications about pending system updates and trigger their - installation. Malicious applications may use this to corrupt the system - with unauthorized updates, or generally interfere with the update - process. - modify battery statistics Allows the modification of collected battery statistics. Not for use by normal applications. + + control system backup and restore + + Allows the application to control the system's backup and restore mechanism. Not for use by normal applications. + display unauthorized windows @@ -763,13 +776,7 @@ Create mock location sources for testing. Malicious applications can use this to override the location and/or status returned by real - location sources such as GPS or Network providers. - - - permission to install a location collector - - Create mock location sources for testing. - Malicious applications can use this to monitor and report your location to an external source. + location sources such as GPS or Network providers or monitor and report your location to an external source. fine (GPS) location @@ -887,7 +894,6 @@ properties uploaded by the checkin service. Not for use by normal applications. - choose widgets @@ -1005,6 +1011,15 @@ to and disconnect from Wi-Fi access points, and to make changes to configured Wi-Fi networks. + + allow Wi-Fi Multicast + reception + + Allows an application to + receive packets not directly addressed to your device. This can be + useful when discovering services offered near by. It uses more power + than the non-multicast mode. + bluetooth administration @@ -1070,7 +1085,7 @@ user dictionary. - write to SD card + modify/delete SD card contents Allows an application to write to the SD card. @@ -1096,6 +1111,9 @@ Custom + + Mobile + @@ -1174,9 +1192,12 @@ Sorry, try again - + Charging (%d%%) + + Charged. @@ -1245,15 +1266,6 @@ Invalid username or password. - - "h:mm AA" - - - "%-l:%M%P" - - - "%-l:%M%p" - "%-l%P" @@ -1262,7 +1274,7 @@ - Clear notifications + Clear @@ -1295,6 +1307,9 @@ less than %d%% remaining. + + Why? Factory test failed @@ -1321,7 +1336,23 @@ Confirm - + + + read Browser\'s history and bookmarks + + Allows the application to read all + the URLs that the Browser has visited, and all of the Browser\'s bookmarks. + + write Browser\'s history and bookmarks + + Allows an application to modify the + Browser\'s history or bookmarks stored on your phone. Malicious applications + can use this to erase or modify your Browser\'s data. + Do you want the browser to remember this password? @@ -1354,12 +1385,6 @@ It is also used by the home screen's search "widget". It should be short --> Search - - Today - - Yesterday - - Tomorrow 1 month ago @@ -1493,21 +1518,6 @@ years - - Sunday - - Monday - - Tuesday - - Wednesday - - Thursday - - Friday - - Saturday - "Every weekday (Mon\u2013Fri)" @@ -1530,95 +1540,12 @@ OK - - "AM" - - - "PM" - - - - "%m/%d/%Y" - - - "%1$s, %2$s, %3$s \u2013 %4$s, %5$s, %6$s" - - - "%1$s, %2$s \u2013 %4$s, %5$s" - - "%2$s, %3$s \u2013 %5$s, %6$s" - - - "%2$s \u2013 %5$s" - - - "%1$s \u2013 %2$s" - - - "%1$s, %2$s, %3$s" - - - "%2$s, %3$s" - - - "%1$s, %3$s" - - - "%1$s, %2$s" "%1$s, %2$s" - - "%1$s, %2$s" - - - MMMM d, yyyy - - - d MMMM, yyyy - - - MMM d, yyyy - - - d MMM, yyyy - - - h:mm a - - - HH:mm "noon" @@ -1629,433 +1556,15 @@ "Midnight" - - "%B %-d" - - - "%B" - - - "%B %-d, %Y" - - - "%B %Y" - - - "%H:%M:%S" - - - "%H:%M:%S %B %-d, %Y" - - - "%2$s %3$s \u2013 %7$s %8$s" - - - "%1$s, %2$s %3$s \u2013 %6$s, %7$s %8$s" - - - "%2$s %3$s \u2013 %7$s %8$s, %9$s" - - - "%1$s, %2$s %3$s \u2013 %6$s, %7$s %8$s, %9$s" - - - "%2$s %3$s, %5$s \u2013 %7$s %8$s, %10$s" - - - "%1$s, %2$s %3$s, %5$s \u2013 %6$s, %7$s %8$s, %10$s" - - - "%2$s %3$s, %4$s, %5$s \u2013 %7$s %8$s, %9$s, %10$s" - - - "%1$s, %2$s %3$s, %4$s, %5$s \u2013 %6$s, %7$s %8$s, %9$s, %10$s" - - - - "%2$s/%3$s \u2013 %7$s/%8$s" - - - "%1$s, %2$s/%3$s \u2013 %6$s, %7$s/%8$s" - - - "%2$s/%3$s/%4$s \u2013 %7$s/%8$s/%9$s" - - - "%1$s, %2$s/%3$s/%4$s \u2013 %6$s, %7$s/%8$s/%9$s" - - - "%2$s/%3$s, %5$s \u2013 %7$s/%8$s, %10$s" - - - "%1$s, %2$s/%3$s, %5$s \u2013 %6$s, %7$s/%8$s, %10$s" - - - "%2$s/%3$s/%4$s, %5$s \u2013 %7$s/%8$s/%9$s, %10$s" - - - "%1$s, %2$s/%3$s/%4$s, %5$s \u2013 %6$s, %7$s/%8$s/%9$s, %10$s" - - - - "%2$s %3$s \u2013 %8$s" - - - "%1$s, %2$s %3$s \u2013 %6$s, %7$s %8$s" - - - "%2$s %3$s \u2013 %8$s, %9$s" - - - "%1$s, %2$s %3$s, %4$s \u2013 %6$s, %7$s %8$s, %9$s" - - - "%2$s %3$s, %5$s \u2013 %7$s %8$s, %10$s" - - - "%1$s, %2$s %3$s, %5$s \u2013 %6$s, %7$s %8$s, %10$s" - - - "%2$s %3$s, %4$s, %5$s \u2013 %7$s %8$s, %9$s, %10$s" - - - "%1$s, %2$s %3$s, %4$s, %5$s \u2013 %6$s, %7$s %8$s, %9$s, %10$s" - - - "%b %-d, %Y" - - "%b %Y" - - "%b %-d" - - "%b" - - Sunday - - Monday - - Tuesday - - Wednesday - - Thursday - - Friday - - - Saturday - - - - Sun - - - Mon - - - Tue - - - Wed - - - Thu - - - Fri - - - Sat - - - - Su - - - Mo - - - Tu - - - We - - - Th - - - Fr - - - Sa - - - - Su - - - M - - - Tu - - - W - - - Th - - - F - - - Sa - - - - S - - - M - - - T - - - W - - - T - - - F - - - S - - - - January - - - February - - - March - - - April - - - May - - - June - - - July - - - August - - - September - - - October - - - November - - - December - - - - Jan - - - Feb - - - Mar - - - Apr - - - May - - - Jun - - - Jul - - - Aug - - - Sep - - - Oct - - - Nov - - - Dec - - - - J - - - F - - - M - - - A - - - M - - - J - - - J - - - A - - - S - - - O - - - N - - - D %1$02d:%2$02d @@ -2153,6 +1662,8 @@ Process %1$s is not responding. Force close + + Report Wait @@ -2278,6 +1789,11 @@ Format + + USB debugging connected + + A computer is connected to your phone. + @@ -2296,15 +1812,15 @@ Preparing SD card - Checking for errors + Checking for errors. Blank SD card - The SD card is blank or using an unsupported filesystem. + SD card blank or has unsupported filesystem. Damaged SD card - The SD card is damaged. You may have to reformat your card. + SD card damaged. You may have to reformat it. SD card unexpectedly removed @@ -2312,11 +1828,11 @@ SD card safe to remove - The SD card can now be safely removed. + You can safely remove SD card. Removed SD card - The SD has been removed. Insert a new SD card to increase your device storage. + SD card removed. Insert a new one. No matching activities found @@ -2366,10 +1882,12 @@ - - - - + + + checked + + not checked + diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index 8160c9c9298f..7d235ec8d4ef 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -124,6 +124,12 @@ @anim/shrink_fade_out_from_bottom + + + + + + + + + + + + + diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index 9567523445e8..be836ebec4e5 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -44,12 +44,14 @@ @android:color/secondary_text_light @android:color/tertiary_text_light @android:color/primary_text_dark_disable_only + @android:color/primary_text_light_disable_only @android:color/primary_text_dark_nodisable @android:color/secondary_text_dark_nodisable @android:color/primary_text_light_nodisable @android:color/secondary_text_light_nodisable @android:color/hint_foreground_dark @android:color/hint_foreground_light + @android:color/search_url_text @android:style/TextAppearance.Large @android:style/TextAppearance.Medium @@ -141,7 +143,8 @@ @android:style/Widget.EditText @android:style/Widget.ExpandableListView @android:style/Widget.Gallery - @android:style/Widget.GridView + @android:style/Widget.GestureOverlayView + @android:style/Widget.GridView @android:style/Widget.ImageButton @android:style/Widget.ImageWell @android:style/Widget.ListView @@ -152,6 +155,9 @@ @android:style/Widget.ProgressBar.Small @android:style/Widget.ProgressBar.Small.Title @android:style/Widget.ProgressBar.Large + @android:style/Widget.ProgressBar.Inverse + @android:style/Widget.ProgressBar.Small.Inverse + @android:style/Widget.ProgressBar.Large.Inverse @android:style/Widget.SeekBar @android:style/Widget.RatingBar @android:style/Widget.RatingBar.Indicator @@ -181,6 +187,9 @@ @android:style/Preference.DialogPreference.EditTextPreference @android:style/Preference.RingtonePreference @android:layout/preference_child + + + @android:color/search_widget_corpus_item_background @@ -212,6 +221,7 @@ @android:color/secondary_text_dark @android:color/tertiary_text_dark @android:color/primary_text_light_disable_only + @android:color/primary_text_dark_disable_only @android:color/primary_text_light_nodisable @android:color/secondary_text_light_nodisable @android:color/primary_text_dark_nodisable @@ -224,9 +234,17 @@ @android:drawable/indicator_check_mark_light @android:drawable/indicator_check_mark_dark + @android:style/Widget.GestureOverlayView.White @android:style/Widget.ListView.White @drawable/divider_horizontal_bright @android:style/Widget.TextView.ListSeparator.White + + @android:style/Widget.ProgressBar.Inverse + @android:style/Widget.ProgressBar.Small.Inverse + @android:style/Widget.ProgressBar.Large.Inverse + @android:style/Widget.ProgressBar + @android:style/Widget.ProgressBar.Small + @android:style/Widget.ProgressBar.Large @@ -365,6 +383,12 @@ true @null + + + diff --git a/core/res/res/xml/eri.xml b/core/res/res/xml/eri.xml new file mode 100644 index 000000000000..cd66f1447a59 --- /dev/null +++ b/core/res/res/xml/eri.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/res/res/xml/power_profile.xml b/core/res/res/xml/power_profile.xml new file mode 100644 index 000000000000..859902e73d9e --- /dev/null +++ b/core/res/res/xml/power_profile.xml @@ -0,0 +1,40 @@ + + + + + 0 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.2 + 1 + 0.1 + 0.1 + 1 + 1 + + 1 + 0.1 + + diff --git a/data/etc/platform.xml b/data/etc/platform.xml index f80bd6b00cdc..0bd32767cba9 100644 --- a/data/etc/platform.xml +++ b/data/etc/platform.xml @@ -54,7 +54,7 @@ - + @@ -84,6 +84,24 @@ others should have a fairly open environment in which to interact with the system. --> + + + + + + + + + + + + + + + + + + @@ -114,11 +132,14 @@ + + + diff --git a/data/fonts/DroidSansJapanese.ttf b/data/fonts/DroidSansJapanese.ttf index ca7922122ab536ba681800615c3c818a7983b69d..412fa3de05e84bc5cdac712997583dbcedddbe64 100755 GIT binary patch literal 1173140 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

        TT78Mfn&N6-8~m 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�@%-bt)jW9}zCo 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�wTF6cskXlF?3=xH_d;ysYo{`r9i>g6Z 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

        12kK7MWv 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 z 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

        -OtYtN~fUx&~F)97}&vg41!17 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

        v=AyOq3B3=HO*#WegNe3k(bl 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%0D9WTt2L7XC@Ow4?2?4X5( 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�xchb7IMa-#)v`}GRdY6p5B8Tdi~yy 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

        C==Hp`JPs8X6MZye#U1 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�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�{7k#kHBG-85M_12TCynK`&JRfG); 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 literal 1174432 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

        fYrx=vP_M@2%4%iLT^ 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

        F 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

        J-x8VaFdC9_@#mJ<~ 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

        A&;^gGwWd)C~3rg^-2s85V2=MZO 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%0AGD?uw8|Nrh~X(4oa063 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�zxhyQxEwgn2PZMu~wRM2CH8&fNG^0#yusRQKny#)cXf}LM-g!?A$_PoT4l_&dMM@n_5Xuz#4DCx6%nUzI^g-wK$UqF&uG}%p&g;j)wO_H4l zxP;KEZ)ogH*69{7|{ zQ~gK}4sj+iNg+vbW>ryrMnyrnEJhwd7DGK*ZaG6UmWFyJAx~v)MF$3E1`+UhPbs+H z2O6z}l*ve2M4)LDoN_>=ov4Vx0$Ev6M?M>FeLhPE=7>=nK^s9;enB2_ zK`vfq&>~1zDP|r}?g7o4JY=YY&P<3P?H2^qnxN?Yh3Bgb#dt;oV9D5$_Knr^Nm&BrJzrmtk6FUu#cuc4?Z&ZnZ!CM3ior@;)G z%lm(m;T1y#c>fEi90Em!nmX7P@Q{X?IVcf;7A>*0C57>6Dsrmn@UttMb7`w^ghVnk z%V==M*>b8&Gn)xZfQ|)~lNVML7UGi-66OX8T|CQO>l*-m*U}O;g|A65YLpgX>5Zo^U z)wz%o3^xA22AP7m8{qC9dnv)y)tZw>P?B4emDNZzz*A9J33P0>qJRLmf-(y)my{H! z-LLWg2E$E;5_k;>IyD;Z9#QZdCMdm#8=Gn~i5eei7xfeM6ScIo^aCSN(A7EZqN45L zva+&%a&n;ZM(Y0!hW88&3GveHLfmP<^SiI1C0Ql6WWomEgFn2#^mNFHRqFt~kC!+_T2g0#g!Edw^PfqM>elY(i{24!5<1c-Vxv0)!;;D z7v$#Wt6*0yiRR(vSL6x;*~HB0B`hs1tiZ!B$|b_U$N(A{_`*;Jud5+>1d=`=_fbJw?6}1tx5OazaO%;}v=M@l8R&x|qRTXwLQs-6F295oJ z@y^_$hU z`bRUfi-@y{b1^cxh%(7r@)=2+1_Um!vg)$7uC*1_XW?fRW@i(zvr`cl6q2wO7uNvI zB7s8fB|{m5D1$6GAw=FoXyaA1kTZ!;7%Hf?0)Rp5|hV`Ng+5L985mls_isw*n0 z8=t}{A>?~K&NV?uXo7G=1Sp+?%F76b8t@s-f()>o6X4!6WKF0#kDv&z zkS4c~7_YDjzqAyebhaQDzW}d-AQzt?uMoeI1V88mos|D~8QwGGGJxuCV^IdBNC&ab7&=`JG_$mJ;z9>-+B&MPdzDVifJz{4#pF2*LzXP_-C zB%mV9#Vf!o#3>`k%)rC|^7A`}BJj#iM86i4%t08Oiy%o8G$x=cD=VrkY9Okv9;Ll> zse^%mTB@+5B$ zEd)LRo`<2G;Vrmz3cY^>Iklsw{$=j!pymy$I6DuY2$yiKl{`2zi16_8N%9J97G&pU z*Mj$hPl(rNU;tmo07``D7*wx=Vh<9C#-NrP zC=gyHipIzL`g(XIC3$#=ddkXr`uZm7f{vQy7Z(=<-7>@{$S26pFE1$1FUX(ECkVQG zftR5H+?ErBr3p~+3_hP1+|Wn&-Ewyoc2F(H$jHtiAjBogoa?9t_MZ@>HMc=fgpH4f zk%^m=S45JPolOv&*?EO{C1gOWT0lAO149dV4gs~^1NjkjBMGP;7X=@t@gdDwv_RA; zElom^GuV_vQ6kNvpuk=%fR8UgOjwjrh)0NxS=>g3fr){ap$Y5uLoV+Z2Jbe5-;<9W!f+Ea3+}wQJ zVp8BbTlD`8hL;Ro44_?+kRB<>&7in|#slglV8)OVec8l#S65LFj|4pp4MrYC(2>nu zUD-TBLVN-?!lIxR=%T_R!YYu%JYXn1YSxB zZOa*pvcn4lP__lFummkF1?@QzdCkP9%puFp$fTjgFUl_?BWfqg&&I>4&BQ0j7i_1g z$*857kjf=4%El4E>7m3eq9e~KEH0iWF3Kq?FUl#dDPCiHS={kQY=pgGMDEGPE;@fYS|V zO&6p#0}XKVF|k7`X;2LfIk_5CL!as45*Cu<6=9#j$SNc($|lXnF*P^B83dAr#JFTt zS@~>?WcV3{CCma+!}*+qK(~N0GJtj)M=(?~a6-;82DQW4*tz881Vu!7dG)1?xaBJ1 z_<2F$0or-~m7$gav?C5)s*8h`U4T+BWc8~ubUH~LG}>;iW@;?5ii?kzn^(b)*@ul+ zSU^xjl%JQAQIuUsT2fMnT~m^YmqUkHn?*NQPTWUVux8 zlaEPUid~3ZR2Xv=z2WZz8!Vwu!K1~yE>$e zwM$=CKq3-+_lbaLt3t4x9Ahv`vj97X0DF{?nH0CUo@+Vu?i1cnVc`HaVId)VRv`&i z&H)I52DD27JmRk`YJ75{=x!bkVGdpn)`mRJ=x9+x z!;HR#o!q>P;>_$`f`Z-_f@0ua)h&ik46We%TR?e}jSaMk29#k$VW||nc)$#LULeRv zpqlALoF5~X1RD=4v!#rN3XhF~sFEqKjIOk~s83v+Xk3DzI;Q|5Xm1#Yk_0!uu)33z zx(F|~tURZVt)Q@w5CaQ?ICyMfDty-+=sZwmQ&7zc+P2CLDJ(#vcp_|&R13CR8FVfz zDAj^;j%2hwKfj)YAS;`nu%)D=s3qu}cU~3`kLU_}VNWa2C8buNHN29Foa}6hDuM<) z!rZ*Vte^z}t^$I>g5Wh-{NVA;YH$qBNwF%6Ny_s`2`cgP z^9u+l=*j8{@CmbWOX#bxi>oRaf_umh8Qw4yGH^3UfNv%T)uN!z0;t3Uk1c|0b~fmF zp-_&@iO9qoNm0xS93m`if&%=Uf?WLRGVG!(tfGQ^+#;NOg~D0F!dZdx8q9pW0-`+p zg2Dp4aw<$bJR+hz0wSQZ=NTD5;~0?)^$c8)l7$UYwD2g%2y*g>a`T!>>vQu9R44L+ zRyTr12tlnhQP3zWqNoEUWeA?Y$1Nlv!z;>>9e4X>nmrZczbiVM7^XPC?qcPY84Xu%M7M2RoOFI#aTU3M&f_8~BC_Vend{Mg|E674SMFaNifykb{hZfGq^& zS5k_xOsy!8j1C zucKp-A|T9G;wquQ$l$H&Xf$)+i#D&h;8T@m7t7E}=wG1cW_ zOw!epWMt$O7UbpP`Qa-v#|-I zmHj*%96W;1@?Qvi?^PXx2!j>_=2Huqk+ARhu&A`JYpb`tVm;qFP zgUV0P1nOhaIiefq%#p~_GBy@9G0_%wacNt}%ezjvn%7hiv{hPA5H!Zk&(H&HH!6Tm zD*;^`j~L^IlwJrvo0T)9TPw!K%O}hwoa&{*%p}CjBE`zZFTf$pw1pqsnCIr>5f*3V zvxG_{cDcL6ZS=#w|POYEjIF0;HV)ibF_BVh0TgLYB%x zN>Eqs18M+ua82G@q zp*w=c%s~c<85=>?^MMA$;8i<#q6l~W4r+}Xn<`&mcePXH5Eb^;;N=zM<=GYG%Eu?b zDa6UQY|l@B_tu}hFkh*6T4Ly(6DbVff9w*Ut(D;Ea` z2Oo=qpe~OfI7B!F1qAsGz;~R0(%CD9E(Xxew~*Eccx@7-qyVp}1Qi&dybZqn8{7&3 z1rMlEV$d;XPU|dL*|{uE-oh7!y`6X@*|^zR8TCc=L%I2R_@()!;!OF)R8__J6*&2X zSvWXNOw<^d!6#w8WT-IB+SgB8y+4Wp4=%c+{wqq z%*8D%CoB(|7Xz(Z`^?Y`-C-*a-Wv?^0VI(i3N>Sxi6B#v@8AeX7FAHtex|3QBAN^V zvD_*O+&b}`D$1Oy#R39?zJh|jf_(D){DS=aVgkIJf}Csu?7RXz46F=-;M%B-0n`Qs z?fZtVDh8z|^Z|4f`#~`)a#_~GLez~@hf9{r$dXZZLNyq~J2|#x2nZ@GOL7ac@d~oA zvS$eLf(|-U6kulorC|C0HyIu>G=R%Bh<%7s%?Ok$K(>R2ia^O2Tn~e~oNUSuMQ4bv zoiU@$L4#e>*qBvZj7vmBR6veLT1dlGP@-WuAK!Ap@=Q(vc0oaYPSD-ZoKosSf&$!v zf&z>TY+%2BWT;>e0QacO7;M06pFk5rkTcytHbJiQ09VJxpd*_>N#EGW95h1&Z5Jqk z+R&or%A#iGYT)(f1tNm%f^3?g&ZUjIx;mqVS{fS%y9}EoDEc>mvGn8i@fz{?;6?hk_c;vg5B8-wdAP|uSM+!=%(y-?xC!^f>FEX1$F z!^357EzHfM2|D)8-j;`xQ&3t)Qe2RYotaNSpeewQPe56Ufr()ucy)Or_y%0?ZKt5g z24f>LP(62El#x%4Lx7uAPn4~_A3PQ-nwkoVO^N>x7+x~8Fo-iKGU!6;6VNyv%4P#& zQ&8%K)}63kG$fgjb7(MY2uF*07_tj<@`+uH^WWeTSER-$E-t3YA;>B% zswSi?%FfBoQYfe@C>-?{|qJb_Op0B_6zB^gK_G8cypWHf0L>0b2`ULHGq5sMl^(1UqFAe77^`B!AF|6L{$9q==@bnwpA&k(a3{yFf5#9TGn? zFAqD901Jx%H#;|Puz;|XR4VAMH30!onJEI^CDzKo!ypd6O9gcQ0l2--4lXa%&BZ}2 zHqZt;V}EGi*@ZasL_z6*on>_juM`_MCyNyrsEg+C zakGjD3JS7`mqsUZ^DqiCi`=hkkyyw5Z6%978T{<1znmWEiA*LCLzo&%&o@A$SuUn z&(F^!NKh7%_~M8X%1d4 z79G*DBwsUjAx=&q))*EQ3lJ#F=MrEPXJrlPp4ZVHsl_GCDlW?^ASje7tO6>(#lSO| zlNdO_C!K>&Cx>1N1`2m@iUj!_ia~r3zPQkoRhWr6Qnb9hyj<@}f{#zw{tz#(cnc39 z7It>f@yF?)UO(uv8GcZH<@c@ebLZGAoG7*Zw(_`p2Mo6e?YKm%V zs;cVfi0bPLse_?_8))=gkk5@zP+VM)PYbjWnO6gRE&ym|y!-z>hK~%DpcxuaLV}OV zBDzZK%1Ygl()?_KT>6~aT*8tTqMS|k(xO}%*<4(LY`jvSn|47XNN*VWA*)Btjm?!o zYaT$k8C2_nQv$e_17&G3Ggzk+oMfQs7&4gD&0HuV%971%oXEt;&n79rCn_qg%dIIP zsK6yI$f#q*>8#1ftZB|^qs+{zV8msl7(6YCB`S!^n9G=-k&%y=hliJ!ON3j1TSP*f zQH+s8NRpeMTbh+sf`gA!l!b+#Q-F=vn45teT;e}wXaLQ2G6*1zdw~wJhK(PBS0KZh z7og!i7>1qlY;3BmylaWDpuo0;Jv}Q0`PulGrA4JhWkd~SWL%}C4Wy;>1qH2aWjSOm zboBWJbX1$iVTB_(D31VMm-i9w9Pkl`IeBec~BKIp^*v^faW&j7E@29*M$DBHHc zXpwle4wm66HgE`J2Ru8fQWz!KPNjsTLF)<05>Bemk^7Jpr8_q0FQ*M z1v4WHKMTL0pg0F7KL-y33xhQH&h-`sPH@c+8Uuq=si2wE4uHRTi(s*4AYLl+6;vT4R3QjD30hD|PziLl0jMAMj-eNNcOv9WD$pHBAj4o7ZYa3Y1~o;%euWi; z=HTQCiZ@U~29>+w(ApeSV1cU9vUn>^O(P>w6H#Mh4Gqg!cNrN*9w|014pv6cwc73i zph-9ZBO`YhvghXkZQbDE;o;}z<>BWv;%DXJWfWv#lab*!GUQg_F$SH!!p+UizzUv| z_`uN0AkH8IuH!*HQE+X5hyiHU7YCns3rbqx;YD^(F=TEGDepjv)ezl?-f$s)USW9- z6;V-TZg~+NZdN{iac&_Ebxtm>Wzyn8T->4p#=^X2q9)2bid>?iT%yAA{7QVPWrBQM z>}>q(+`Jt8?3|puYX2!L8QptkjUhCT)k1_cH)@QL%F*?Lf$2GksYjgW$} zA$Tyt%v@O$7v;S=Uf zoi8kDCMl{c$DyLismqmSW6PApBp_;|@5jZ?%42W9!^OhE%gx5g!N3%$i~dW#my_hCd4VkXd}qL!XWt{bR&B!c#J?2G_EQR+F1uFP(bky+IIx* zBZwM5(Gi|Xm<=rHN&`HKr{>E`Qda*DC>urP_KP3Puh z=HRpz_T=MhlQfl-Pw^5cq?fnDwB#pu2 ziQxRtZmg~h8m9x@O#tn(fhsXjhYoa-IB3oQnmR#cz^iMvEQ)TT{;F*DzP8MaCd>w| zoX%Xrl0K3KqEQA0t_C3BYGB~cFU-%&%P%a<$;GAO$;8FQ$HpPWD9OSb2DAG#rD%4z%zZwo;fKvStgqbnAwQhK5pf zaIk1-Xq<|srm(LC1X`%5h^nfJg2^sd@F)epxHza;#n0;sIRQx>+}_dT<(1*(1?3G; zdVIyu4z6(x8O#}Mp?zLx{s6UE;9HZ-K||u85)@o|g7Px->=noiA|x{_9td-Fji1NZ zH-T|36C;ltn>Z^Y<9rSkIZ?gPYS6KcOtr$STtZyILM%)|OnO2rj6zK9{CvE8{5-t8 zs+>ZCY#c(S{Iar|B`kbAEZjn@q5^CJe4yPMg51n}!i?b4M?h;N-!Zg-*W-ZBMKuTI zVaQayxDu#=3vMuofClxYIQfM*1;y9}ML30gltiU?WMz%S#j07#KqrQADhRM~32e0<2!#BH~Kyn(U?me0&z53wjJdr`(yD85!Az@-PXq@$&Krh;y)s z@v$%oFllnKv1fvIlkxKKa&dtU<^!d5aq#-dsqk`FodI&905pSv{0pffAl8HDT9Ha# z0-T)_q!uph0X4?U%gYnlgZmB`C%ytSYLa@2bRN zpvj}arOd~r&8^O^rO(VL#>URW!zsX+D8S1rEYHd#CB@>vFTg0u#-XFA&#i7GEhsK7 zFDN4@$}7MxDJCo+C?v=Yx=mA1l8qHqqk;AhzGj%hpw9ryoz4vI48ACPhe5711@|!^ z$sZiZ;M@xyCIGeS@$4N2^;MPIRUMhtWt0RgUDz#ron>U4MV+OkoqZFTnX3#Sn};*? z^qlqdM8Tx9mA_S*n5ZC^gD4NH05dDAFh8dXhd8eU7ncODIEM-gD?c{}8@nLq1a59_ z2`(-!9WD?sXJ%pJ1lmf+=A5tijt)#jJr<;f?RxZ{4z4UGW-l|44}00fuV~5bibJ*xa_fp zlsn*b0ZB<_pfm#tcu{3g$qXwnp(z<$6+$|+pjni}P6I(zUQJ1F5iKq`0Y(ioHks+E z0l8oh!!IexDJ>+x%g@Pe!ow>l#LL2x$Ee8=HWj0PdPDy?~ zK0yHy4t^dcE^a2Y7AK{2+o|KmIYYr6+vlLUUgj|(1~fx!MuXpQKAwO!s6nhqQaut zg0dQXS|Qfff|8QWf{HqP1`Rw?0{j9Z-Qt3*oJE#S;v8buUdCMfTwI`Yv$#39} zopkv5WVn^Z`NTmj4p3OXW0=Ii4z3+Rbq~0hGBpO}LvTU{ueAd0_7@XpSHqGZARTUH zP?`Xh{AHqHhr)f=iE3#{*mLp<^YY6HNr94u3>TLsQzVnLfFzfWxVD6rmZ(-#R8-U? z0e*fNem>B+2^SYPj|e-P5Qm&BCz~v*5SI|MFgu4JH%O9?k531@KTncDg&~rm3tYB? z&iOJ2xe8jgi?ge1u?vcF3MsP-in0rJIAcfWtp0hlz)iRe+V1kw>0goQ+YQMMQ#6NR(NLiJyau zkE=t!JJQD)>T$eP*8wJkW*0D*jQFTfJ2mlg8{Ur6Vz5f+`$HE(Li!8Xla(RsIfAr zwE{{wPz-9*7$c=IXp%F&zsKC^f`fU1ii)U`lBJ4@xsnpQTVkSUQj#0Eu=i5q=I7_; zmH>}>h*@*<3k&meTk~@9axt)h&oOz%(8|CHUUvYRsa1x}%YhOy$PRPR9w+dm6X>uk zP`Ut#%7#1Xf8OG|=ekE(5w019X4eD~5Fp zM$mC)@X6Moz8EN{uLGaAYhohi0h($7hY#qSn#s@=Mv%SJpq>Y4WEeb33MwtYB^;;) zDr#&hE(+@Af@Zu;K@J2ZT#zFn3F(r1;tkO9O7|F3FB9Q%HW_tRd0BPQDhQBeRZ?bC zN#W$@=Tzb576%oqT$X`+Y%KhY9MHN@PJo$>pN)Z&LHPf5hSv-|V0VFLoFF^FOc_As z8O%u_XNf9{g8H4XJO>R)lpBk{2_4)!GV;*Y7IhcZ)QoX=_qZDGwbCmw5j>(SYHI3b zYAVO7q{OD2%`T_Gsu2OY;f#leUy_$ciJ#lWg$pFUk5a%D8``2@Q$IAL4rXR zI=2Mc5eg}rL9GsO?-i8#K<9-hi-Lw+LHn=3K13Ozfz&IYo!)f@EZmIT8r+H;>fB+n zj7$o`BBsntVkN4aAyOI22>N8LgZm%rKv{FzP?FG-rl0VVq(6|hQe~9qH@B9 z&Y~`iCc>&LoPq+Pa>8n$ky8s5E(3l@c`V5H}p%NQ({>*`mteCLKsZ6jp11tB5vj zVJ#MRVHRd#MHXRR32sS#UU6PgelBhSPEIZs6CoikHf=F|zDz+rK4BGMK1CHU;Nj=t z8 zH$i?dlT%QDmzRmhM+DS^;Q*g?KbgS+>6WJ`aGZex9JC4;6#C%Y363^UJ_P#-6q(S7 z0_9=IY#kzfG{6NumLNx1FIltd##S7p16)=vw(mg3l~4P6u%TNw-B$Cww|7*h>!peKR-7Z zva+!1%jrpTNNC7A$aAo=Ck}NmqL~u}h=ruz-gEE61 zQam%5L(gOZx7b0;Rgq4WWMfwcpVr8Zd&V0y1`3*K1Qo{MaWcqoNV=3Tr=XBHJ1-X- zFOz^PGmj8E4?B|(lQ2IcCzBc4j$NUN&A4K52df9!^1KHW^hRPDW-nUI8sVZeC$#E(JCr4qZVR89@y;A>Zg| z9v*8!K|w=7K?XMPj<6RD9SmGZ@yq}kF93H>j7333B`8&cFenp(TOgp}CR1b4MeLmX ze4N5e%noPLlw@U7#JBC7xknqT%Omu(AlVFdmedV(qs*#KqNl=}mcQXpKadAasX;BFYr6$m!lhV@CHi@F(Lvh@Axq0}wE=w3H1 z23H1e(5d0z){wF(d?5jJHzz3DgPOOXv;d+(7{rG5O`tc6f*RG}5&+U&1ZVxXH6naG zd|U!d%+X0~Y+S+y!hC!}s^IpuL7a&(3%@kGFc%|}Jfnnw7{98htPZ!B2&c3Or>H0= zJHG=bzn}~|D;qx#C#cEK@8G}#8rzAGa}y90W#Kl`(&f@Ll@pYZsOIBf<7eaGW98su z-~zW9zA|($7%-TE^Rhof6hi_-8bcOC0jReQ31W3o(C{jVfUmLyk7$E3Ik-gu8XJaW z2X$pObR37Kg4MGzTk(7|*V5E)E%9T&XM0Bf!tg#4O6pA}_=( z%q=CL!z;}z$Rn)4$jHPj#l*}b!pX?a?B)~4nD$B?tz%48zQ!LCW z2}-uIoUHt;oFUv?+&o<3Y=(@Atde5vLRp|Q$9b3;dD+?cxw-iGLgf0ppXQu3INx6-~dxo z2UXl4jCIHf)KLewy^(dWv8zKi_=2*yIAkBa87O6eDtY)IvN9XHxS6k;6dSjQAZSil zomD~*RE4XvspzW<2&jvy@$sqY3UUau+3>LN@rv*Y@$iWA$#C*=v9R%4%8H0+3Jd2e zGPCfqbFnpuh-e54YseT%i6}5Ji*bta@^G@T^K!6ru?jG=urLeqaw>6x4!Q#qZ1M)o zqJl0G`~tk7adSRFUSVx+E*@z=PEJlyUJfQ@VSYzr3WVB&)In6OS~Hx(E|D4>!926CW?=eidGRK3Oo$%gw~Y z$0e&9#Tco>&B4zNKD`~ZZW5H&0vJLW(iyTD3K+^5YCxqrsJRCABWM&6W%o5`F97J= zV9@v%D7S&mO@J?D1#5vGS%Z>AjUl-Zy!8~+5C$bV&;l-4HbnG7%?@a>aj>v(u=8_r zvM}?2R=&tHvv3P=^DwihiW+M%GV$>V@`~_^D={-maPo+7@^f%YfifS9rVy_HA1@oL z01LC6Ah$5Lw1EUW50e{sh>M9)hLKN@Pgq)dBIrCyK~HXeQBE-@b`EA1PA)bcE@ozK zJ`Mq1Miv%MUSUpFRwfN~W&uVfMjkF6ULIb4R(2kC(6~4|2af;~9}gcl4=)!BD<2yh zKNlAtpE3`d_5{$-n1YTdm#9UMpp=xGv>2-m4?7nxmk2Kh2QLR`Js@~Kyc0Sv18PM> zW|aLILc#4(aF-EL=|DmR))X}dRg|K}rslA%FYsfCL46_QR0bWX1Z$TBEk#jRS5e^r zwIF#!xg>d|`PhZj1r<}77zKpb`8n0tjsd?YpOBa!Xz_%kodhqN024d21UnxKuTo45=qy2A9zi~Kc79fN zJ{Ar>c2M5|RQ`Nq=wwi5uwbxd@CN57aQ_&ZAE2!S@Z=)mcy;i|pD1{w5IoRrY7CiJ z6IT{DHUsT{hYSLNrq*FTf8^%w?&9L&;_S?B#=*!h>LBXwF6uT>jh~TOGDnPwS525z zo=K8fo=c34n}yj>*wx6$$f%G@lbaU=nb|ox*qFt|Be@MZS^2rR`T0fpd1XX-)Oa0=#kGm0`=S}?QounTbuF*0(pvN4LV z2?_~t^K;j$fp3siRPWJKP>`2bP*4)$;tdr{;N{`s<*nl2;AUs%0e9Sq@H4H&tG4UMQBd;^JWxW@KY$ zmXeZ^QVdW4HOWAjfen00%14G?26l#IhIED;h608XP-zM2%!`BCkl+O_BG7%MrpoNl z%^0BBLC{zf=xjw$f7n>v3?c(AF~!8$K`k#Z8?y2pmN8&7sL=^pD9Q$^X+=eiO|62@s3dd0gD8$Dj#-Sys#l|bZ!@(uKd9#p+ zC@0rEb1p6(K7Jv4bzXG`PELLnHe1kYM9>{+$@u*Qj#8-4z~zLqC@&w6uz;kjsH`~X z0!Vfr0Tvd17Gr)+Hhzw%h6H&LJ}GVC;9y~Ouy3@PMWh(TeOU!WSwVghUq`jpIPq~R*l=5^is}aovKsSp^NPuG^GI_` zatLwC2njGSGJtCTFARyG^LWHfA@dWU_8&M{Kb6hR{epfU}#?XrwfTv?vqLefi* zja`_XLta#llU0OA*HhSzS4l&FN!?3Yikn|ZUYLiQlTS!nTacGsTv$d}kVjh5i-CzD z4Se_Q0S0LXbp{4=*!jQE0U~e<3$#!Ibax*pmxEeR#-hewMEOKz7&Qe{m}F%|4cM7D z7zG(^MJ+5uZ4<@CO^l@Z#X#%HUD!E=*uothg|)Rob5Ee#aI^5o3pg&2)0(R&hme3Y zuY!`OLYM#xiy*TFIIW5Bb8~>wTDY(TQd(ma7X`2qFDxa(&Lqgp<}JX&%+G8pz{W1X7TuI2CCM+Z3Q7qovch6gx=bR{ zj1vB!OC7=Y6o5wMJ}~%$b}yMjkIVvEwk&`5-wzz%M>zj6^a=eCh#6=f4ulHt>r za@J&F735VGRp4L|;?$Cq5EKwmb#M?D;}H~)5a!}ymsVC5;9(U9?RsSh0N-B&osls& z1}8aXSb~Ebp#>HL-?_*x&aU2($i^Ye$}G>w%xA!(CCH=8E2Y3H!^$lz!X{d3#mHgH zu|ZOViI0nuQ<`6ZUtCy3kW)gMOPF0+j!{)uSVl-fhyipe%?$>BhOOY6Vnjh_oWjp> z0TqR&{@U6sj6#y^;v9@jn%cTsy_ACmc|_T{%{;;Dg#G^CVpxMeKEy$eMvjjjQ4T=? zNnU9=QCU8IRyKZi2LU!_0VV@}ZWey_sD^M6aV`Zd;gAsF5Egks7EuW%5m`pbQ1G3W z3``7B;JfnhfL9q_TIeMHHZB`uiT%ff~%tC^q zg2L*{m4$_s`@xrzmVjoNrZ6xwr2N0Z@RMO5bd^0~Bp1@uVgs-I1C4rt!Z}4xNK8Oq zKwVfs%*%(9n=Mn+-rhb{M^{&iS6N3vN?4Gat06N}L_}Smfq{u3l);PPGsAZ5GoYYR z22hZL28Y05pHRlg&CMam&dw+x%>f!kP-c;kH8|H^QH z0k+cvsSOT_W+(=^O%%Ld4%X&^HLqVAYirwfTWV++gC;t-CD^#xn4Lt!K?^A73-Jr_ z^MeQ>p}2TXesI%?UA>%NkY9*_nIRQC{tmhy3=&UBWjnacR~A)EGH+dCM+W(Y$D3a$|EKq znKYlcFsG@pJco*Np|GZ~5|<7rS4RJT#;_QC9~|WTS)>#V8V*(#H5D~BjT4uW5|xw` z6_%EkD%2NNR~Ob#5VG(Ev~LYu zB!bShf~Ww^%Yf!rLHz`CQDf8j3ZfDcq6#2;&AQ5Ygt!~o+4$MGSww_Ig*8NNM1(~( zMAnFi2!hVl5fo{46*RF^W>rWojnyf)hT2Nv)22JmR4w?jw51Sf;?_dFyN}zr_NFJ2MvK>SXj5PWA;}o<+MEKZ5 zHRa^AK`B~9*h1Lb!Xm*(L_}CXSx`k#*u#)b(IUbv2nj06Fp4p932?DX^79GFa2en?5`Gk1{h2%_4Wkm#eLc+~24{x%4Aa2#Zq0Y*+w06#Me^Lzm&PF@aU{!$|&K>+~)0YM`p zc1B5lP96?sPF_Ynabad=AuyjyMg~-`3ozs`d}KHPYI{T4Z=eP?(r#gtMmQV0@l!`} zGfpKn5k^sFMN?i~SqD{S76DdP6;Wk&76E2fl^H_Z{2YS95)yK}0_-CEoE+?2e3Fu& z!BGzIdXbw9Zy3s{B~f&g4`gJ%ZR zE=X%@o8Pq1)|PTJbOFO?2M};$m(^s|NMch|VpA@6;{i=6^Yin#LDm67c08%`Nb?Kv zv$OFtv-2}^@PkK+0{-7*_|9;E!H5BJqbq2{8njCil8qpwvM6*k5}b@d!voN1N|3`r zyPC|*OhL{D^&LR{WKhnEB58gF0Y)AP4gpqXWo0cc zULjr%QB7rKQBW?I2nG+^adD_{fXW0x1wjQ)E)G6UUOrA99svPSS@7O@2SI*AV;L@K z3sVC_enCM)eg%F7E>0c}E+YX!eo#*Y)CK_g3UtR6=v04j`2cbr>b4OPP$mU?3Y;ZD z3cw@ipgB8bQR8A!d3jMqQ8_tbJw|I&0WDq)VO~RST`m(VX+=ddPY^H+7Z4T|6%`d0 z2#Mn z6a<3;7mPs#Dkykisp4^AVGQ{C>5Oh310y4w$xbFF1_sg)Sn4dzBgv!A&(CEKn!5%~ zU)xK9*EA`DNl@-g{(qCi5f@x!DBN%)( z6KHG{q1M=3d67w#v5l~%u#T{-gsNn`qN+l9mmP}(rzjgY3nQZlsDKwXVm6=7FDS^b zEn{pfqpbx>rl5Pm_;~~c%|MM9R(5&N5eoKxf}lDHw3q1v!*&KP208dxRuIUopz#^V z;tr5I!5C7ofNBAdb3q<~O)!B5uE0GG&}a~3{SW%)!GsC50z#au{j$Om!jh8062h{% z=~_l$moqaeazd^!uwasu7c>yp0>i*G!BB5qHW`B$&|N8@BT%@KU0t~?IQWHGI245$ zxtRHcnb_F`m_;1?xwSwOaXji^5)=cV))}b9F2JC~09(@nDiJ^BB zErGVzfP4z-x{I?LgWKAWqyj2LAeV-KDmzg2TPw&d!YwJtFUZ5kEmkAQCCVis$i&aj z&BZNbn{P{m6f;qih`QiqJo0l-0a+fev(|gJUk-& zLY&;J+=7>QLb-UP7OO_yJQS6D(&OH0s@m6wlI zkcXd}m77nUlTUyXRLAl&Brs%yTm7JN2NWfsR0+kP#c0N&{KA5Yf&#(YyD7ps;LUILH9HQw4M?0sIhN$RX3}=BQ(sX6B+`4?t?nA_;j7W)?v% zPC*uFQ9Wi+9v(3XE;e=^E+K9{PA&mnA$ATSc0VBwEjw<`m}U<>27q7G!4^WOEf{;}qmtsH4Ur$SNws%Ff1|lE5m$ z47w;%kcCxLoK;$qol{(*iB(vNMO>U!UK~6+R}5~09R!~aZ)z-R4#MJ~-VM8Yo2ap< zAd|3YB$IYWD|=5TlMu6yClB~68m|908S)qofp3Hb?KDPQegc|mg9b8Ws0v*DA%$^@ zu#_CT02iwOlc1;?lOQ*jh$t5~H-``xFFOYhC!-K6t01eh5Hq_V`$Am}7C|;KaaInd zqy$zGCVoLt0Rc{sM)!1@0cLoT7%1ji$2R@@v?;y`?zAS5NnCcwcdz$zrF!VJneB3!JjoE$=&po<`w z1lX7am>mR|*#y`ZYO6yMCLeQ3BC7}!pMa=<04QCu$Vl>wiPy1+iZM$HGN}r)NP}Xt z1bjB^0r1&uqM)`0v_dj9RTe>Nb$|}{G2P2(%p<|U%g!vvDaev1eHx&0g8lzZhD-*K`D);E6S1aXsGq?UQWB06k(Or> zU}F_z;uQrQd&ey#%*D#e#V*9j!^XzL$s)wUBFJI~$&R|}EP~7;lFXcpAYU^I3X1Rx zu&|1Vu}Dj>v5Sf~F$+sFi9vHC=wzXX4Br^GG6*t=g7(#e_QHc(4bUkVb7f<8V{>+P zWAnl?RzV>a$v$~jIeAt^Qx+W-BUWA3tx>`u!onfK?(XhUAt4Nm3iP)Gk8``moiLlD)u<&wnae{0E^=W@H>}8M!rCf2)T0V9W@bU}Dm1@dLpgt4m z;5c(NQ+ClJJAF9CA@;nBXHsS0- z{6a;tDlE1jTO$A8VEE3kok5ZTbe;tGU_L~qfb@<*Gms$Pg4QXsn~Pq9BpMLl;*xSN z)zvj<6FOz0T4EVz#hx*QHvP=F6l2Q`^Mp#W(#efDE?W#?DnkmF=z zHDpm06cehKrM(*;b8@Uzkr=hF4IS545uZv<~1cLlXErXFUc6bMQ^t;4V8NPr_SEm`;mw zVrG_*2*5)$BN z)sAqQ<5rLPDbA!VGL8n6rM@7{M^UZe$)t{iUFPY&GJY-Qr5mfe}H#(84&}bn^X=Y}A4mN%!Mgd`Y zCSER1L18Xd7A|%nE^an9E-n@URz?9Pdsr>X%*DYXD#Ogq#*~`GBE-ZmAk5Ft!XgGP z{@6vu8<>Tq7)2$RRD@YTW2Kq@LHAN@VGstN3U8`&mtlrC?d+NSSsov8tdV)#g|h=l$Fg~RYj18PeCCuLs&RNSRXu2e~aN4I0wry zsDN$_!njikWRJNxn>cs|&I~%b0j^KyJF@cdi>UE|x;XsGVtl;p?1Hj9qAV&#j7$Rj z{CXTR(wy>I9NLh3)Mpvx&*E$xE{-h;e}L-HG^ri{S?}-Gll&;KU8T7Ym#(k?N)b zTTzojMou9?0S*OGZedOlGY&2xL2hA|ct)leZ%IjE3pFbxb_Fvx4`*g;FE&X@7BwAa zK5kA91}28Q{|^{`GHhWG2e$Wb>5 z|9=ZSvd+pN0NOtTN(k`dI@s7d1f@l}#6%?}1-W=d+1U?pYX}Pp2Z(BN^9ytou(L6+ zGJwv!1ckpM_#_ZL@T?hV0WCOW;42x~AmhMlkQG;=>?WWiAC$$7K?fQbD~pI5KQ~}z z<>dlxC1hh`66N3%5@lo(Rp-@^=43Y07ZqWY3Q%NJ2#{lv36N)!U6RKSI;d5YS5%5e zU5SyApI?YuL`)=4Mn<2PUq(hoN0N^ll*S67W9gvP<)EGQpb;<-HinESfCo~b%dFp) z7+6?{T3F~8=83wvxP%C+gU<9)?@vh)71hvWU}i{wrZdPb+u#`u&^{y7gYQArB51jR zsi`=m>j>$Pd=(WImD3ay6_7R;wN_zgtL;^W$Wom!` zhk&RGx0?|NY|el8ASPJVt4VK#1VeoihfDFs$V0nkn) zW`-#6D)uA>SQ!ECTdA8vyZ|A=J0958McGA_ku%jib0%drR#hH;PIf^K9&RB40a0;n zZhj#ieojqMWqx5nexYD~0SR77E>>Y?7FKzF9$tP9K|U@)5pGFQ7G5r4Nltzy786At z9)2Evab6yNK3-^lJcZ#9^j>q&P6Vj+kiIX*Fab)5Ehr%g8psx8;t^F~5#Ztw6y|0I zmDij+?Ce~epv9bmO!lDGDjTTRBg8Bw!^q8)n#d-?1UiRPfQ3a=oJB^GokL8#o>4@S zQCyT+PJ&s6ff>HugcaO=fS$7tTIT|a2~grv1~*>8)861@rfv$FOKK3}U=?PyQD;#Q zl4X&WkqY2o7G`0W6_b$>Rb$-4A|T8nbTQmqfm>Ez*j`vdh*?Nf*j_k1%ifxa2{hsx z51n1-0^e&c1wOGGHvR+}#$-p@F%YjWEFxsYuO%v>Cg~9gKC!MqO+!nKPf=4-o=sS| z1v<43nMDPaZJ;!53TmA}+F_9F3od|+OvTyQm7xht4HD<}n}oHsh3&+owCoh* zS*3YY85z}ugn7io6l!=ld3kt>tYx^QjF^O&HPo1dz_&b1W{6{W!mt699vHx5h@kP} zCxJHV8-juy4Gb8V7(^KS85$W5LGOD96=0z95)uud=~z&++Z1NeS@_ib$)l zu?n*5vx)KXa`Q7Qva|E@@MrMw3UY9=v&su{adYr0i?VU>bJ*~3v9N+~83XkiK;@hv zX#X&~D99Q!Q&VX#Q8WhEJQ6m*?Aq<*#rf- zh1mE&<$kACyh4&Px-9I1e4K(Tj54A|Orkv8qT*ca z>^z*(pq07Yz5?9rf*iYLq}VydWjGBLn7O&wMda9cn3z(Mn1z^l_(TN+S=huRr?F@X zu}Mp?Nz1Z=S~HNjiT&Vl5YS2G;ADheQn9gvuccrI^`0^7YxV_>oDw3+T&j{{>O4x~ zJlt$t0&=_}%zR8d`~nB`2R98=DY6rw}7cKBF)nmuj)9nz}N-yqbnAtFW+)u$(jtKNq`{ z5*r%_hbW_rJOc|u;{Q7gKNt=%NI}=62Yxhv++ys;1jgg00B@6 z0o8o(7`DSkDZu9%fydjxx0(nA0 zXY`!SKs~KQ23Llk4Eq^Cbtt%A2Ni6fY=zS5XU}ui=8zUP*W%UWRTB^uP~uY%(lFE7 z!pJ4a$|NByF2pA!qpl$-$}1=#EXD*fHv!!8b%yjT*BLT}@P zDl~8dR~2{JPAizs{q{Riv zo}i%!}u8aLe*=3374?3vwEk8ko0Q8Y~tTHWQU(6B7~@WfPYY zkzf-Q6cb^Gvb0&n6@>MKh4nz^JLQAddV+3%m4LTW(3jJIYC=$!0?i+(n?YM);D|mU z$}P+<#jm0vs@@=4P!Pq>!NJerEx^qzz-GnA%gN7`6m26W#v`pF?Bylg@#Ls5&sBCw zL3TkQRuNGaac>SGadz+-B&pzb(n0W^MR^9$O}Wr&AKEoA22BQmdu!mvA!t7eWLYY7 z>fiK9wywFksIjr8fM}eku@0YVmVktSC^Hvxfv^~8m_kfhOI%z_O~OcmUqoHPLPSW& z$Ag&}eCBV`|2qsn8McCFp^OKl_W(uCAs*8IN60+N`+WB z1Ubq;6YXr0!u~=+q8wb7qWtWf{Jat(0zztRLZU3fDr}rmjFMJnTwL0$qOvUFa?Hx2 zEK&^243Xfz{dNXs@VUjH9+fCNX!IDgFanfzAlKo5s#j2*4LW7tjzKo~A@-7}8-q`k z0h5prgoNfTUtv~OK|vldMNS1(Ru)lKR!1ccMR8tX9v)6{AvR%7b9P$}M!`Tu7G@!4 zX&+7&LpB~hUIAVKA6`LjUOr`UD^@lh0byZrVNn?wQDJdmVF5uNZYgnLP9Af1PF^-H z@eXbtUL#%(u2OCx9v&W69v(q%(A;F&f6$Gs2N_ryAbns+*}|?4InoQX+8SKwL$U&d z6bIMJU@wA08k~g8%$4tRTH0}X>LiIqbF&JwamtE139+&XvFd_J=2#9arrtViM|stbD>O0^DHIK~IbkbbtyEKQEs!CohjM zw=fT%I0GX?HA5i7JBEV{pfN#={eQ>{E|`|7cM+D=RlQH}yq&;^KPJ;*R3J zJiHas5g;@3z$+$pFz`V~heSo#AvaxtR}+XsrXfJ38^|(nk#8&tNk|_B1wfZm#R_}z z@VoJI%V=`22(q&Cd-Aif@w4qXF2)ENu32;XUZjtOr>BLFpqK!QfRLaeE0+)}c$P93 zoOZW^PdzjQweQ*3l##6l7u@XdGz_X(Ksiwqlykws{Rx!3*myWtqD2)!OB30+bvalC zS=a^TB(<2;4f!}E<+dN=<^efl^{Kl`th@rOq7tG4ECPbU;=+>5!hDLt;tVVdap3;d zcJNIz_TZg!;2Z*Lw}LzixBP!Ga;XQZ>%d7K6dT}i6;P@2fWz3D(^X86mqU;(PLP97fKOY1i&cLcr1wBt4vC16W3IOl>0@eQ_Z19~@qOc`ApyfQUWkwMOA|k@3`~rMl zJbdzwBD{P?&0L^Go6Jn0+sXt@1yuw+1amdDwAJ`|`1tvFdE`VTC3n@NLXLcr(a_M; zwDysO0tRLVP$~wk$%f`h`02dxFaf7qW6+sNpgj56Qq;o2Ku^@f#8BTd(+dQcwX}rA z;!TAFh2q8hL{!1^bt&L^{{sxF&=ZS5ts2na5@JUqd|e|bUxM-{XeN>kx$y|?xkHAA zw%MwJx4MY(h^n&5@=CDESb+}{7qw^M5f)Y9Ru>mj<5d>t;^gAxQ{oer(c$Ffs|6i> z!v@;L$fLl?%PuM`0lH`*lwU!BmrIaake^qOi;qW;hl^K2l~qxgmzRNqA@~0chEEI! zLF)q?EJlvdu+=dmRenv8evPLp8qO!6RBqZ5IMMWjqWF*BU*hNG{B-o_I#3k89MTEuK zq!!iH2@2-Qfq*V(wImCJ1Va!*CBt_39n;{}2&@zZZ8!(T7HIvNM52tew3NQIw5)}N zg|u`K@}jX0Uim^EI%8l{sOIq1EoxU2363w1vrC35+mpgFVOG}IP-!J!va+q zrpBh*MO9Uml+@L=*;#m)qy$BomDn_ul~q;Mo@odx3u_5mJnLc-WHFH97E|OA;*%Fv z5!L|pI6>=>k_fF(fP@67fJ81yq6EanSp?YF1ey4R|#&>pMeFPBLfvTpiVxhpa6$4v?Kt{)TtXAfhsZ3 z4VmIA?4mq8yyC@;nOFq4d3gl{#JQw}K|L@|Q%(V4P8AM4Hr^yqJ5)GGSeBKQhm((s zTZmUkKtfZDQP@|2olC$(Pz-c_GAMO@VK~SDIyqa1!2p!Pz{v^Zb$F2k&h+A-h8JkT zA9w|@nK>v^fmV*yvvcyO3UgSSsHur6u(Jya3aFa$^Eipx%ChovS=-v$+NwvgvIq$A zu?s2)%FFZd@Np^%F$(f=7Vz=yP~aCVlyCs|$&&ux0MF8hF-S9Lfm~t^b_i^~0p7$k z1)UZOs1ydbBb|r zdkG4PI6IrDs)9$PKzp_JGbn;fXHdHfmQp~&F2+WXDS2?j!O{|_Gz85$ff_rY5s5c^ z!aPcRn%s;$;v533Ogc&|jG|1;minx0f;@a~Zf(oii?U1YpGdUT3Y(X@NzSAamNT+fsWc{VVC#!cL)~r z6cz;SA*%m>3%oWQw7SR$bTbQLnFM5s9H=oTZU#w7;-DEUP^Lm2Nqr>y?pujC5!O6|RF2HRs$j%|ihv<5j@8=pJ6|EJPx!jh7EGUE+`F{Lx+?zr3ASJz}FebGs=mwvIs0; z<`86OQ4p3D*5VLh*HmT{0@XXI|3T|e4lw9|?$HD#WN_I8S_+1gB|&ZncUnXc$xhT9 zbOO&pNnsszQAK7Z5ff2U5mqHpO??gy&^2?+GJFQiOloRTc7ZYy+R_}tA|k@d+7dFB z+}uoz;w)@(QTuts8Q8$P5r2U949YPmGr(4(gC84r}aKs7%o zaphO*F*50@vIwv;i?VPFD01j1FgY+41_lPIF)=D9iGnBIJv_W~j5*l_*?IVRq$Pw! zSp~QRVg(gBIDF%|x#K|xq=LdE1w8tE5WM>cJckFWh`}`ksF4aTufU-MD>*?01qh3R z+@lN%#O?$`a}_Qn0R?_hMgau@SwS^ReI6cBF=5c^7ArAZk#J!lVPOSsMOjx@H3=>e z1z{mSVKFfo85tR2EiFk&Nd|WCj?%Z_)CAkFp%3ocf>-B*SMjkctApBM5Dan_sF(z| zT|tor?h-1Cii?7aiOiNf#ykOjW1~ME<&W@&n!fBvZn4Fxj91FWJXvH{a_vmMa&ES(qA+2c0Ijx|Y1k|Vn zg%D!zh^ewDC^$ek%ZSCM-=5h9zd)v%vQR$4X1<%gE?S zgL*cgeXpR^cA$F!LARKL%0B4e4`?m|aw;wCBwA3qR|dxhBwj#i0+i=IwJETOOS6cw zSPBH`YB zQ4ELRfW4vj8KPunY?yCx?I#H#-NL5a=KV zb`}8^Mgc}E0Y(-9))|C`{NlaoP$K?Yp*YB7LHL-^1as5$}{#Gt``#C7JN#fgw6lc+c-`VK8oU8)u!rTfvyc$XeI>d!Jn=c$olvH8Vk>QBq7n`VLsvxYS z6v8a7$gJVas;nW*C!or}$^e>g1GQXbp|upKT@7ua!dtPh%mYfK=HL{Hbf$2g5qLu1 zSczMSM~z2RNI^hO7<68~oSdkvtg)P&Zj=zH^bm@YkrGr;4+&70<`Gjd6BZU$5fK6R zzd*b1gR!lbM2RX;ogfaXK2g_8`tXW~Ffj|TvhXwU2ud;WaceY;0nT;(|f^hM=uJ z{Q6+hfuCPN0CXE3GXrSnZ5-L_&cX%7C775&haWLA@d?W^^KxJ2a0!-GR zSt*W%+Um?)oS@DTY~2~3fCxW7GpiVA-5Dr_*0YF;FpCK@sfe(ERx$)bbG{RU2k3?X z*d4W?7BXn^L=03%nu@a_TBo2kAf!NsT^#|5Wl(z%v?jpJ95kzI&m_*SmJ%$iuFlBB z$tuLl%fiXTBE-bWF3ior&BxEp!DJ`E!fzza#Ujbf$;Qsb!zs)o$R)mASfosDksDxA}=hgDl91= z!0ak4?83w?B*`wt&8q-vNn2W4f@-h%4D8@@J9xl5yFnodN-Cg=(pVIfJV5=r`J${s zjLh;TmJ*7JifU@?3nUr2d0nI(d*x!JL1x7Kzs&$D*;yI5!86L>Dh{&bP+U|5bj^t} z?Anuber{fVZUKI7K7JlaaWNYfD+N(;UTM*-+&qHZ{K}vi5PsP(7CvDS34TczVbGqs zbnyHVXf=owgB*hrgBpVcgB^5j3#b}57Bz-MG1$>)`5t^;5=a7a)RL*GGGv_MX_=vk ziKq-48!tNtyRe0UtBj1Ow6v&RLr`Cki-Vn=mzSNLk4r>Gl}Uh2fJt4jWT3!A81FoFu0!$${^5H;o$Q~Ko>(mhS1hU^q8gHdA|l?hf|{CwvVsD9pi8hs`Iz}Z zXU2v@_w+*6sTnW?FoZG0Fo0XskjA|@>fxQ>l|aVqpw>Mbq$LFjE>IBwsy0E*EKu z!0}V!W(+wT(k@aS22dHw#@-+xBE~HuCLtogFUrP#kW*bkP$W`9i&MHY zi-QByqUi;{pTKikVAp^hDyl3BDHI^B2~clDOdK+rrM6GS2y|gQyO6w;lmI^~ zD~p^AHxs)cw;(qMqqHC!iy#YYy|An(qqvl?sjxkhFpmJQ2%D6Gt*t1>J{AE{W?=?q zhL-=o89<|0q6|{to)Fq354a%%89>K(N76=Pc0oQVZfQY586HVN4t7>{esNA=Q3Vbz zPGx0LWo2n;1qD$B1t}@zjSBpr&MXf%mjF8_2PZoRhomfvEH@`do3OATzaXz5504

        7lvKn@k`iBLs2$JU_dten#K!qatU!rF^Y-0v$)EO2=R#tZ3Z15C1RY# z!YeE+$uAix%)rW!4DF9|Gl+u6d_b*fq?`+iB}grTd>Rm_8UZ!AK?8LUQ-p0qErr8{ zIe0_`h1j{pSfm4#SX6~U3yw6Vi)x68X~=bDbMZ@Rvh&ZW6cZK}tK{eRlW>s+#ctI9 zTMSb$(+1>9z&ar@VIE--F%bcFPGRnYoSLG7B4J{hoV@&<*}S0oq6h5ugA6P7T^&SurX#7=HTY$<&afZ zQsU?5Wyw$jo!SRp8@wId#(<19K+1E_cmrfV9;}zA2J1UO3K}zW7K;QW(Y zYtO~aE5t7#ET+rB&&wge#H=Z5%%sF2B+SXq!Oq5`U@B*r_68od-Y1)V%7*v!o@0#TJlw3pOdMSN?0j5Y3>*we;B;^RdJB{_bZ5B_>~1TNy^y1s|$74z(B z>Y~P`AoqhNw!t*?1{!u{c5$;EVkX>bqC&#_in<)y2D(B*x}v%Q0=kAK9G-G)9AYB8 zqEZsNU??FiZ73rnpu{1|F2>6&#Kg+RDk{jU!z05lBOoBdFTp`qrR)%>kBDdqC7`y1Tv(hGMI?A-u(X6E1;8yKR)+5XKNvnRfKJAP zjr4%l&w>V>z@sQKu<pL9I0gkFr2I@ye#k zkn>R>6*KxNDWFz3Wab2I9Xg~*0nSa3K?sQc=NiJYvcekc6+ovPC`1b|aqzN*3NUl< zvM=Z772x4#W@XOfXYyb)XJXdj6y)I&08NJr@(YQYvU3QC2=KG8*a~ZMOG4AH6{Caxqj1oLtoPtc^yj)zI%pAOod?EtO%sf(3!7PHzOiZ%;JUskd{5;%( zBHW@v%pB~H{ogFw68xMz{5<0PoLmANp!+^j{@-Kx0iGS@Wzb~M2d_s0-S`0>(S=lc zpcsG@aBAuh8sd9+K2rwuv!E?zaCyOwy1)!NqxHH@g_TK|iN#GgB0`x*for8s$m5q&qm7Rl&otuk=LyC``o0Ch2g`JJvpNm_FONfb8M1nT2GMGGl-p^Pkb7$42J{{Cl@~#2Ro}08<&76 zhcJh|5GyYup9F`TFSCFk6DJoFp9q_{GpnEos|=F>lOmGgBQO&m+LfSi!aVtn`&*||BnxdpkogoT9#goKQF_@#vS*dQ~)3Y?0S zTvDp+%B;*n%$&ReEG(SdT-+R7p#BFh69I0J02%2sWdNNQ4eG^-f}8NB#^AMhpk+0MT=<=Bv^6NSBy6y1fR=3(Oz^bzLdo)UyK zcg?|_Ku})=e!e>>=PRp;o0*!kv6o6JiiwE|3o9{-FluWvv9hxX@^W*qF*6FW@bU97 zGIH|r2yk;VONcWEF{yJo^K-KDb5!#&Gx9Myvhp#qu;d9#2#SdbO313I$qK8=ip#Q^ zib+ZFs7W(1@(b_^iYZ%VG7EDG7345xyRr%hvPwoUO3KSf$%`S4e5->I!RXtEuVf2^$!Q zY6z=|Y6x>jFuAfAb4u{?2=MRKKC))EuoCukV-jFu zlVTEKG|*>a1D;@G z7G!3X>=I{Y5nyEzva&KTu#jbD6=G#k;1XnJl{MDZHZ#+M%miBUaj|f63kq^^v2gRs z3JUN;nG!5qT!Mo90)n!#uDraif?^De49lT0AP1g%23K$3)B{fYW{}m-pkmBe^bIo~ zw=j<&H>WV41SdC}01F!{3qLD|pa8Ql6SHbZq>>1D->o2zn2@9av#h9?w}cqCiaDd8 zFsSbbT5-J^dUm23cwCXe9OO}G7#Ks!e$dzx=!^--`b)@php>UqdAvcO+rapQd35Hc5gA>%f1U2*!3FiZkIENrJ6KMILxOkGi7U(!}@$E-JD+pLPasm~FjD^qL8|s9h9>{y$Vq8XrhuLGozq5yC^%8ypmeCFO#~0g0!c!f`SkeGw5^@er088 zekK0xe#!y-Jfdt|#-19&=Q)I!RlI~89fiD0$y9P4e4|< zbq3h|j1Y%_%OOzb9^CT<)#;!XK9mNfa-`0vn!35U@*=}>Lt9}jQEg!<^9nHWF|dMnfd6Cw?Z{w9j18F@gL)zC zkfs%=@&dKDK#fFjy#+3;L_xhoP-?%Elq70lp(dy(ATOw8V`(jDWnrVutuCa_r79xg zEh^eRD}hF_zXci{^gli1X-9BKsOYy zC|ertGy|PdA}AopZ>9=fH6S9gNk&FcNRX40m5Y~`lbMrCP>6wzA^ksScLm02f?zj6 z+z8EY=192=6i}d?#tuqc;I+t*0u_`iLD<+_Io-yf)WAwuT~w1(LPau8QAMG&-G;@M zlZ}s!n^jm?Kv+oFfY~fZ8pgCwMGLHiMEI}4H{*trOvKyZVnmp1=Vk$*hJmg4Gu(hkTNq!V~ic%7*huwh6A2g#?eXx9V!Es zn#0Bg>g@{fFoBXQlLiwzpJZiaeZ8&VZ?&nqa&#KXzK!^g?b z%g71Zy2Z&PFUQEu$;r#g&BV{l$SA_g&dwn!#w)GxY35#($q$r8-^9ZUa^YI%BvVce6BL3fHm;*lDLmWI8iP|oLTzO~;IbFI% z*jf~HcBY+`u!u;Himy`ot(6VLuHG1`cSy-~fXR1E{wLIrq|+As99@1v-xo zCOB0jYIBJJ3J_+Td|kaCr-ImZ&i#H9^|j*QF#_C3r>I zm^g%Z#aIPI7)3;cMMQIWC0K;T7(oZN3W|t{^00HTr&m>p27rMpx1>0yye+$=B&Xy= zetvE~ZXPBsPF`+4e$a83g8c5hy!=omKffpsCp&L;0zc?P1|A`P4psp+ZUGh!0d@uk zE`}Ir`k6F5W@Z-rlgn z$f3WhE0Pl#DlR6?b?S~L(0Tsfu0IhCy0B_%i{xA5@rg05!_Hd5hbW|v^& zV-e(HXJ)Al1z*F&&Ck!yD!|Gmz{)Pb!N9@*I++W!lf)9-4hUmlKyJ%{qXF!0MCVl< z94)Z5F2+Wt&{Yxa>Yy4B)bbMtogM`B3%KnETF1L3lnK04SXfv}O&WAjqZ*^IvN9tJ z2b&--4=XFH5V)Qe;AIvN5D;SGVCQ6#5D*Yh;BPl51 z0ZoB0pF=7&aEgQ8e2u=c3O)f1t(-qra|&@dh+2Zq1CnEu zP)K^o}OjTD?)01Z5VrJxxmypmE6BCt?&=wQ(1Ks1UUuLATILk_zRo=3ak8h%& zAg2%)HwPy_7cZBC0~aqBKPNLI3p+~;H#fHg7Z+Ee5a`HoeqII^2EYGz80Iq^0FNdL zgHOr<#TKYc0+*kVabR(1aRkn9(1L2FgM_fC6h9ZcAe*KDI~Omf1v4ivn*a+Zrx?F9 z7Y`3V2PX^TWML^O6&67e7GY5qSwS8FX(dq!L3U0dAt_Ed2?>67P5}W?1_o}15O4@X zPVNP*F#xUeHes*=-v=B9Ub_rlRSrI&9hxpcjaz6KgL*w63~FM5k`N?Ig9ib?j%8Pa zdIKC$kO%?w)>3+_1ckU++cdSb^a}JfG(a6BEio}+adAyCF=jqCCO#%*K4vC9CM7-= zMm{Dver9$)HfAkRO-;jUQ>}n>{s<2pHaWu_TP|J>etr&KE?Wsu0CRJ5JF@WbFmrP= zbMP?pvNLn?F!OPNre8S4!AG+2^Dr>*F~ow`A@2n3w1@AQ0iDpL%An0)$Y9P803P=N z%`$_EcIaG@IT{}_PJle918SqFn}J$O$dLvrFu)@b;-E>HCH8`#-lnXqY%H7=2wJtk z=EBF$#>bH($i~CZ6)eEc!_O@qs?5eEF3KY=DQ?28A*#y3uB^?l#mUDi$jZjU%O}Xm#U>}n z#RaMxL1QPN5=0+-H+u*}B11Z;lt(QmP?t}E+5phlH-^wiE44u_GEi$w4Sa_qxN!|m zx#q|rV$KG+&NeQZQCLHRi5axEiie4v3B0ySfQyZjk2!=%40PePkdR2UICz3jP>_+6 zozsF(n3I!_m5qg+UxZnJNtd02mxYCeonMGqkSUm-gO#7X%FRvChDS=7#Ziodi$j=4 zTtJMAhnJa6fJp>g28jss3xXJoyxhDBF2#&R*4%>ZTpV0n9Fnq(d^~JioUAOITpSWI zjC`O$LeLnlFoO#NXos&jydQ1L0G{K3_#RQZf|55oDEh$|w2Bbd!2YWXu})4wL83uH z&dza?O!5khV&aUvvaB)_m?flGTo_Fmy_k#{eV9xbJ()}yySX_y*||A5xY;>5gg|T0 zSXkJ(8Ciw7g@r-)a&kz6N$_p*pxs*@@N{j$;KLBa5CL&5D2swz2*RLx0@BqpS5^lN z(z1i%2h;>&hc&W6_m+ZI@PN*R0X6iMAss*_2lKFVa&roBvvcsUGw?A4f!9tQM7aSPRI(W{m@xz~gfT=h#DV)2 zkWG8IZ-fSQg}~K2v^xxH?|~LogF64nyB9%;9CXy=5 z2@45{sPgg($;-?0@_HMvxw{*22y<|=Gs&{^axe;tii;{Ti%alI@v%sV20_3=K3;BN zSr#@ne)m{@9(5jmKOSCQNgg47etmT*(6}!zFRxM%C{3`jii`6I@v{mtb8rPoa4T|( zae>Yx;rM@#p_~D9whjYi`~+0JK$`8w;C=Mqnh{hmgO*1KiVA3H@vv|Ui?WI`vsf$W z=m?66nkhw@c?lcxiF2x{3-SsZ3VWG_@d`39GL-&*!tkA8H3K(j+yT@D16K{Et96SE z%$qnD3JWg;^@o`lvZ3deLH4XEBOi%iY782UfaV@!&<(`KreCZ$#bo()xw$n3^w?F@ z7!?#m4R~xAWvt{B#Q2m|G~{@djD$HjbcL0b18j9UIBY@wWdHw&p$vRl3Wh&XcCUk4 z?V`e>{5m?kEWASE?4q1@%34}{qM}A}F@~PPn%ttC$|{U9!kWUKhTiNF42%pM|6ehr zVh=&cFf2+43JCKmDRHv13yQFcvalG-C@63X3+sx-8aNB93h;6&DKhf&2&)P^8+fuw zf%f!))`fp(ILM$2zMVP{luJdSw}XTF9-!UfpavRf`MQ!RXhFTHGI-OzDJ0CqL2V%D z1ed8X?1ouU(8Y z=G4+sP$=UR;b(m{UkliHV z1RSVU#?GcHYLhI+Db6Rr*5sCyWGyP%!|iUy%&evcy0nB}l!HT%Pf&zMjg!-!kBJ!+ z?;QUhGJtLuR05?zP{u^0Z!EDRD9od%$j!#V&(AKx%wj4nE6Xh`tRo+8;v=jjz|SkA z$;!(otR?JY62vV4Y8PdJOAy!!64<%}(7Ibk1`kkNLB^Fpr71h8A^vE9hY1S{yB14>1urKzmkt*%FPE~Iy1JOMA~!cTw+M(3=jAnF0kyNadAXT| zm{^!u*}-c~AZt`1D_|gfInX_`h~5pv!Jxo11{ZaZ^OT@7lHj~8j&^PVsFpWY2Mr}7 zwU6d2iOR}~f(bt}GhqP%kt9(TRvrOfUUL<0HgzUOVMb;xO;uG@Rjmj?K`!V$1{?YL z1wpqh2=XWB^7D6d2D7vA3(4u~vhr}SGqbS?^7HfY^L6q&@ayo<94yFuY?}#lXoR z$)E{opMs{)&CH;^0Ao>TTOZUd2Q6CyCpBeLS{7GvhcAaDhLZJ2wPh-urMex6f)e0jw*74&#nipAcC&6 z0X2H>@7vd=tZb>GVxg>D=q3!F^I>3O-~;caPGsO=5CXNSz?+{y^@KTeDX!G{I8jA2 zL07r(dM-^>Zp}pDl2}DKK4n!+A$}P_Sq3KXP4Dj+a=@dB&>P9XLv)aK7pSM8ENc8d z%}caS)H5|zG|jNC&Q&s)hbLH4SVY8L5$yJ2h6hM1D8cO(P)h*hZcq$9*uTF;O)Xzp z*+NOF*i{&Og*F2Vg91Yv!$S;x&`J>0FMN3Lpueh>YKd~2kur49Q3Q0h?*AJM?-(i= zKrx> z+uQ5Q%;ZsF#ltPgFD}WWswAVtDa0?t+%71g!Oa6ILFF0hu(%Q_W*#0o)TyFkt)^zF zqEcrC-s~sAz|6o6u9b=yq#1O;E5cy&@!&iFN-tvK?CNS@2-+$Hi8M&5D++1$?-vyi z7nBp0Q5Mx#;Zfj`VPRxqVr0q^<(J}@6;aa_m6rwGpuk}g6QUx?Bc~%QB_*sQC8)y6 z%*@KdBApu|E6*pZ1rinK;1yv9jm~m`Pfzb)&|mvaM=)ezW0#WP9fC`~6fbRf?3G%+){(;y{>znE|w()6vnzMO0XnN1WBg3v||z+*F}(9syxdVWBt)Np=Bte(?FNV&GN5MGRaF zQlL|dLG3Yc1+5O=YXI+1gRBG97N7#wToio&^=eU05eYtF5hHE0CUY$AQhgdF?jyMSk(CPMDwU9(XcRA z(R47-*&`~thdF_lUqpl-v|^Btmsf|aCLOejcH#fq3{M!U7&sYtL35HK(0K(=UHJsu zB+(PC>Hsw_nhRrN8Q2)a{@-HgXQ+nvYe24I05#1)I$#)iqFX&GyD~dIKAuI?Ry4@g zHiw^I8jPg)`MJ$`c+A1$FDeX84EHfo3sTy>zk9cjiltJ4ViSB~1#|}?s9b-=(9NL4 zpbqX4GJrz>UP!8G4QLGqI01vwkumIUXV6?PQhklwjRWu2hm6|X@&;W}7QxJ? z!Y<3sxIz@N(b`s%pN&m`wONphLy#w2h*OBgP>6+Dn5l{%R6z@BaES`DbBSchfvRai zDRwSiHg0})DIN|{ZdQ2~0bXW)VJ1P)cmpUV-!asK&u0RysI+DPwR^!q1?zaKgE9wL z1l$6K^|C6@wOefff*IadQZ>aj3KNbMpwWMKe~4%8GNzD6y-6 zx>^RJg$bfUth{V2pgAWqGc{3J2`*(Bc6Cl+QB%VO9=7PF8+)PA)c1aZrqa%C+|lRp67rL3N-C zg9dDuG_-UB4GVxb94o8CCbCV9MIn&^@*{FG?y?pY73G%!T_9tf9g>un93~^k!zRR0 z9mXbVF6v`$9w#Fs90|T@El`G^Us_O5lAoW2T~LBelAWKQ+k}I|grARr9enHjTZT&L zE+SAr7@SJL=@v9*3TiHcLmZr5K*0*apk_I!FAKsTmmv>zz0DEj<(K0XWo1=m0WHkb z)&-3M80M&fL7*tB05dZ`vjzC56IrfUA#P=L7H&>%4iFbMp=$?%Gy7V1{Wx;|$HPjGJ?GGxIHnUDfa)v1A}qCoRi=Aa@9 zR4j>u?kk0?$^Z>pfNBr0XCTEbsApuBCL|`q#3I1WEWjits>CGB!67Kb!NbWez`?~W z(UX`cYHlve#V)|c&C22>91A+ss1ba-x`O~4s{nhtoD?%VJLn`uPG%P;7Vx@mUVaW< zK6U|qZe?{negR28E*?f<77n=-eja{aRu+B{W+4$)2|iX~26k}2=nX>+gFJNAH)zEy zXq**(tPVEcfz}p)3mEJ%B??(^0*WY*e<4Gz;5?l!AR@uU%+Jow&m<(O$|T0lCLqYp z!NnoK!OhFfrOm?1Bg7}j!X^(|7{sEYC@n1`qY?%kpqwJW$^p9MnOlH0MOKQ5osCsc zjD>^A$pPeN4jxWHHUU94VL?s-;Yn%ito$O%99&$yoGhH2f}q++NRT^8&_qaCNRm}d zkX49}RgP5vG~>bpu4{W41Q^u7YpOvd0AyWtCIbWHG$m*>gAT402d%9DUm?Q=Ifocr z9Dq_Iq$~iH*5IKBP(1{`!vUO*5hVv?rU{yKA!z_Yg51xc#>@m-&dkIV!MNX8R8(4m zQ&yf`or6*ERIHdV3pcMZ804FZipoiG$SSjIaxe;>6yWCJ=h+52S(wXJkeyA4-BE~* zMTjk*SCE67i;0DWlUE3|uvkDwhLoIwy2B_x-s${@R5J9C1 z2!nbT@FE}9asq{psIjS_wwju_u&}V4u%MuXnwo}&sJ6PC9E-4qFe7-8KdAo&UgXa& zDVfac3R(2a!q5nw8*5+?0pAk`+Ghi5$%D3}L5{!&&HakAf$|$9yMY=Aka3l#- zO+=7SK!TB5mQ$KTR+UwVQHd9P#ENHbCb%(}&(8(2nvtJ_pPh$akd@8LhMR{`n3>B& zP|)5~hf|G@frFv`|4oK>43#K#9O&draQzRBdQb*uhpcKc2k)MTs4eh{C5i2-yMS_Z=baEvgRqZ%dxx~K$PN`O{4n1bvyg&uCtZ_Lgt#LOnFBq_%cRUCEv>`>J`r;o(CDm$tCDrh;`;4L_$S=rT4P zQMEi(9ZhusWept#4q;&_J02cJQ5Fv6_;>~;2JZhi8FIir1f85itPlB3*qMcy*+rCP zWtmi&G}+|@CD`SeRGH-DlsSah*o2V$$HRi=KQnfIAyx+18S?uWWWZ~^7|bE(#^AY7 z2~-S~TkCQP2{USGF^jOWh_LbtD6ps~F?%w5F)B%V^DJfN5@2OkkPywM0^Zx450I~A?xJ9VG1rMzaB)cK{AnV2kX8PzSqLfE4tV{>!2i}OpcuxJW# zaq$ZZ^Ruw>b8v7daO!h2urRRwzrj$)unioJpw2DLFw&K}kU^ zK`jmrCguQ1EnXf=9UTTnhDPXaB+z|Tphf`HHc*bhnhU=ei0bL7sA!3?u?w-W3#xIj z2(z+FX{)Ll@R^th>k6w13-Gh^3A2g|FbjhAmFqGvGKeumFuY#ttGO^N#H)++3o(3QR1*#=JUWyr$e5 zl5CQ!{K8@!q8Xe*Vw@ssoPwYWj1(ogWL*@6Smb!Q6$AzO<)uZ0_@(7}#5iT-nE3_R zc?7s5Kzl8i1SI(d1VOzup8q$XITAG92J$3mm;qAs;wf_k%sD`1j)0Ps6r&Qf%u!-e zXOxvyVFP7JHh7*C;N%3|lOWA2F2^Lq%*iDntYF5*C(J4cs{Jzl-(+~tupPX&9CDtE zF}$c(2F+T5)|Y@9v5=V!@OUMta|&WaQOgS72vklxJe*5#ZzCXXoY@ z=1^s4=i%ex%JwmLbaZr#6n1nBie?uVWo7eVW9Q`O0}ZNj3yE=a3J8dVg}Dj|3U)fH z3WE0+LiRp^=I%iwf{?LQ$QUtr1O!wgvqMJ-K^Mh<8>S#WbS@d>u&=##qE;L=HKIX5 zyyoWol9HO4nIZNdkTYcwKRX#fzB>KD$ToV`9ee^ z)-W&TSh-TPzCKr!m5q&4f{Bx#+d^GTj8R-{6EhPtsLYXMd6x$;-zs%*Myg;#tDa%PqiNCcw=lz!k~n$heZth0!+_)PP~(bP|R$ zl(~8ML8JBDd|bT7LZU)aLJ~rt*$YnaYD~y&iLmksygEnJ7jNeK}Sen|n)ULXN}Ufxj1N-h;`HGXa`VRmi~0YQE~VG(66 z1tBp|PR{@TpWzL|Rt8DP-A0JRWkG4f+!R8Bau6<=RebEi>;j+zPFSUQ_ypNR1eL3J zIbcHK{JcW!Vgia==RzuU1%7@JQ9%VkUSS~#cHy~@Mej;{0wO{p3WEH?A`+nXEo7Yh z6GJM4G;jy^<>~37 z85u_6;vy>CLL8!ke0(bGoZM^)N`f*nf=Ucb3=$0K;PEifUMz5p1o1DJ1bG@-8N%;y zE)$hf;?kCuQsI{7S34pqsl=r%#VDc5E6cC8!$(w*lb>5eNQ8@@okP$^T#$>OM_5pp zm!E@E5Y$p)|Nns@2E4WhbV~xFOaS*z%tb*N;vLm)k;qxdN7W zPw;X;QgH$|4<8RtBqzTRr(gq{Gn*Eh1KV~#NGdiJgfo=**tvN@r(bdLbLt6-35p7e zg6js+{|^{mGlVjL&hvx&64Vt3*R#;N;?a=^(QwXdW~^)?Y^+Y4ETXI&rh396B8kG{ zqO4-lG9oM@5)5n%LJR>6PcePShLkfwt1-cYg`gHDRv(r#@muLEi57k8ZiW&2?xq|Lf~2* zbW)orB8P$E22|dG?hb|)NKhf@ZPB1AUTp;*D4VgfDDr8rD^)XsGaWmNET0;yD)<&- zPa!r|LDsE@Avw=bl}CpoNB9UN%b6(hXtSmWYch*UGf4*0s<0zGJ^aZyaFDgyu7?3oZJG^Jc7QdsiMirZh`^=uG}0VJi;Pe9PFU8lX-Z! zxwyH-gg6uB1^M{}!FS6_F!(UMV%X2X52`0Y9WGGQ28Pu^(+1!UE~sn)S16N29ULqz zot?WJMHTos*{qmcm~3nugK~KU`33m|1rvG9HHG=uKqC*Fg8U3@45AEH46hjuGVn7< zfzRRv?N)`3$bcKO;4BRqZ-owFf|hJR6D%k{fMg)C04aIqvVl$#u)1cIDXoFd96 z!6CrL>?$C@#>L8HB3dGx!NMcNA|S-VE6ggenwOK6gHuqDgOinuC(zs;bX1Rng9wu# z8@r}Uu&uGNG#?`yFRLgoXa@-c6NAYAn+#7GjG<{4IYEHKAC`E{aVB1=ct##}AvQiX zW;qouZAC5x87^Tl<(znExhSj5sU^>@Aj>5zs$%Q}O1-QcT%x@EJThG3-2803f?zQg zP7Yxner_oqF)n`4-C9fxHUB}Q6_mqH6HwN8i1sZe)4V9`x2BSd@D<}pz2(;xBe84gI zcnMH*5rjok*f@pRxY(Gv`9aIISh#rkl7blRG`Wub(4U(} zkd>1~h)0-9Ur?T%3v|pR=m2i6ZF$_BjGSD#0)o-Pg2JE{1ZbQzg8{Z588PMu%IC05 z529gXeafQ7JnHiDN=l*%3NkVZ3Zm-LS|A`M8V0&iR#+lTR9H(ZN?1t0WM3m1!v%Rz`kFGqAv@AEj0Ee=jFUTRR9KsTU{DKNx5b9o&kAE<8~O#SmyX0N#HG)f=G33)ofSGHJm< zW_qHMvV#0v0{k4HC6Hn=jQmW@yc{e7UU~ch{2~0z?EI{pyj-m8oS>sOnOT@wSU7li zm_TWymBF3i4Z{uwaRyBW&@IcL6=C3$xluBaDg3kzu%)0?N8nR!_KHbx@!K%7F*EWD z@C)b%vx)GEvP%o`3vu)FaB{G6St@aGac|M z!N(!Q!_3aZA;cq{49;eJEKE!wJ~tabhaiu{)_IV4(ct3~5SEl-0iApz&L}vSn^%~X zL!F6-TR>P;hKFB3M1m1Kg240t7Q=gRy$QPG3cNEM6eXZ#=#VuX?4UjdIG01jAgiB2 zYw*;;bN}EDD6|g(E|yF|9Y%IgNGlgBX=LgsDTyjc2=ems8w&FCTYG}3rb{3$jAyvi7o(D<@^Ey<^rG<$e@*4`~sladPX6BYkpNOZeBJ{DG3c`9Z_B( zC1y~YA9On+XxA}XTL{ro11;S`=0Qp^b#RLj)ZPabZXX!AIRx4GSXg8^Az71!Mczh$ zm6e~>2~0Zj3GoHK?N*mn<-@LwyA&~ zzc81j5~r%Vx-gG4w*HiiS9ON4~@RRvvL%R833y7Jy;o?w{Z00M5D>PqZ} zF|4X;Z0dO~pgI#&ak@x@ragGnz~f6QT#{VE{2a^z%$)p89H4U@?)!X5?q(lH%jxVB_IO(BM-W0@;0fa3 z<`ZD#=VRe#<7NRJ5iTIe@5pZ;pvcd_$RPCpF2hR(KL#}h2I!3(pv~7H49N>@;LU`f z5Q7c5y%dcV^)=K&p0z{JSUEWpph z#LdCS$-^bU#Ri&71hu317`z!iFzkn%OK%RECI#CCZuvusHIRMAp!Fx<2!YuwDxwa$ zefvPVsHhmXp_*T)m6fQm1i!jXl(@Ko3cIl-dn~752sb~UhPOBi8>=7}FFy!y3h+ws zb8#?o@^LXTvU75j|+Cm@mx^} zDQ})LJeqi?q|G&rZp1~1(QW0WLE2K0+Bpc8SnYpsDGU%cN>9bmV zT>Q)|rvCmZcaj4Fyci|fSWTvQa)q+6I0|y}arKH5m z#lz2~;_WUj&LyJ)y66ae1Fx`zuqX$gFoysr{c!xh$xzO40DLDkIB%gOA5b!a*NURX z&{dD#qTC{&dnYyJ`pQD+up;}vFS(O?r|Q)LJF4AkE#VmQE{!~mM@ zLJvi7Nns31h_EyP>8^TroQ_-}GNRHvYN;zlZ}8>dvAZd;((J;xZy4T-;m&{GvSU-2D8)!s0^w>`Vg8w#g16BAf~!cS|xd z2{AHDiZHVXurq^PF2uqo$SlOb!VvTS7Q-iSN(QaA0^RHiogf0;s{$JmF*O!72erGw zMI$IGKMa@k=u`u$AbBMCC2+0VtFncobSab96@d*ck7OINQS<1&P!phPopQOjZ z#?B_hxNQTYvWvX1iVCx)rj4qqg)Wme0}}%~_`Y7!eeWj9%`YI%E2SVI!Og=ZC?Lwq z&MnF%At5gf+RMgfo9rSX0!np~!V(DIb1=yYO9~6H@d&blMy5b#)wz)=Wl&WM_qiH0x<3zRAAfx)5^I-EjG6NQD9Kr0JaK{IWjbXUr-1BXeVlT1J> z{zc7A(?nfZgm}|kLA9vj($hwKLM#)7g_V`fj$gg6dCD+5vTAj1lz}cmXsh34!7dY>2Vw zTTvxuAx;YM6+_w`alj-h&$KqL77pkVE~% za=AqVg!p|m!9ZA&%UXp~L4b=_MucBNTvUVGO5Tx2LYYfhi&tKkTW_0SGzYT)qbm<+ zWfD_&B(oq3w*Ut-lK>AdFK9m{kD!36RXjg0uK>3szmTwi00SF?`2SlBFB!Hou!7fJ zgI1?PcTPc84}ww}=tL{%xR^5dL@SV>c#OLd2z2vEu<@`ldx(M;#i@agtrCzIa5xHX z!sG-h3dn=XBfJ0i81^tk!s8a)1_PftWNr#xUIJ~4n>$tUiAFIB^Q(Z3Gd7Oo&k+SB z6n@YeVgVLVtumbwq%Sx|^YT!f8HScFMkiHVbw zNkp2F8zd>n%g+p&KM)gPVG|a)YO5v6FDNez>g5aDg6gxR|JNA4FzjcLWw2y$1E2ZA z25Rnu8_ggugHE~t=X}umVX)^Q{)BrOawHZgIM~5UBS29vY7F1nr!2aXUqpzBk&lIi zpV6F&j}tUd$->OVF2KRf#mOGVD=Y-{voSLdAHM)Q2Piy1US>C8)a8?9Qx+Cc6%`g% zTc)bW#KFNNB+1Ci!Y0VX!^g|T&%`Vw!XhrpAqe(07YE4KJRo25a`CZ(rI=ZTMRU~k z#07bU%+<6rGIZ3;wZZ%S?lOF5IK;rgz{3E!4-Rx|gdYQVb{4#K2(%bQ9pz|vNI3{u zOD&FcBrl|Vf((j-4ow9uF@e>~Z)-p+zge9{gMu^^Sh(0ZIN3S51i1yc`B~U_S=qSQ zxj9()xx|=xSy;vSxHC&^U`0-uuzT7aUd2I__~Ff+6<_%ndc zmKVny1qE%50`)aOO$Z#LphsjRIr*KKIhgqc1O&{(*@gMU*c1f?#JGfbIXRd(t>xJ{ zxK^_WbMmor3QK`@!mu(q~xth%AV0eN+G(Rpg( zENuLu$sx=#q8g$K$q=xKkB^^=pPwt5--=0qQB;IYfXR-Vg_VzoUq+i<47^#~iA$1; zpNEBkgCXtzZSXx=keUm$GaGc~g)Jn7z%n(c>;cWpfSm)nr3{>H#6g#hgZlW;<{2bu zK$6MZN+W%JQ4CBTN||MNgBL@2ef+x za?&TLECbcMNMVX}B854q{6-FMWI6EoJeD?$$_^P#P0@+!vhAT@pq$DlA|mQ7%HsrX z^D6GhOchw8?bP5_!@yuCKOw8N{?HJd6KZOl9H*ivY9fg9B9pd^8f1$-xxqQ ztq6ioS<+>I?CWp@m&!!Og)XBqSsy!OYCX!p+Uk&CSim&Mm;sCkZ+rlpnI!)lg6xG}p?^ z37TIOVz6d-&v1Z2m_d@kk--mqz63nigEnk{`YfU^G(jg$4R&5mdGJwb+>FeOESxN?f*vL! zjJzB|ZoC}aoS+oS2VSFQjGnHrx2}Y4scLJBE>TljkO>CHy!woMi~{^De2m7NyzIQ3 z%nZy71<;kb&{cTg9Y~;-KRO1Ln4mlj?Z1My&w;%E$x_tBL`_XuSx-+{SyZ2gM_*6R zQeH|*N{UHEMNk5~FiA{ML_}RsO-xXtM@&$Zfsujd{{x16hOMww6Hp^T#(@S$;dQ0#H zY4D0KNdIytg8+jFgA`~S7(C4dUC9PocM0k|gC@~MQbYyVcsZ4r1O)lLMHLm5loa{I zg*nYk=W^QI-0Z9Q>S$=Vz zd=@@YMlm%`U2#!09z`+G5xM+~qU@nNoS2yfSU?B73&~6I2}`J^h^dG%@^K0C3h@aD z@$d;qaZB+t3du4sG8Fy4#qf?{H)xN9xT!H{i7cDAF*L!0u7N^0L0PoOlu^-?k;f zI+YldzKlhUK{Xnb3A=|EG?(|e)lAgNUs}{a)QDT0gO`2N*S3%E&dCPEsL6kugyb=_$bQ)Y#fiAFx^Z?btU1UhN1CmM1%t5XMbyJi@Z$xnN z@`!N>v#_SJ3keIdiSuzPv2*jV@w0GnaPshQaP#nSaB{HN2|5dgOcE9mkXK{kcp^imZO7v<;R<_Gmp1w{GSx%h;6JJLP8VtGLQbRLE*hA!|rB4mPL|XLXn-1or{x!nE|wWxtbvnT4sU52YH?hJeCQ{ z`jSbY)q&icEEZs()?NTQhm@6_OS42&P=tYzVFE)4!#jq345E-TCcymzSlbtrP?aW# zDv0vPDYL6_3X7VEW(O;Aa`N+XO0$FZ#fdS3O!$AB;S+-o$OO>ZC~PJuit{L_uxoJ& zi&}{CMJaJ`^MitsQYA1e>Tdqwr=)Zcaf~ zHYN#90ahMb2sDt{grpBTEG*JIYyw<@jIsjK+}y%B(j06&TmoW(B8=SJ!l8n~a>C-`3X+1H!aR~3 z+B!bc!d&K-GTf4e!h(Wej+qRXq`t7AAOj=#R<2(RyTG@&ih(YD08g-hu7-ymV5p|9 z3?7pKE!j~wGc9n^=GL+_RpVA*;o;=r5#*2;k`QBJ;u98NWZ@LyUB}2P$fv-`C&(!; z&cV*l#i^jpso-GFJargj<8G)zs6pKoCl5ad0%T+&jKL&8V{v^GrR|1E|O409Nm8Dyb7E%07TP)-mN z2gNJ2Vo(On)`3>YfIEetb%ZEQRj=0N``o#C`8oJm`1r&*oMhD18G{(b)Yc1$vT<`V zGuDev0j-tp8#gzfAg8PXD~F^Y5BJ7O z@D%~9?A+=Z{DK0Y)jB!g6Qd3=utLus2b~lTz3Yx0R5XL9p1{QrJV}BYAE1)kTv^nb z$y6CS__@fIj^gWELX;wVE)pi^|9;>w_OV`6RwYE!bSeV%A1YF8x6!pbKu zAfjx^A;B*tAkNPx#xKs#$i&0J!pbMgBP6fM%EZObD4@j8!OqVyRaip8xjU7eO+Z$k zT`*LRk4J!ykC%_1o1d9kP=*~Hj*I9ba?yUWVT%G^VFxP_TH85MK+`S}GveIW^kV1{~>`431x z7?h&Ghq!=D0u9_qBq_+rsai=$C|FonNJs>y^YiKQ@kj9S^UH#E2e&f#Gkjp!0csV1 zcK0EtUGQL}a&HuyB)=q=w4i__kGKG6>jJj`tJ4lGX)Z1SZeA`PK@M&{F-}ol0dWRK z24e};5-c)+yl>c8_Nm_3W~C`=ZH#kh*~JKvx3IbOBvi5UNX#Jfb2&>R2z`! zgHG^Y5fx?=;`H$m7R}<~<>uxomlPM|6a(FjCdA9e&CA8W#Nhb<7Q+MZO;Fn4bJxs` z*+h+z77`;oq$~=mwxH#|I-8>_lOUr9mlzv23zM0+2#2%)hYW`di?#@t0%(+1l%G?a zpGPg3hmFmLgI}1H-IRlum!FNBlaG@tgqx2?l7p3nlZTg|od;AuM*P1Hp7WJv0L{F> zTGXIXX*1~Yc%W@?pldrpRU{i?gF3i8h0HxK5@liK5D?*FvlTTdWEAEXV729x;1FP9 zQdAV>@etr(6JX8g&17feven{}Ff($Jk`mVE<&jWh=TVR6;$swL<_s5BRu&dz0bPa6 zz`~FKZso(yLehfd4N!^zr3?@TClyc)4aSgM!3H^k_*q_FB)IP`p{J!~)n~7zrOD30 z$Hyte#H=K$7aOA{tRmzHT3jJ4DhyiZCMwU$&Mqp-z{!yG|1QH%@ak?zp9C}t0lAG0 z94erBJlGf>n14wS(E!`X2^uOfH3m0YltIHgpsTsSP6rJ`g3i#*Y}HV4 z;o$I*;oy@HP1_dCM>-(vXAuob*6o!yv?om~t%^Mcw30$tTM zSxSbLn~_IKUXN8*Oh}xQlSfd1i<<|u{g6djQfjNajUtl(k1z`_w=h4Ku(+TchcKVG zf;;F&pDF*pGkgKB@X=<_2c;3v)GxGp0H+Hm8+`->TZpiHGWA2%3wHuYi?lRFo8_k-`CHHUU;V9h~feo z%Fq>~pw1{P@34bv^EcVdtU2x+{+u!*id?Fa(rUb_l6*W|y!_Jq!YnL2f_y?O%t^`a zAi!q9%P%~Ok&VNLS5cIULy(i7pHq;Xhnt^=i%&$xm5r5OM3tSL!(Kq1Usr$|yh}d* z{|$zp;Is0F$?++2^9RfsnVbb^dmx)HmIpe(zTDKD>(uz-|=I%EJbBwm!6gDakwmy?&r zNkmmd#ZZ-3LVTj}>5WWhi4fz#s!oFQ9_~AP0OvEeFR3s4y=xXEbI4^(uw985LQ@ z1!TlDM3rYVb8sjNatnd3t`g;zFkluG0rlz27+e`XLg#js*+8`e==w=etb&svJG4Oy zp4w$Mei_Kjp{dHQ#LUXa$<4*fEzGOOE-b}l!^F?RFTyU&;<<#Co0(mJ4K&%u3p#dz zM^b}H9dum-lPN2gup~1#Xr(~X|9cEypr=QQKyNDqtxJQ>W`jmGKsgc8764^H(BL*~ zsj;cD=##=iQFnJ{E^Zz+ZeCGF&@`$x*CZY{ekDF<{?H^r2Vq_=4o*%kUU?o4F2^8Y z;h-SU9&!+d-uVLBJTng+I0i9AJRxx2PJWHQ_#$gvKYI%nL4<&EFumX zFatMpGTQmGvP2ymQaZRL*|<5F8726Hm}I%dm?V-!Sp==6Jtdb33c6bgicc?z;pAr& zW@T656BOg)<={_F=3!>^l;`J{2epw!8O#{ofcM3M)|r9MaRZc%qB=u=Sv-QA*ziPoZPMK^YJi6$f*;OFPJQsU+jRT33dGFRm0W?*Ij?bN)?pv%Au zUWEr~=0kpQ~JHr76&|TwN z3T%&@*5p)izv5}cMxGaTKsh|bfki*VbNoaEF z3iB%n$P1~PiW(aW8F1>ca*B#_i5Q47@`!T?ureuvHlK3G@^NwUbBJ&lvMFEG#N0!Ys(hC&<9Wkj#(=zMEGPbcP9J#RO=!)l?Z28fIqT zpf@%Joe~IbYizdV5fI@QW#Sd);p1Tv5w;f90$r`ZwO)-)NJv^xjFXp*k6%4u_10nJT{= zpS+-`fV{4hzLdTc2yt+NmX{>*bFlHVJEU`Sr!fieiU_JR2{LjEvNCH53iI&^NGmIf z3PY~UQWX^yox;b>&dn>z!O6=3-t_>QF#)yIsB`z?G0+iftTGcNz;`c-SX&zySV)8K zUQ`C%y(nj@r)OztAnGrg;_pwy-HR?fJTBn77gHD}LuVgBCznFfI;hnQP5b+`L}g?| zwM3<*MHlk%3G(rQ2vC0(bVK@QhA9l}48o8$A*@(~tUp59*9>8@BaKGAYO)YDO%-Ni z;o;@s;1d)O_ZH^l+ZZ|w4RV1QsG>B6Bw8KhR!SY1>E(rgD^0A{Le8qX)r&)sCfY9=NdtSHLH#V^b*D9*$v%*bTi z3mQJ=)(hekW#eYk0fRspX)6{BbqNVxDdBD0GF*I|+@OVFd>mXnf_#kp9GsjSI@~;h zT>Rw;zMy)JM>>#)pGQB0g%5Nii=;E?gg-;@-Fyq7?OkK&4O`&e7`PG@bj^%F*1oTF>2{(YHDcc zl(Dh9Ko$uo=88_25M$-xVav_U%`Gz3V`t+RQsfd65Rm2IWMyMyW##1pLo*Hzc`z$f zCc;UKpVb`H&1c|X2nWwS9Ap5UF$3zcf#SvmeDXPX%o%at4rD~v%+wT=N7E6pRqCdDnxCeO&iCBn(dt0X4C>L8@0%*?~AuE%Gh z=$}}e9vvOcB5WrdXlK{L%*w~dBhJRh!mVy>AziOA2b4@|Nj=lMFuORwhnm6ACyRx!G~*u($Gb5QC1!S+fe+{HDh!ASetfS;CoEgt$_L?d^Glg;fNYgxI;b1v!OOIYFJ9K6VyX(5^RL z9$r2^PALsTEomMd9v;xbXm(y!b{-Zs9ySIRaH@l>rGVV3jS|`#LUOX!y(AVEg;CP$0=lOEzHg@ z#LrP2>fq_=>A8T12egrsUyvupjU9CEpE2lWaz0MbNxa-boXUb6*6cjIVjdory!@ch z4E=utys8Q`{sOv_Gm;?|+;f3ccF5@rQeT6c)gae`wneDHXW*d?3it#DC~>i|DJwyJ zC<=>vNQ-%DNN(#;RRm>!zsM+*lY^U!Rg^`SMN5#MMVm#A zlZ%~;i=7j6RnT%Ce$b8Eyli~Dyr5ZUPF_}CUZ@x=Z@3G;8V5HU4>LQPq8b}FXelHs zkAx#5zn~POyoipkHy;-}2RA3H3?~~WH#f65n*gr>vzH5t0Iz@pHyZ~xmkc*6CpQooxOjvxCkH1V4>J?9Ag?eFx4s;& zu@DEF5NnYjE0-X*mjFAn0IMeG%<&ope$b{Feg%F(^*AAJem-$Qp};^1RyKYvHhE@d z9%g=C#?YW3XA=`;7EuXiF$oq4AvR$FW_~edDIP|CF-B=n578Gq5(8OHmCTUNkj;=! zARmEOXu~s%k*SHg8R)D}NS*<;Y9Pg!C_JNqYhiHF4Uz?qB!HInf-rbW#Mtzsil`ze zXDN!RNb$0B@Ulw_GRjCZaj**TafN%fTxk%*e&a z&(F`uCNIg)r2$?@#xY+&KtMncM96Y-@NjVP@v^b=>&r;Uv)G98u`x0-vh%QLFiCLp z@UR#2i)f4SaB+!-T1sh2u*qtuim(eR@-y)pDQoG7h$ss3ih*})sQtgm@PNUaL7qVe zItC941H_Rc%AlMDFEK#%GITVHO)ZE?kTDE$xG|HRtRRQ1IFBNSJeP$Shl&Uffm|;#!#U#42pSBWd0DlV?Cudgq@Fg#pT zS2w^|P*6|~M5x~v)(zGb=9#anE37N5tE=EBEL|TR&BNoNsp$cw8CV!}87vtt!$&(n zyM;hYCd5IFBv4xpGKzP3nI5Y!OUlF=2(T;>W)@HsFcMS(?JNeJ0`i%`kwF|BD$0=i zlOSDdkPkqu;pWU>Aq@pi7Zo-RHB(*>0l!EVCSgW3VIe^_L2i9sSph*|F=1{2eg-B6 zp8t;-Y8bXMh=AwmAtM6dK|XL3AGFR(99F1+f{UG9T_DGdi`R&ijh~N0fRQPhk(Zxa zSxa4AR6|3TIh$##u#_YdFE^W*EGr8Ot1zR4%yRHm7h251Tq59|jQ1Hb7&bEq!^Q^S z3-CdWb2D>gbnE!S)Y-X|S=a=4*#ww9nRvO`r4{AnMI|K_7{gdL3rk8cbMvrC$g*&8 ziZDt_FVzO!prOt#462D(7?QxJ(}MQS>N0>zNe0j|74VV8U;=crEhOiIj(1Up65wSm z#%k)yY~tXKCuk@aw3Qu{X+Y!QkV@s1EhCeu6bp;043{Lo437q%G`}dXgd#JuxHJ=^ zrZ$r>leLEgGYb!skf?xyfSiz$kpP#P7^j$_Hn*@CkH{dL4HAQ5pi*GEmUxvF3pcO!%6{Vn7 z1bEoP6tuXu?`_H|oYD#=CJ7S4;=&mjjNC%(%o4&3tPI@$Z!tV#m<=B_ zaDt>GNTUdnRZZEzYXLy_GMR&~%7zGw8iR)4Ap=C9DGE_#Q%G%MEUMfa=ngvFzhF*5RS@k_{Zu<^=(MSMYP z`hB>#yct>en3*{FL35O#lScCy_JT(_!2KmqR{=5+0Ujj)`&bmTQ7>CmOH@HkO@Z57 z33QW?f|gyHh)9}-uqvw{JC7ijrm%*vjt&D8Lq51R*~b7{<<0=U-j^Ncfxc|)qIH&9 zoXU)9s!W0`tRgIe{4y*`iY%@yu1x#_d;=zofl3{4HiAxNz|Kg9H1@#75wyQ5tD>zf&B4j7A}S;*%_AYgFYG3*q5@j8 zXJn)vA|Wis$H^(Es36f-lgte}XXD6fzJpOC$nqN0K*sLQV&EFmn##mpikCo3W*AS@y-Dkvo^5y&Ut zAj`nQ!14bELn#C3#A_+=3ACUUiN?^n3Dk52$1`N8#TZtVfI9FTO8g>Ra$M59!t(J6 zn)33Z($Y#1L874j4jodm;$p%gVzOdZ!eYXrqQYY3A;AKIj8JL(ZB}h$%vnQ6h*@D8PlqfLTC{Sp?Kq z%?Hn{?gHO*3tf#14nxQZD&S%Tvci-dG#zqS-I_^GK*3IgTa-_fO_)oVL&$`QS4e7Y?ZAAv!OjZmmG(x7P}BHH)wrA&i^~$ei%D=9v4(%8jHej z2o?pc5CHA9fsRGLt<)Da-wom>~)}<%^G>Pe@RJk&j70hJ{Ip ziA70(NmWZr5wsQ0PSi6)oY;1QZVG-hV-T4vC?Fj*#WOB&Qq z1$ScW3S$`gMY!0a-58e$3rmI=YqQB3s+&9Nsj#wwR&g~#S2iL>W5D?soQFWgB4}p` zG<}1HVj6WtbwyouB_L2^o3ZgWQPIVq?Wjh=;QL!Z^+x&sJK)tI+zg7)z5=ux4a$<> zun{0n}i9!Xw8az{wI(S7xUzF>ftsfeH)9Qeollj9Bhab8`k3h6-?< zu@#&PMHwVPA!Q0F%OLp>TFZk*7mn*WGRX?aTY$2lP^_q>sGp_fB4HCv9$h(BT?u{> ztvnHtJYf@1eCGeZ$pE^=l9hoQytW85cP`GRtZoGDVM2QC5F3m|A>;h;(g&P9&6OW< z8e4HX$p~_B3bI)Uaxe)o>j-o52=cKc^NX9BiVCsubDEnoO1m5s;uex-7nEcb7Gx0= zW)>AwF>D3z?gyW40DRdK8;g>t=vHq#Ies2t7SJ7dT!LZ(5?s<^3f_VYj0_7HI2b-N>}CM% zW(Nf$2qQI;jNiLU$jFFtYfEuS$;nA^2-^vpFblGB2(p_C+kw&*XunD}-qHlML_-Rr zWN?Yb&Ce|$$j8Xd!Y=_j@sL@8gHcLFMV60+nV-omL|l~9i`mqe$w`4j&VosZIT~D? z_%aE5yRhp+0*R3Uwqg>rCIr;#1RZ=0Tbcr?5FlAg*%Ukw1ZlN`G8(wrRW^NXsKdf5 zDy+b*EGDAFD=R9%E5sup%o%QIBp|@U%_kxvFDfS>AhvSTv54pN&~mP$D{7LJ)L@BpX8(IFIZDuQ63%Pyw$q1@|M=q3gdP83x={Fji+{ zH&z3+l0g{MeE>CALD}bd7_+dT2s^iqkPyEfk0`%BFJFcUCzmR>y1hN4gG0Emv9O!5 zv5uAur-FkvtALEGtRz1-A2$~dmmv=qmn*+6zrHIkudARK12?z@3z~(3wFs1<^9qo2 zvB0}}!Jz>fs|FXMpeYbzQGRjW&OzjGt zENv@cbzu!*NhxK?C^==>LI10#I}AOOFzph>@tVFe9^~fex!O zvq7(ok&$kJo}r;lri6qp_&5qZNy$=v8Gb=QeqMeV8G)_*0{nvB-h%uBF#-Yt@_c-t zInliTw-`Qy&msh!b`H8t78H*R;1kuL&Hy=%ogKOw3OpE!V1w#2Q2c?Ef|{Qo_wBZ5 zwJwG!=L+X$4hRTvG&JNF7G7Y_&u`B!Ai%E$ zy3mY=Q%H=7pOYIjtjW#+Vsk9d&gS8fb~M%C=VAcuTY|JkWf-Cv5z0D70??DtSS%04}XS6@r?nu?Tq1?~ReJ zu33}0wziQJn-B}LEW0qfjFN^rGY6{xHxC;N3!@-t0*ITJTacTTNkN2Bm`8*|fQ4C# zMNV3pk4IUMo10UfQHY&KfR}wXA87iXpP!Fkh=q$sj8(9VpO=S|i(P=1M}kX5jEjSp zlUqPsfK`xH7 z)E@x1wv^e}!I1+EALl0!2ntUN}Zr#v_WyK!izDiAPh2iJ4!TM^-?s(t?qR zi$#DNbSj$+hcpkrBp1J+_yX{JGpL+U)s~Xd*5&7~;O7(J6yV|K7Gh@R;sS31V`Ah5 z9d^ylEg~QwC@3YyBFZQxz`)A@Iw1qJCXWZa!veDM0WwQv!Qj9EnTv#WvB5)Xpm`}! zlMys?2dBXe4|7N(1c?O46=lS z7Y{FQ5-$%2Kf5+B2Qwe5Ixjm5ADcwFFzCtmx<7Z{(Vc=p&`+t)Gv_1k>KG`xjGI%ohGJs}} zK=WRN?g9t(I-rZ4*&!>XpnC|wD<-gQlzyRa3%(BAK#56(S&^AvKvMv8;v$bQkCCW8 zQ&^a>5a@t{7BGPKx)q!q}BAgDM4kBC5uT=3XED2%YH0f!uDF58@)UEN$w9nt~V- zvu5Gs=VE7PV`F3E1rhA*T!KY{FcDT(R#vra77<2fdFCu8DJB+PA9Hhl1r{bzmNH)M zq$F-$K3+avK|wIZ9T*oEh%92u%gd$C$;B+dE5yXhqt46A%gw{Y!@$TOz|a6+w*&31 zLJMb*2aMyLL@g~vokXpyL|2K434>0s6&3^aMnR|7zGWx|o$v)&lL$@&@U+^X;KXC6 zBrYc;EhZ}TtFmQLV{CWjYZJfM4FFLRKkRrS4@&m0^~Qr|92VQG1P$lrYy=PW^62~44VA~ zhlr^0yH$)FoNetwLUL)MNq+vEY{I+(A;Qwq42%q*n{eMUw1W1Nn?sI|gUpp6sy5Je zNk|5};>DB{$*--%sir3=?8oIU5FE|q;UVf3Ccw!lEH2I=#33WAE-fq}C(OYmAS@#T zaoJ6VHw<;4)yR+<1#)H()M2203*?X{BX(Y1Q5I2VX0{}m>As?&!cHavDk-eV3d(H! zLPFBAj69rd5=O#OQhK_A?84mO-P|`BzA`j0NJ4i5fT~>3W>d)N7vN)3LF*~OT}W|u zHdu`fUh}QI&|ONIU0S4&T>^Bot%_*=91%5TJ2q!MB?o>p6%k=xaY;G;ihM2s2`&*f zJ}zl>(2+Up;^K;$!rY8POrm`3!c5#eg1jQU{GbsgKJc2K4hAj;KJZurk`T68TWuSL` zKVqn3UK0j zh@>)~s(2M6uYe4jG#8s0tE@7glp>pKp0Kelgq+?u_m6g0jB?a^(LYFiQ}P31{Z#v*i*OW#?4Wk>?jPR%R9k&klgh zeZf$`zzj~kpf)bHIZpj~J1$po^QUle3rL9zu(7RVlo8-{iWL@C6qb}=;o;$uQsm-b zXBTCZkb<7_`;?&xY@!&fV*{>olws+@R9jrsS)bd;nO|V3t!M}%KfkajXE_tEFdw75 za9Eg}vKWt~rW^wkgV6sQ4DT3f!8JeRq&m=?5NM$^_~aT;mH^G_Le36UJgjG7!6>B6 zAt1zV9K_|VRjei3;OAE>tS)R1nXoZ65fc*95LQU)M}1_{s}195fGI(TT^ z1Rfy=|lMlLQs4sKCJc_|(>Lndx6Yg?vDM`=+mtt2ikQ8qzo23GK`*Pj@= z!J!RlXF>Yep!qUrR}?g011`f&jYUD-HPAUTF#4K|3?I7$2Okext*D}+yQrC&nYWRV zH<&CB5?18pViaZOkTf?J4iXU&78Ml*Rnnl6g%^AtZ9h0Bu-=l2bYefK%IEcw7m)Vn za#vJ$b_l9k!N|`k#xB6k<|b<4sidN;C@80`qqX@%&OXu(^Q22-(dL2P=Xi{hi4#At-vk{ zid0Y}o?_$%4~Z|j7Z)HJU~QdP02vg|5Ehnl=J6K>&F|^{zsYcop&sr_xF1cS9YfHf zdEJ$wpq=XV_4Vq@mI({jh&xF*OF&XQsJ+q)-tWx-Kk*ryjX~{V&`ID%X5c~%l+VF) zPM{QaTUfG9l7mM`nNO5`A``D7hZGwlV+#jMdKhOdm%pPU2OF0Zqhtg(AD5~oE3X%i zoG3T12_KuSEEktM_;d)+{R>Z^EigGy&jDtoDB}1QP=gn|i^uqUH=l%%hJXmi6m}tD zDK-Uuj!DUWmX?;uVq)AX%53~LrqaBOq7tSa!OoybPjHP53gJ=)J_a#xiw80qWyb_s zdo2bs7_sQ?BcG5opE0k391n{q3zzf;QB$@=Ha|gr0YQE#9w|v_DFFc)9aB3ADS`S5 zK_PjeQcg()c2K>p0$wHE1Zfk1>J>y=9yH>nvS<0MS!>s}wzjIR5SDh55#~&n0pAXM zo#7=zGkDD^cw81V>;&G(4GscOrxIMwfJS6rmT_`37KW%nl~ zh4Aw*CI||7@$n1FDhc!QvvG50Yl7lap3&&>&gh*iHq9_i;1xbbI8c* z3JVFCa`OsnOYm}oR&fb1Ov2ZvNU#&NwH37!wYC=B$j=X2Gt4IlzWElEqQ5XqU=Rnp z5wt%J>>^Op6V$t412umk=Td=B5io;vG1%43MVqu7c6w?9>T@3HRBXl4$!LbaDLvV~FID(pCj-aqvCoC)o z>Z5~hf&$fJ*BL%D)Prw8hs|h#m)V2TK0BzIHv%1*Wv*;$&19|&nRWy1)&vdBva6Xa zVo_9LmXc-?ROC`*XPn9*D=%EfT%*n|B*Y=?SkKxR#33TUDN=7Ks3yqI#mgwl!pdnb zs3FA5%EQa8s3ykC#>>kKo>RNd@PVO;fs;W7yq`=QG?xaBBv{`OY65g}1- z0Rc^|NKsW)0a;K3B$9_;kXMkeiCv~8lZT&6nN>waI0BLx0;ISEB{(I(eYu+qZyA~y zKsU~VcK(7gG`!^nwh=TS17d)-FM|e;#f?F?v>HE;WaAUz6A}><7T{nMWfPKLE}{Ro7@`1~KqR41+nM(F__1gv^u~i-PuUgKI!hW79@vMgbWP z5pG5%Wep)QenxqD(FLNqqN2J<=>nkbIe`Ic+~Ni*!s6mwQ-p=52uDYQ(y8$On+zWr z8X)`IM8R1Pv?>m%ECW@zpsjt-4X@^I*jiYKvxZcFiFV`DQl zRaWB?6m4(`T0VA*N;vV^O4#_v z#fiqm_*)4o$?__x3K&O5XebCsDhSJf7V^jli;Hm!3dl==(vI-|2Mli*>KOzX#K7m; zqn(NZx_m@T+zd2{10Ds16bHsSi^OE*3_0u+6u?aJCatU$>aBjn`g_Dn8N>;#ynOQ_pz(GuiD_B@pCR4Papg@|>gPBQ~nU|BB zN1R_Av}J-{Qi+F0NsTL50lYqeAAAye1A`!g3WGUlbs-{If-MJa0)p(^1~r5rLgvO$ zMWD^x5FxE?>`Z(z9FlB|%t3ti+-AJy!f7mw0#Y2pT#QT#tb#)P@~kq2>1>Pw(j1a( z%qlGWLi}>f5)FntoFc5OqS`z{oHDl7{M;fe97@ts{Jf${!Z!R|B5bV6(ozCEqACo` z3_|~}GrVJ{1J|ISvIW#812sHBxdl|WLtC||cc($Oo+%66@v#$~Dr)5!Co5|;Rg;+m zbQ__lfE=SDpERRtov=g=A771xgha8295W*eKMOzT%qU?#ekn+wAGFK91$>SYf2q{Q$%gOQySn}#B$gv5CNOOoX=W~lnb4$qZs)+F@W+{p@ ziShFB^C?Pj3GqruC`k#5=*si)OR_7gF>&z-@Cfk>So10J3WDlY&}pLn3~jheQ(107 zF&<$hZeej=5orMlQ2~ikK~6qF9u+}QnJUGrEY1t+kw^T$&+wW7l;S{R(Q2lUQ9aNY zw3xB+%UmHLM^W24cFr6{UV&73d0}5pHc;sj@c#zG7lsA~R`93;*t4Me6FD%zeQ#q? zkpsNkynH;$9qf*Oj#nhLB8 zjNtP+zcF-!$C6+h7R4c3sUTAsP@CW-4S%{h2e*I}moSI6sK0+&kg%#ekD7*{sFW+O zokXCWJU17gunen!w6w6iu&6M%Ais=cV1Sx}paf_nLHPeIhBpi?3^L%8RM3`HLwntj zAxd$4l4T-t%1q2c?5x5}0W6|C+~Sg4?Cd<8Lfm}9yj(RRvdYXXLL3~z%zn&*JX~N& zZcZU?USVFYL<=KUK0an?6(#{b5oQrlDG>oyb}1PaMLA(sZV@J7 z5wN7BG>d|)u(TWl3xoWB(2eZX*n3@|A`vvNEq_#W_UzeJQBk4>1{#YO3k$1dg*ga= z%T|T|Hy9oZ*7JhCD}iURD49Gra1MGZwo4Mk<;gymUy`Rrx5c=>s_ z1q21T`8nA{w4}t@Li$8SdWD078CbwI)Dwn&@JPEHxYY$6Nnr<#wnIlJLH#jhQBb`F z>hzxP;S&{7;TPqY#>g%t1n%ukfgUZCB`(6Hq{7N?XDQ7uDrpgt5yj^!q$^hJ zp_PG`K?vHjf{pxwQ>(eLnmTxSJgB4uS;7&ZARrser6idyrRWkSB`6#tnkibBndzvc zq$DTI3)+Ont0W*OXdcYZA1n+?ub{epGD8)lMJ*01R6&jg&D($?Nfb13B*LDm#3Cyw z$s#K+k}oJJDXPGz?x7>iBcUv8EG%p+>=A9O%>ufmA^87&hR+OD3}Ornp!5Q+Lcx&^ zyEn!7RllvPtEeoOzX7L$xSN};qOiWO1{0$Y6R!|EvzD+vs7&Dg4{Fm+U=RZBqX9)B z*a+wz4N+w_bHsu*q(yh2vx&S!dHMOYrL5ezL^vv2`S?qPB^?|fi>#fTSfxW;vch<{ z_+?atMc8?T#h3)Sg;|8f4+@Atf#E`}7?DB_2XUq`I%adkj7G`F%x^BbDCd9_Zo+~UI z;wUI@A=;YQl(w-l@hfx4aWFEw zF|o?C3J3{Xv+D~ANifR`F*Cb1nDYsXvUADva&Zc=vC6UtGYPP;2(hxTgU%L-2Dfu6 z5Tj0r?heQ^;A9LMxVQybhnY2{*WE->Q8BfIi;q#1g(F8;I48iB+g2XbHcSNH#8JZ_ zzyKa!F&Bka%HYWz(4+`BNFaf`iIGP}nopmPN0(n&Qk{oIn2oDYh?`xAt45EDQ&nD& zUrt3;hF{b`NzX%Gj9Eg~kX1~ERT&g6p!znIp&7I$R$N`&$jsCPY`!_Psez~^#6(5d zv^j;ico_v{_*8_L*?5Kd1cbPF`FXi`IE47QMMc!b8TrJxIE4jyMI}HRVEH&fM}zTj zaf2#EX? zP!|^G6W~=65EhQ$l?2_k!6zUFx~qqoA@u(vhR+O*4D8_bsgM>eyhBgM!J)YqGHL&sya;^=e?1c1h<3vSd z_>=_Hj0D8FZB;o%1T<9m_;>|)EaUu?#Cau^g=LwT1X)36X($Ryaq$Xr@iQ=iN8H~r z)Pu`3u=$Yc3KSBcAr$bb{V3&3rl<^)xS%MLsEe7XVuo(6wvmyjQTk9Dk3-F}~atR3tWeG`}S+X0O>3Iip^NBKBbBfEcOUtvWNVCbx@TkZ!iAXcBFo=N9 zC!fr~$)L!f1Mb&AkEv5P12aHPN6;nW>SEBL7w{T5b7gjD83tM(0cKi>u+3V+CM+nm zlvz%mNlKcLPmWWXm9c|WL5VGnO`R#9*@;htQ$&zmjj52?OF)c6WHKv{Add)_q@a$V zoFErFj|d|(3$wnUjv}|TG#d*aiy5z+96Ku?D+4Qo;QvPq?-&}vGpphZir^6wP+oB*4qX!^bVa6ST!Y`EF`J zfuNwKfG{@?H|S^-0e)d_ZqTue0)l)(Ts&Od{Okhaf^vd_pn9I;|22kh3{4DD;4lN- zi6$m)jGVf_*+5B6-54^W2c9*D6-$sgZFA)kQFcyFK?yELO-@N6ZEbBY5rJqoX+}NuE-p4LSyg!*bxt5C zcqPq$EsMPF6~oho6f}fKQc+n_E*-#FdNNjh|N+H0mV406G~4v?37u zc%uVoaft(Hym1phzaS3}A9ySll8ZkvOk3mQ9L{g++l; zl-qz=LW^5Xh(#<{P?T3#L{UaYR$Pc*SdfpAQGk(0kd4_@N?SsZQ-W1qR6{_BS5g!d zj{@L$>|~H&P+!Xi5IB7QtlN-V-Wp!6lc zB%#R6&BZ6mEyBgm$H2@W4zAz(z-?*B9c$p>cKBc>s9}P7l%KwbsIw!FgcO$`pRkA& zdyJ%s6;nEsF6b!QGNB0q0)|f3gX->W~z)TjNpbYs|kyRiHRzgg%YQ{36rQ09}gcNZ>X@i5FbC62tSXI43Da) zupo~RH@}#?IJ+>1DyX#Ol;jrSmKGLe5oG2PV3!b;lH%dz5#Rxzw*+dhd}Qbb--rm> z$0Mo?+SQKO%MQ+$AObWt0_ujGb!AEqld@bf!nd5`uiJ0ANb~5&~2gUBYu$Bfz9rlD?z}5<#V;?U=`ttuw*yp6c%+9W#eHnHDUC(VzLqD;p64yRTC7}^%me^7xgw_ z=M-S$7Z*3TE>`8_5)$I#)CCx9JxgoM>3 zr8tEIq=dP7**Qy8#XucxX=xc5VM}mLdz0Zc!wd#-22ej+4>St~ZXKe^)Fj0IsW`i-bYx?dodLMA3NB`4ekeMDx?r z^Yim_B{T&DG;3N-1su4!6NO!cLG44(I*4ZsJq#kyb}(pE6jE}6nhuEL`{5HPFiRng z7f5RqGL3U_B8QleJg+F*Y<50=Nj7;-Ha}5O4FOdVLswCISpg1ie(ofGE)IS!7cNl| zZm~=O32r$hR&IN1X+BX&OF363c`<%L31J-_VQUUS9xiTn4sHPsL0f)K0e;Y(zq0>t zGCX1E0FR@9=G>suQ6RrUX5GNec5s3K4+KEd0Q(csxuToq&TY5XWS0;!HkOv*5)&5{ zP~?>t)HK)VSkKG5UbrTckxPJ;NeFb_8ZR%mqL#3rAdi5c023&Lc)+Q@4O%{e;vLjl z1X%{MOAT~J3A|+ry@wJsI14=s?vi^-psY2AvW|$TlqQN05HtjZV-EO)!aDE@2U&<| zAdf)e6H;)1kGEl0XIE3-r)iOxL6c3IO-g}{mz#?dGGcLyA&;RA+LHmT%Yp|KDA_`a25(VTE&(1%w-`P$^g~Bv#lh`I(B3^W$S^P@B`Sl* zN5RA`r1jTUVSPF9s3knAdac<}SE3$TaBc}iOFI7o?#JMvnJxyOq3 z3knD_^0SFZu}g4s@CvaBbMOjr2*?P_2nvd;ySggN3W`bzgL4o6f6xxoNen6spq>@z zW;zDY84cLlW1zO0DdeyxaW+sH1v;)&6tq?v5)N@eVz$Q6m4KRzimIFn(yF`yIuar* zIu1On?gA#B7Q&pMbGho39n{!4dD(cx#WiK+*@aofL=Cz4WK=m>#rT_Jz* z@-Z+mIDyBJI~ml$p#{#@plL`@1rLb|QPcrKP#~JAgI1G>91CTV5*FaL6}4gE5M^an z)@P9uQQ^{%5LMxpgX~=s^VihSH&o-0){-|87M2uY;^R@(7w2Rb;^5=q5@P4#7v~V? z<<(PFWP+ER{S533;tZgD-6%asBnxLM$vcY|O&U ztX2x5IijLDIoZO3f*!)WJgmHe0zAw-yb1w)d;$896`c1O-ZAtrKvz+L$_IEi4pewS zF(~)IFlaOn6cg8cQtqaBdxwO0d4(Mc2QhpSO})&R_yh&{1o;Gc4MF>*40#3lY(Wc* z`9Y-vX#VjnLkHMTc<*#x3tw!zlTzfBfRN(xob)s@?$XkefmmRzA=Drc-acnTxZb2NAQXs&=|&7hGqt320PHWGN{f0r!vri8{o|gpw^Tq zXhsd38Q9g;K|_S>&<#%PkhLD5mX)!&@^ldnK@lMidrckzCV5_A0VZx9US<~1O$JPi z)-2h9oE*HeOwxSd4yq!HDyy&=cRr)AvY`sMte%nvBaaYEls3Pdxiu4G9y1pwi>NF! z8ymM!moNtxpD3#^n=ZIx&#A~J!lndX6~qNTJ76+{DuWFJXtxD=4T|2T08ObXgR;9A zY)D8P)F~4)W@lGY2enm2l6-wd{rnPLn6;P%1xy4CdCfSrxGi(^>^Uvf1O)g*dG*DG zIpYN76>V4rOj*2zg~by=+m-|c1i3*sWwHqg@hWf%vk9aM3NvzX@p5tq@GEn3D+qB3 zG1~ESf_Cc*fY-`_R<)>r!W&eEfook*T_CCsIhX`=IxTok3_Qv^Mbz2Z+S=38no&(a zgx!wCoypeL*;#G1sIa84l(5$72n%UmegPgKUQTWnVM$?8(7r@Y@D7IQ;M=Z1`|a$( zw;X}5EdjNzkcu==YX{T-1II3`%uzQM1)mVZZj8LE5}dk)C0!(SMR^6ej77{{*;$2H zSc^68ECx_2Y6pnD}y2f=nhj*%?#1gEqVy8t(TjFzytxUd#@E$=OcXAILBL>NGOT*37K`0xy* z6?mXB7t~$`IS;CU4V1XRiQCxJ_~K-CVIg^55ze{neEdRe5}a%@MWUi=o}P+q90I~z zLQKq&`i_oDqWRpy+%od)0uI))yo{of)_y#OBJzU5>>ONzqHL_Jg2ICGpwrDkCt-bH z=!LG^0A*m%=q4y7gVxJ{m+V0U0-nWu=7n?fiShA^@CeIsYU&G_m@%a>Nh>JN?`mjh zXwVlFh&9xiCGLJO zg5261EUfIHQb6keO@_w|jSPa|Stw{-W)A9NsT&)CI$4mC9#Xr3J6fPYeb9C$Xm~vq z7vd0Qw_z3);^*+Uva({d-Vz|H1_q72Qlh+K@=}~4$}&E}Qo=kO9ClN?1*Do3g%v@g z6+z%uO%;4i87OH$Lq$|s)ELs*hIBOFyNWtHTXtHzP7~r3}-0+}oH{~E(PhUpA445kd$p#DE3t3pO{Azf#9=?2-j0%^m8QU-W! zJUFgEN1G~3#K~xI#9OheO2s;hnDAIji>ey&>PtH1tGTlpDe7}_S$PQav$ED0a|x;` z@n}RzhzoH$5tQI&V;AJ-;o=tL z)naAi;04w2eE%OZd}Nr+0Be8CgWAlXf(+D(5>*Dz=oyQGcm9D|;2?Z;m1u%!yr|4$ z-EQrLiC~ZmY9krt3a6wv3m6F+f$w1A{(pnvIYT>xFud<&3py*@7#hpqz9VF{6liP` zykE)GR2f{)fEsG-YLGa9v>zdCxhN?S4pDYi0}&Bkw!CNwVNP)lLq-7+fe^fC3q_A?BqFRL-^Tv_<33Q z*?IVQ)c8Q>N3wxP(0(xA|MwU^G4z0LGK1`}gSBkgjoCp3JM`KG&;$a!BEK0WX>Q8H zFU2Fup2EVb$RW+f9KpuoYR(zRC9EWAF3uwW>JIWmaEXbsvpaFK+A45yakH^YgT~T9 zXKjJj^T{yiL(+~oBzaXGHZ5baX~&|ZaxKRB?*3EZ8>XkW;qFFaZv@(+!m+@#QFag zLj^-CgBSy--v&?Iuru30`^h1f8HI@QNC?RYDQl~6StxS~^C`*madPq7rTB?Sa!V=- zi?a%{@(8doOA8Bfatm-WFf)M8UIMlKxS_o(&`t$&aZux#9g-3tsiHVgREkMP)L)2O zP?$$h5=`=QWo0l6vFPh^7V>lR^YN;HNd{I1`TsW=o-%ZS&#Qu+oCV78u(}$Q_&}v3 zs7hrw1s(1R3V+1t2CPAQ$vuik8gxIEy95)nAUlT;bE=VxaJY+$zKfB&zKc;;AfFYe zS;(d+3c5s|UxbyDO^8X%F^De^)c57**M~H(*%$=>gWB?-ya!p;58m+#JEb2~Gl51v zKsgZB9|rNStPqVCjT4>O$vJBlcz|vB-6BaX0Rb%*LBU8LegS@d9nd{9tPGO>Z!)}K z=m6h^3_6KX6(wiGPpAY9XMqY=kbRI7^Di$IRqj^gVHf4#<781xRI%02NK6zpH#ZE= zaB~af;Rfxss54a&6b>{5tr%uz0PXd8$I#Be&mha7$-p2EYM6s|hJo|77-%>RmV%8% zl|gg+u*TC92StHUPBU#$Mk%k8ijtgS5?WfCcDo$3b#=AXxs0?0g}GFeyuI1j&AGdo z*#+5|g@lEL6O%v}F9|cSF@V;)fkr7IbJ?IU1p5)<3s|^;!VFZ?vxDZN+10_D0L+!E zf`UXfG)lnaj1@;8O<}EIW)e_mljUM$tmL$a)#Df7*W(w^78K+W}QR6OuE@=r}E`t76UtBeqmKnSJ5a}*E&TpZgyb~K|xMIc0MjXE)HHXMOJnRL2h14e;zJhVOj9n z-&+j789Ep^pl6_oLOb1{v$0|G1IRfMvbokpR8&A+NVL|hbuLJ8&sx*f@dtdpl7x~)?|WQjE+HV zAyCl{ZE1k=2dJ3%;3DeeWNfUjZ(*UYFKWuqZ)$1jqN1Rnpui^~0q#Ka3GxeaaVZGO z^9l0h@C$;*mO=ZEUNiJDC^D!qfX)_x*a|AsVYY&71DD+3CV;W1GRQtN&?W*?HqcgU za*~x%v2c z1UcE_CW&x*2{1Am3P4+j4;lKw>(=EN%s{OZa81Sro=<~CA!wNm)YqUz>!73Y+2H%a zMA(hYOamt{am%u^@%c+~@$e~$3Qf&ri_6Z=&KB!t7qC=iH!|jQ;}T{OW;3 zRAgu4=NI?(=5XTW=QU*IV+0+G#l^+O#?8jY!N9-{o~3@yFr7h(!JNScdXfa_EO<}{ z3Upm0e1-&^)WFRWSb7%&4TFKMyJH7Wp(um;g`i+#gN;VR%4@H=Y@32p>`bz< zirL(3JlwKM?6T|}g4`jj%+hxH0xZnz0$dKDV+?q;Ku2rvf!ei#{~s`XWSE51s?`UD zHE1RX^~_VyQb151!ge%7OR|HQ373_ekeDBbgQ#y9=nPqDE&+aSz9_L9;-a#mGNN+T z!jim#e44sE!W?qKT)a%&j(i+Eyj+6j!oudlkZT7Rz_Zd17~V5XLAp5ru|^A)0zvbK z;LViagHb@48-hUtWuVLps(e5lgZKAR0|VXMVq>M%IYb3r_1M*U7@IMRGKa}jdAcUrIy;Alixx;kgiNfdX>fLq z=NI7T=9U-G(&gqCEM!!b=1AS$&{gb)dcxsHH0| z0^J4-&jp~vWI)B6s5lFgFcXWas457Y6b%tAh-P==6wZ_sl~A0*%gM~i)ypRuuN0|b zF2*R{9;waFDa@8+Y;0`Iz{&vf{}brmCeX;LF?hTM+93oLJ)k84kPTz_`b3h-T3VtS z8VaI%dU|>tVnQ6EY$nVS0s@?FhK7cWM#{0W!qU>hvVlAjUh*X!piYsTG^dD)tgEo3 zFdHW)XkC&JgA&7Qh7QQAt*A0M$D?j226x7c`Itau7I+}j46-rUTv`00yQ~DKyga)) zr?9B0s39w>F)P2CCYP8XD?2|2s}PqKuPBeAuzrW25Ho1u2M_3oZccG=eKuAh5eXha zRyKAv9u6)J0ZwjyULlZcAft_X;QKfsopewd1qC;#lvEZ~UTDu^$Dz+^X)S6eYHlvd zuEZnAAu0%(L=x0xU}2B}&-H?KH-gU81Fho&1*Ea5GN=szE!aSZDJzQ_qu-2bE+!6I zKH44=P~{;N}tH5aed&7Gz*#;Q4=xp_HK$d|otk2L&{4!9$dwa!gT0mQzy3 z+}zyUp4moJn2Do|nM06`1yqtta|(0HNizw7+S$3_)m)$zu%Ov>&@OGz5onN82~0to z)j_2=XuMDaawHnKJcmS+6HXRWWWlmXPZa!WC zUPeYicJD$yF=0V2K6!m+W_}i4At5;xF-A^SAr3xnZeey#E`AnSQACwjN{E|}hmVJs-6o4o&6q>CRYF2g zhLaa0$j8aT!6v}RC&J0iBOoHm$;-hmtR*PKDA@MA>}`)FaTpw%ud-0VJ{mS4-e4(zf@08J3DXTI1^7} z4--%037QhTg52&rf)WyfJnr0ryb_vW;96S~OoB#kKrPG94807T3@Qwu)(1F*Koi99 z{=PY+&;tdZF?3)AcJ&T;hCvkEK?Scu18o2VcT^!8>iapkK+{@mp<9eudF0r|*%+DS z8D;sUMN~xP4Oa+D+DP)U2nve|YcX;ObMUY+NeGK_nsTKI@bil*v-1hd`hw0@;IP!y z<)L#m+T^hF_eL4n73Kou%1 z+CXFXpgkg>-jT6ccZ3ELi@B(eGmjJ-4?ByVsE(+kkEkUpi+Y5pv^Oh@4NJW+53i1- zm>y`a7%Q8wt*xG;n52#%hp@03HyH}3asmR};-Vaaf<~aZOg&C<4sOut zCg3wCx)@kNYz9#VDF%6PuL?9;2p$mx)l-nMFUU+am<=Z2yH`YD17)C<-jJ0Ew>d5B zxI8jM-2}LK1-X~;unMtpIS8_`3s`~((P&W#2~lA-0nTW50eJyyULJlvo-RRNCLyLJ zD_2h96cpnW5f&9-6BLmLPey|X9$sEyEzoJw%4%GOT=Kl!{5-r2Yz(0K`4hu5@SZlv zT~zjkJxo+D%mCOrg%S@`*wSXfx)S=d>@H#C7pDB>9!z^g0x!L2QD8UY>F3py51)Jqi9 zkyBqjUr1_-j*h*C1_KjAI(U_NJA)Ev91zqtMQxyg8_CdxzTk2JQkCrqwba!WH88M} zlak_5;1J+q4GeVU=Hun&a}X2--QF!KC?==@S%|J6sK(2|4_a}>!65h_w9~T&ycR+X zeZ&-0=74i9!ah)T1Fvs}By8lB+mI15NS!Jhpb&aKUXDu&bU331!f=)Vi>w%%xF{>17>gtuo2WFa zvLHxA0#xFFR&l*&=mPIp0o`i~x}yxVQUKI@1CO^r3RE`GacQ8^6Pg0V+0{W#RaOIS z#Dz3>r$n>C4E-lvQ(y zi?VT~@rrWEDKc>>3QJ0s8YwZVYBLM*2!$}ps45r+IttiHgUWc&c`qLrri04~Q2!TH zBEfIh1!Xbl1U+cTn~fdRTmg+0fi^{grXs-6Z!Bv3@L-r|7~2+6YZf6EMkjC=z*>~C zn2{-unUP1CU4n}-j@yVwQh`m+Uo@~xP(Z+1SVe$^lbf59g@Z#ygo8tkou5&ZnU!Bm zRFG3#T2KIdpFL=%`vJoY24Mzu1{;O|P-zVdG4Psd@ScX@2JriXy_i3NC`|Tq?q#QFswmDNq>=nsIr@(1$$o z3Z5?o)dZr(pb{5UV1T>|F5KX?251ZxG_?!s$w%5aJBw-wbBS?^x!5prvkQYd^y;GO z>gqONs9q@`C?v$oC%`Qzki^Xmy84z~QBf@%l%|DE!6XAS1L!=<_Y9p3atx5wPTBt)(&#D)eqKRQK{XC#6){F$G0;7+T(Vicf})(Q z?##}7hP;OSvjX@*jU!$z0ZvI-1s)z@W-eu6etr&K9zk6hJ^?8o(AX>s_#~~@4D1ZB zle!ro7t=!WEGSd3gBxhv9b$_u?b6Xi1Bd= zaI^A>u!?iB3JEexf^s8h%;_`3bOt*HCk8hLF9tt`AW%CNTzY|0JuGQ~PIreS9&k|x zsVd>~RGkXQeGglTh7IM|rwzcII;?xo4X6I1j;nEc47T~kD zHG444&OpL-Z?2?>d z33d@}9vMM3H;-61J1;?QVGbTHQGR|QX&zw#ehwZpF+mFvFMeKO4jyh%K7K(d9wB~y z4la-|XcgLj&~5Lt7=*z47eOn|^}wwq#Hw?U(?RYt2XE~Iuef6eg*7Ogkq3}@{Xu6F zaR>`Evq}lc^9x34aC35c3G%y0vu0;!=j6zWCW)3OB}L0C$Vm&av)il5^2nOWva{)P zaBwJbaI&!qNO4PW%UE%8TJeKM&q3|Px8M>HbpF3QxCIVhw*)F}Km$MEo$H{{IB3p< ziNC#>B$}kz-Yyy&tFlz|JTJQl8#fn=Qc{wrg$1bG^8yW?yGJ-dav{GqKQ99d1L)?4 z9}F`Y)EKlG92wj}YTAIOaUtcKs4{4<51OArUId*r z0B(LDx-p<}F3`a5xy?F4BBC6e-0bXbDWY*6JPLB2>>T{!5`65YIy~I$?9xG^?V`RG zzEQ4*!lVS`ME^}nAljk`6am7oq4!e*!V2NxVgjRKvIx3m&^>H z(&073ECzlCkc&aWONLTUk{q=^06LiRtSY3kWQA;8zd?^|%BT_%$KTc>yac z{RGfDP|!NV4-Au_w-#uE!xQ8(P|*V}mXOOu@T>wT&zM67J4BV$K^X^BGF@IK8Ydbn zTEi$< z9og7~rKF`Kgjrdgy!izMtt6o5mVIWJ0LsS%xZmpq6BnC-naH&hC@k=Q1D9Q8j@UwH;@bij^^0BhkF}gDH zbBM9=akI&)aU02qYx2ko>mG)QNvd$^NQ-LnC<^M<3rg?_@JeuTN%HgY%kT+ua&a+p zbMcFCv$1jrNcw_qCTHOU9W5y!At1uf&&eYQ6$9-F;1v@T7U1XN0iP%;&Y;Zjl3@me zB={^2$V44D4nUOzcxqG~G^S*%4BpEw9`EHP>fsS*Aj;3ny^v9khs$BM6DM~RJ9`>v z@&+`gBg)OgBE-$h!_COS%D}|H&S1>&nPDz0j+Hfnqs+#x1ZgOW z85 ztHO!pz$40$boW#IAWj* zdTOSo;x{)sF*6CXM9*oL<&czNlMoh_;T9B- zVwDyV=1GzewXv~hN@BV#>L@CzA-dHEYG$#mu1*1Ik0Mw=%K|2=j5oiH7?+IE3yEwzuct;pXGy-1mE{L5q$dus0RpM^M_bb1#%5!n%i6)lqAd`9WcmZZ3sEjUyz+w zM2*?hc0@}`{q1qI-Fhg%Gwc^A;gg93vAVyp}16L#2oY0!!_P{LtX z6BlI@6E_CkRtg&EQZ@y(OrY@s%Bv`2bc^J5IMt=Nc{q6aFHTpi`qx=F$*$suyJs3@(D_EaES4- zu?Vngak8=r@^K6B3ab0E@-qsGO7TnD3OjQ1gYq>$7e6;YFE3~w5mc+aXPC;sf;2V( z$`hcKF-TnvP&Et1;7ZPxNg1+69kjAc)Yw!Ve9$q%vl5^MUpgkBbJFZgO`V-Z9UbLO z6inq!6xtXS<7!QT(R8T+!8!IJW`AtOsp>atepHD z3~UU%|3PP=O=1vaP-f6$Fk!F)m!6;*7jRO9wYA}C6DD8^Ir|7wdy9kALh=h};7Hv} zF;rASkwZh0QAC|nj#q7;sE90wvKW()8mBamI=hBDi@!X#bP$WL7`K)gr@cM5sVjG& zE01R+XVN4)Zhj74ZXtdlUVaV^L1#f;c3v(4J^@~Sc6LEu5k5fyK_LMl0d_tib^$gf zesOLAZYDlec0o`tjN|`xh8GOe7`Pck!6!(9&Ljf$fWU1cQDyLWF1W8G4(%C&?zaXF zY=W`^X#5n~^q3|p#HT7O!YgLLVmrl|#a1*N1WH6T`1w`jbApBV71TIHs#67og#}W1 zd7T7|1VQ~{&@QD<&@oI+21CdyR!HMf9Mp#w6BSWc2Ok;$IyFcgbajfkm^gI60yJg_ zb4h!yj;M}k7$3KU0lO%#Bp<7)a-AH9AS;U;8?z8It89Lfovf z-tb4HeMl<7S~9J2(qR!}X5<%;=T~7>XP07CaxgX)H8bN<)aTZg;pOJ$<53b4;_%`Y zmsDldV>jg%6o?n(VP<6EWMLN+(QgJA-AL=MzL0{4wzLlGeQ#`^Uh@+NZWa`A>r;K2o9VPWto**6&8 zF=T+(@-di$+x?*J=b-rnP_YV1=3>U^x3a(*;gAvC21Zb)MV*6_TasPIn~h7DS5Qb; zfE#p@9>0{dv<8=w91puU2cIx6yBxQG5RZTtFF%t2A3GbLFo&R|0Iwjg5TBqNkCvPO zw-ASbhyu5ysyK(RqNI!oKNmkAFKDh+kYO&~6A;65$r6cNzOJ!pOv#D(|ttc*fT++3`ny@Xtx zJnS5xRyz13)7eP-RY2>Z!Kaf#hs;1NB*^jj;QTELDo;TzCJ+YoxIrTuph6hb`Mo%q zg{8Tll?}95gl#S(E5D!sYqn@N7dKm&ni^yA0^$O~PU6gRJYp=;GQwiQGQz^b%F4`q%#8e%GBN>X zpg9&_(OaT^-i*9#5^Ov?tWko3f{KcgeEeK|f`Wpege)j1$PdmfYyxp6CaPuv5}F#~ z0*XA`!YmxH5vF$xQ^29D2~Ovr84S?8G`PHkx?0&(8N9sL6jG9bT@NlhAU!AKQLY!8 z7&Sy~M76ckG(?4YIATRZ%WQ1IK<5v$_Xx4`2=hh@aj*!n8w#;83b7POFf)sYh=>Sl zY1ylBi5uu@3kpVyo3jZ^vWbhcNeFQY3a|=_vPyF?3yCqwg34E(|5q5kFw9}#W3XVb zV{l>cVu0Qi1nIYdx^3WO3EJHP%AV%x=HlS-8R()Am@-i93UxfV-U6vrH}mA>;b-UY z;^LAJFmYh7{VD{$1BLi#mUUZ!z;|q#U@}OB`nCx%Pz>sE5OFh#mvDj4BEB9 z%EQOb$-&6Q&M(5w#mvJaB+SDt&cVmQ#4XRw$IZ#3!NbqXzyUs?@&kBGUIyGI(t^*` zBh4B>Vn&o5GAC~eogy?f7KKC(Xv-C}FAEw_hBR>@Qg``5d!<;+%|(SXVi>uEISWPI z-Ob%Zg}B&-I8C`lIRu!QRHB3UIl1_FZ27o2_&K7pAe*F;gk@xed6X@sI3$h21%-6^ z`PtZoCD~-fRKRm+GW`4;Y@)mz{9J5&f@}id6^}OI*tqRLf~tULmu z9Kvh?ZjK5}IvPAmJjy&=+C189x`s@mtgQU}>_YL<-r%`dQ%!wtEfZN`DJdRq0d7fY z7G5o3F<~hIL19S=VL>5rVKGj2E+H}S*=1bdUc@v8Bk*{aF9WDP054Zmhc1u+6@}oj zB8bz#Cwzix3$Pft?g!T!NO1GL69};-SPBG)IA20N_0ZpduGCaR$v;kP-q+KAN+DnOmA& zgq4wTfhp)-L#CkCIded@MS+L_8>;|&tspD60C%VW8k2JS08fpn_OidrzuyW|K3h?m?a3wG@33ISXYm4d%3y2Ab zGIKDyiz-VAh$eIMGP83EiE{9R@-8p0ppZ~83%`(%lN~d&pr49LblPO$6P>@GV zP*5Fwvny!66EtoGIz>)}!2rBY1e_OOi4VL+o88oy9kp!<9&QCKvjm-b0-Bx!<$F+& zfSWPw%Y`jDB!wOL1UdDEKu2?NmwO2dsI&8P334+_xukP&isd6{@bU;w5D^mM6h?QRLv@;Fz}APE1IHQG}C=UqnG*L5&CxKR*X&3acQa zBtJh74-;tIN`!-fk%9aFO@_}5v%oj9Kqi@?^$Em9;3dyyAZLqVG^z|3*?5Gw*cwF@ zIXSsGxjFfa89BJvg?ac{d6`+5L^*hbMLGHS1$g+GasqV?BsoQOweja7g#sPO}&#T?wqWGtejGOpvzSa`54*w*rTi^_yzd{_yzcR z1cikZSjG6nGz6r0eK`3+vuoa|sae%JIwF!U5gzIS`7XSVc;=TL_;4mx(q!((NtL!C6$^gi^4ZFf_GA)jz>ZcZ-(uF zQCI6yQCAn$($W&(XX9gL6z5UllHw5+l;lwm6Z9126Xlf_6%kg~(GgWuRf8xIxQSiu{sWPY?1e%its{l3oK`l^I@YXv> z+?mV~7oXj>U_rZNn4A(*0+XgP=PZqAIXyklQ7@dVvv!%9PG#p8;S`u8$uGgr$T|T;SV4r!#0XSisj=Gnj)qA?%{Ypk@p>AA!c% zAgxPqZKMo6Q`*>+4K#%TI!_CN@J^bnyysFiVKBac~F<3kkBZ`f_pk zv9SsAiwUxEva<1sGpY-5u`n`m3yF(6K;|$&H+OO{fOaas2lv)Ndp^V&q#3jsAS=h9 zAr2bj0j(hhHR3^e5`>`}BtR1{peO;aBnGLwx7*C=va@-Cii)VBqNR$8xsnpQYf6e} zTAEuo=**u09d3SpZf+^?8gB`EPJS^leolLSE?zDM76x7hE(XxLdMO6bnV@Q*u}o9Y z(4aUwsCN#Ic5qb(vIsQ41EN9r;dWjDc|KuI3uYz}HeV0W{e`|s4q(9L&d(*U!YaVQ z$tWNQ%6I~PV3L7{f$#r4hHnhL(Ehk0_}l|q1}BCfh6si@h7{PT=#aJnv_3_zx4<e&z8;4$u(fjV39|7s za|(-bh)A$Wig1XquyII9D9LkiE3)znu?X<72#K}i)xA5g(%1|r84n|3W_S&iz+IrX0eOriwg>BYFY~BO0x*@3Ncz+ zFnLHCc}of^3JO|Ug8E0GmA_vZW`So^wHd4#AbZ?lSqwbG3kpbcP_=Gmj#z&Wxds>9 zdj{3Ppp9ve<~MBCwWv@>Sesi>fQd0%Se{o=lFiVOjYU+3T~x?chh1BiO+J*{*2d9M zV}j@|9#&B{9(ESFurN^_opOF5ZXq5XMkYl$UOoXHK~{b?HbzDPMh<>9CN?ErDLyp^ ze+wRNVJ0pCHC`U@3CcGZ5*WI`=T$1J8;c~D5ys+!pAEjtRc?GFU83zB*-f&&dn{t$H~jd!OzLX!^0`WBcrb-#lXf8 z_WuUMcZMzoX>d=)2wX;i_qv0+xZscy2Ngb`Yr#O<9+gGamD$;iLFagY90T4Z173p$ zx^51#E98lAxG*ydmjt^IyC*Y~o*k1S4Z@$r=Yw9A2%mIKO-MMzbO|Vk2V*du%I9xGouE0btPz|`4dA2*sZDz znhc}pz5(3a0=Eo6ohwk?2Py?XYtccApp-?8ABvibGBfikigNL=aR`WW z39~tJiVDkfsA=(X^N5M_@CsX-n{N^3R|t@nl9FReVDeB?Q*h(ubzx)@e*v9$^_F2KG-rTrrv>-g zAr1l+jqtUG=Aw`_qOiOJ%|GB`4LWHA+RO_Mdr&l)nJXK(iMqN*o``Z2QV^AuRg6(n zIHahVq@t)Os(Ado9lHXju&AD>5v!aWudFz$X*VAqKMy}Yj}A9CKQAL63m+37BZ$w> z!(+-X&d$ln#wIQ*&PJl)pKx zP&F&g%PGjpA<4iBUIz&ZLCCFfW(=T~8z`xQI&RA9pu_k;%VJj;7mG5duz)O|5St#0rnS1LoSdqvs4SB(w=k=ux}T^T4+pytBcC822Oq1d zE*gLC~Tt5N!@y*bk}zLF>|B!$R-@F3@nf*tLU< zJR&?Z962}z*_rtnxp?`x_@(){HTe|9xmY>)cv%FC1X!5`Sh@8$Sp`@)L=+i$g%w#< z`D9sTgn8s#Jp|2NG}u()q=lITxg=S+q=ood`303^#RLRYr6ffJxFyw?Sy;LGSwuvI zcv*RQ1=X3D6bzMk1vteF6|@;ZD-HhNV0gnY1AJqb0(@l}tSt`T=Ll-0f%1eY?Bq<) za#3ga+0T{6%|?e_#}A+8O21!MMZPKB)M)5EWq(bBD|V*$Z-W@w2iEvVv;367Xu(cJRrapgbtc09s>iED9cU z0ZoyB$~s7iB5Dj7H-ZFEL$)@vcCreyPOv2ySa1nSaEM!Q3JY-wwF~m+;mizT;LtXuNiuwXN1W!C_`I(pc7;m%n{`&xRU_NilF)&)OUr`pxlML zZvfhKEeqThkRa+U>Lc20I@`>^bhcTsXt!v9H3(VoL$NZqU*QG?oC#9H0&!G)*DzQ@l}BBV6 zdU_1FFky$3Gv;EDoCaDS2MJhEM6<*CSkQr)KtWz%9zi!ACLR$!K^|^VesLZy4rX3{ z4q+A+BVH+X2^Ka!wn@U`;ye=4qMV$3@!L`WlWW?tdL;$ljoBTLLb&MtuKgzqMn0UUzBai9MEVWvv_tk0~h$-jcE*18F;|wx*9 zbQZJ>4sk*pv^yyZDK;TP>kziNm?*nRPc}1)fU=MXyNQ^Rt^xNN<6u!#w93i2@X3NwjuGV+Kp zN`PhvKxy(TLmz`E1L*9WFotOGP1g_ygIYbHSP}>AkA?P`;FTFHcR|ZK=&UBBBMwwh3nIFUl4TnL*AOQ|)3&P5LQ0{>^(D?nmR4rZ(US2L)4lX_kUafG^2o+9tK3;Af zK7Ii~UhNcd(N@t}t*uf)LBcvZ_WXJroUEL@0vw#&LZFkD_*ppFL5HUaaS90QNyTw- z#qpbQD)VxJ>O>iEj+qMHVBhWB|44K=lFmWM2`a@)i`F z%1WZ(pfzTLo<$?h4jU%|RbOxn@&~9v2f~JCl8lNv7K@oK7k~s1N132u# zV?UtU9-Kl@GQ-Yy1qaCvCNUZFtP{SC!j~6sb1zu+j4tVIG8+ZT-T;+*^7UjadvO!cm zRnx*pSdbrdBuj^esD_4~EDNh3D=WJUJF_qgn~Z_RE)QWPB_*XU0byY?ZhKh{X-h9* z$xuyAVF_V=K2|z0<+L7Rd0%~l5mT9xG70H4IOBCeg6%>Pp;LXupvdcwjy+-4>W3|tJn z;PY(e!rSVgIutUS3*Iqft_*6wz!x$@oDS-$f;aPkyMCY%ICD_J07?!}3@NHX$$=eu z-8f{#>rxM^C?~%lFMFhDsI^%GV{02@4-+GoESnG;W0|U|rHYCrm^4#VRN~`c;b+kh zU}X_t^#GN_oGReSC_XbeeHnHMEk!RrK7M{(Zhl@>ZV_QN?q={Visj!WDsW1VR*|B%D@h(i9i+qThR@op_)=snxOR?pfy9E8EnAw zBB1yI_cS3}PGLL3K?|>L6jN&*W&t&G6`pi^%rGO&Yp zbAVD7_%;wx5q7YDkP1vti32KZK$wjkT<)8hLh}kJBeSs^ziP4+HDRw{5?~c%W)Tt9 z&`?p)DbQC@k!EA#VHObPVOL~k5n^RlVFjJspjgN+C}_zi%r7R!#Kj>b#4iLI7ZT;?p_1qHX(Kz;-{2;>f^<3USALGfWM z3L5w^hTe`EBFZPsFC-$Tp(oDB%%>@;F2KYrt*fS}#KbJl!o z0$S=TC@9FoCnzEqz{AHE&dtfs#mB(NP!A5RCI-+A@}N-$P=f@NFre!!`b-qL6}0`N zL>2f&xL7L~xdpkH!7(1KL6E30l=|401jS28}#| zW(Gh3kHF}MfuMM0J{)7m<08LKzZgJ!z>041|IOOB%s?-A!G8O6as2@nks`jrjV;R zAkKw!bwHbG*TqP)vk0*1xEq0htT-Q!faq#2VKHuzZeB4_UjFSI`W%K~+#GDY%0kM5 zdVJh`JiOupTzvez>U`Y%{JeaE;)0-@S@-`M!xx4w2GE@-;6+DburU(Ud??Pg%2kk6 zfM14Rl8;}3TalNKQ;405gH@f4Pe_Vgm?dA>K|+v^pI?AafKQN5Op`@kn9q`5oK01e zkss9F;QoJ|p@pG~fdzcpj3Rh_2ZOn}IJ+9WM+e&_1Mx7Vr~?&=pk63A4}n|+SvSrm zt_(UlK#Gr#pN-c*R9jnAK$b^>Pu7o%m7k4Mkeid6n^(bBkd;@EpIen*hg}DB?zS=u zvk;Sr92YMSXCtR52N$oryr7J<2xv2b6b}~%7morr8!tDXjG!nFJ14&oC$}IE8>^Hc z2PYewm>>%)C-elMHw@E|(j;iS95kYenBP=ZVh7iR;NCr`=0PM>aCE|oa%EBQ!AYRD z$n9`lL2h0lF{@ZcMqa)s(PU9o9yL{`2y1IEb0sBnB_(4yIVA-lr{v`1zUW|}-~mfWh`pfDHuf0yAs!yNFvm7tTJA^XjdiYZWO z02_NmblAY>|ENQSqgP4Xx+cEshYYuWE~!8?ikhr6a`OIs>8O2d zF$FaYKx2WRqCivx8Aq6Q;0Zt)aQBF=yVJ1B$t`-j_Ms7iN zE_Oy?CN5zvF-HCcRcyk1VxncDqUGgfT>=7vTzs6W%6!~hTpT={ES&tT5?nldGK@?j zp#2bxsc~1LiHh(GvI}y_ z>*z@H3a|_EgV)QjgHNlO$e;qA?{H!8VDJI&)I_UUOu?tO!Z&L`>K1cY4uB3tf?7M^ z2~SYOK(9#vWdleV=Pk-1E+EY#rzR)IC(I!(B+ARnF3cw_t<>HmEg~W+Eh-_Q6eKOJ z2x?K9o11&^^Y9ArsQOt5Nb*TYf|m6%3NVQZGcgOWFbN9^3rY!!3yO-0iVBL0Pl%1> z<+Twq66EFP6X6tOU}FHC0QiETA3ib&x+NRja|BN!h=Qs`QBZ6cgWBQX#hBo}G-&un zHcdfVTESFCM%L2OQbs0Ml-=5ig;z+7#X~bqkXM^WFqD^{SDMFzQB;silwHn3P>_Lz z0doGs4Dc@3Foq~lYYE&AGzV9TpzgT|WPH#VJg)~Dq6dwrfO4c5Wc`GgIJhol1CKU= z0u~gQU<_KL1zNlcDr7)oy@4Ejf_WV} z+#H~*k9b){x%k9+cx;`7goK57xp|m$_&^5?@aCJ#Xi2imYA8zz2ucewGVk0F4^T~J^2n+KI@Pp3g2b}?P zo1uhZ5(6uE<*hg<^@*#CfoAF;qZVM_fIPs)t_~{YK?};j%|K9{E+#4x#4D@Hr_IL6 z&C10usl=--$;d1v$E_;H%pxekC&$Um%fi9J#m>UZ!Uj4`ReBP)hyah!GEqiG0by1# z0e(SA4i<49UVaf4W-cCHK3--{Rvt!nUKVy%(A8AjQW|Cq%nUjIZ!vsjmm+FGOz zI=BVY4}>;xKwMBt6=73m2hV$g#-_lzNFB5q3zXB1(RYnN>Qx_6b_r-EljTqq<>lp2 zl9rYePS-TzW)}i&RF~&q;bmjxWin%zmJ>D<(FDT=es&H4HZ>npK50I2Y0!y>Oae?2 zqD(9T>_UQqf?_^C{B~SCjKYkp9IAqhTr7Md%p6<-tRjv<{CfN#pa));;L6S?1Ul&g za-!a6@EtOsvt<1lA{k;Cl40vz!Jb440(SWA&(H&IAjjN*k_fmJ2f4u&oVdUzTY?%g zkge9>1KYu8HG`T?koKRvp&W-0udJ*vuLPe6x0se}l?y8qpCp?A7bCM6s|dd!3qKn> zpAe@YvnMw@J2$(EOaPmVI18^Z7eAMbps1`gyO0ozs3e=OoQNnN8#kvPizACVhpHTp zcsCQL01Fczzp9F;053NmKQ|MLIzOKf3$K8f5Dy<8CkMB%C=0tD7aIpBJF}Rm2nPo% zCnrBU8xIdJH@5&g8z(!vu&Ah#jToaar@6PFkRYP~CyxLRXbb_gBKsr56b2=5NM$n= zf>vdNszPuV1D10@#jUZZv4}Bf$&9j+Iy)>av%%Y1(8*Fr?gOa@VQ^m`9O~ftQqZbF zP-+M7qXdmqD1)ni^-V0??3@DZ{CvFZoE)5N988Sj;=;=8%uM|3JW`B-{Jg?EQcR*! zqH=O-sakR@tSn+oqMGvZqH=N?63iUT7Cq}PtMYRSurHQlV>6o*z!lHRRwl^H#>xje zI*Nyvm6?x;g%dPB?vUc&cw&U$H>9M$Rxnb!OOwR#l_3P%gW5` z&Ck!pFTl;k$t=Lm!Oz6X0_uN*cIkd%=mL*yIWxF3_<~oRBr~Kl1hI9 z)&MSQKw}u7BPhT-XCVHDRhh=>%AnkA0(HgNMP!*-l*GA3c%+P^+4PiSqLB@iQ{= z@^gbWjKbnpduh7#3;bZ!w)|75E6bf89+6nCWAY8y$&omK;;U!9t4FTsM0b6 zbK`nW(S|nKr6D$f+)0N~cZpGy&!zjum>BMO! z?wKSk#LOtj$Sf%$4!&~3m`_L$bkGpa`$9u%d;9jF=#wu%JK)HwP0tSBR0Yl8CjOG!r{J zvw#>AJBJ_>CnrBQKQlAG0GqHN3!8ut=xjT7b`}9KW;RwqMiFjKenuvKAvR$lW>$Xi z>EYhs6@wEPw4ie(4h$}k@*5OX&^`b-kr_i4T!B`{g1w9uq{eEX8XSCz2(+7UM>tfN zi$_67TZV~6fR#zih{H#pT~1V(jah)1MP5%(iId%&Nt97gC{jRG(M;Y%QPD(RUd4-( z(~DJ*hhLDDgO#0Il1YFOd}1{ZCo2bspdgnZv!ze02(v+%rFH$ zat&Gs1j;w*4Ef+Sg34@&ZMtfZu>@%RgUb$3LmOOnfGQ+qaLouh%Mj`fgttKbHqdcE zptOKkJPH{G2VKS^0;-_Q{G24&cocbrMMYKE#RYizI5^}q*){bw`S>(NHF$V5bd6QT z#I!|4Ma9IlL`Ah^45b7WIeEFc1D*I;1o$NQMS1yTdE|K*nRwXQ`T5y}nPgSjcv*Qk zq(N8H@^i3ru?jG=urhOU@pGzhi1CVXbBpncaj5una&n4sa&qc$fq*_2GYfmMpsOT5 zA80yFKtO<(iAhYApGVG+nMa;Uh*4Qg094jMR`|7p&&|~WmpGu)3hcnOIfFPj#z8>@ z!k{7+7V)rNB505g-W3Gz)dtN`AYsrdN06cxL0%;(Lp=orQ7JYyApu?m15R!$QF8-P zW=?g`v5a-je$fGLZf@St%LQCG`1phbMfmyoIXSpEMEM0d*rPc)`#~q|8VDBh^Goyd z%kuNf@bi0ES#a@a3ot-OUEVSDG9dfI34AUK=!_)zP6p)I0}Z5tVjfAWJWj7+l3OgsWS9D;0I0)kvhOq_g%E-WluLfqUrKHN?qu-QE@!r#Ng!^=k$ zG*oQu!678f!e+w4!p_Ub!Og+N!!5+ZsUWDs%p%Am?%|=$Bh9VO&o3(|C*? zkDed{7XxV3|8wvjK~4r<2G9xS$_${|!5cKH1S-dsML}&XP@B#i)bIn9_@Fsl@J3>g zC_5-agDVelHc*8DBEhY1aHY#J4L8rBW*3pZBPnc7JjkAD8bznVxPzGa%bD&dA z;-K+YNUjFwWYC%*HFZ(Q#I+2!fC!J^V(`|nwV*A0+g)6Q<>VZlorPs(1sElCdDKPq zTtq#L1vI$zM9Kt&gakzEz$e)YY4HlkfmobcyaK$My!;79GD7^kLV|pJf5 zTxwFB@(f%IpnC(G_Kv7O9URgdxH4P0>O-)rRVGSXbbY@0AF?JDF6?VCp zWJYc|b}4`G+7HVHer_&)9(yhUF%B^cP9Y&KAw_osUNJsVaT@_a5fMQF8$oadWhcwS zDa^{kD#H~M#m^>e%FWNs&&9#bEyyV($j`Q0VZAaR~8p@v?}E3k!i3)5)`O^Rn{rvT*Y<^Dr`V2{ZHaGV_Tt z3vdexD#|l6vhcC+z*!>9!a~d<0<41ktb*Et{5-<^@+KxS!ou8wpcAY>Y3m-tM~1l! zpi|9F87#r;AVG7AfefIur3|`x4U}3$L1#@uXT_mw1;J|y!Ly6dogC1NgFJZ*KNcHW z*@4RHOa3XWtimje!S?pd4$O?a0-gd23I>c4LSjCm{>MAXm5Z5&g$cZ^kyTKTk&%aqTghLIQ^iAHnytf>mxDu?gM&j%l9yMK z7rb?!fg8H_WHJK}gAfBO_rqqKK)V>AJt_E#26l`k4dB#+k_JFc7tr9FG2~_plsPAL zbI@{!>Uc&bK1m*7b`xPaZ8>HZRwXuJ4M8GmF!l1!m z3XW~i9I`(+wjpg(Q0EY`Q66&oFKA2=RH>PnLnGLj;4&yko`dA0cz$7VW+nk%0Y)Za zQF$g&(B2^qPEK|K4lZ_fPL9brIigNZ%v_++P;OCH0Y+vXE$)f@&H{=8PW)y9EG+yi zmi(;j{OpyAvWy(;teVWsEKL5spfiEF`MCvH!7WkH}0vgP|wiCAju#PzTF8@w1X;ZQ1S-%h{0K16go2kzW&_I z%vn@MMomRjkd2SilwX)nfP+_nH&94GRhL^sE!Z41s-`F|%qb(Ntu4VJ!q36a!l9tR zCB!bvz{XGpUTfC|A5kNEtzC15HnVoT0+U97DFko{O0i3rfeYF;LB6~^K6#|Ib{qn1 z9Q>e}6Q2Lq8GbNKKv~6O0X}OOR&ywW8(^S{n%x-dN*;VE9=YU&l&g?ff1b%MAj>br z!eTA1W~{`{uEr#)1%|DnoI-+te`t=0@!%OWZ2nQ75F*WAvd_0fD^x1x~H%hkFafBH#o%$v-1hF3$gJD zvGGZ;it)4a^RjXav5Imq^9nMHFt9R6GH8R(LITYui9pX~FhyDh0cx6nhB3i|%b-{X z@0bBGz;!7*c&t`kS=?Asl2wqANz=haQd?VFUw@m1sJgnY1QVkmXeN+VT316!nMFz` zmY;={O@mh>fX|eVM*y_kgo_Jw9)}1&zmW)NW=Rly$Cobne01>WHfR(RvS|lWlS{;j z#<+@`bJ@#?Dwy->$-7Aj3-b$d3-Zev8p`quaDZ>%1KnQ-xu;42daoz=)-=!x15iuN z)EIQY1SDC5+tZ*X80Z8T$W~ip$Z7@1R^ex$!xwcVSOm31HG~l<`hy==jV6R;pbyu;AQ}&xK9jIL922Z zKqt3@RxrAON5dl+;z7H`z=bAg{!SE>+%St-H< z2?%ohUEii&=h00*-mQ-~ld zry#c(9~+YZvn(GAqX54Y#6g=%U?*3B*298Ye9EH6cA^>?+DqNt zTtQor930rqIR!Yt&vt zFl<*PC^dpwo1hD?*fIMJAZf^$J|qCZ%`H%80y2<--d~oC23?C_XxPccCcwtc!UXL) zbnBa#2%DJbOLB>F%J4G^GYZObiu16`$mq++2!l!Wtu~eOI7B&h=RZ-ANevh@ZML*z!keXv=ss3 zLK+bu64a}L4u*l-6VP4?Xc&YYc5D^c-|$IINIL>j$D{~}OG3xEghb_-1cU^HIoP;4 zgt)l*xw$6g-mSUV@oc4(GO2p)NKsWsI zaIy+9v2pRTa&vHqGRp`siwc8=$b=cV!MhsYGE9N5z=YgUW&s{$1?}wv1ptz#A)_GJ zHX4Gq6+yE#C})6%4#8Ed31+~8#s?u4GNhn*c<`W~s+CHyiZ>URkbnS(0vodso4m4| zoSd9m6sSurFE8)QCn(Os$H6MVBqFNDB+bb$2s+$CfD?4B4;K?3CmTPPHzzAUD@Urn zf*=&k3gr?Ml;Psx;$Y(uGFYGzy)5fa}azlDs&$v z)H29fg3vk~+*dLOZ%737luSFIdfWYWwS9! zNiYks2-&!6vdicw`fG3t@`wwv2nw=}Ok@`toAJQof=-a@=AvdYmRq?!qD>f_xkztX%w}!uCVm_fIX2@3P`gYLoO<>cg&QDkIe(-P%i z7v|#T=4ukJ(0qwX09RmugVnAn>ut7HPL#7YS%$3nk?zVAfWU`s;%*YhX&dsgF zCeOygY|rn?sUXW?=cnzUX{YU=$-~NKZ_mmmD=Ns!tH3PC%*N>e8ZqWl1d|M`4CeoD zGJIeN1(%P);QkkA{{*-_$_{RCLmC8-;tW#uU&zfBc6U$d;@vT=OEjEaMutN+mQzB3 zT~SY+msebhpPySVMu3fzpHl?1?u-=_a-dbFsSG>7wn&0X8B=hl9@LgcEF=YOB24i1 z7FCpuFk&-cWfGF*km6)yHsBO0aWPg>QWci866Oe}my0!vO{z1{?4k z2Ba*4l`5zx%K zF=UkoxTJ>kh@cx-Knql+c#5*Hu!07o_zgj~CNQxIGBIh(GRZS5G7Ac53kWa?Niy;A z39^c@3$jVdN=iyf%6UqFfee>3XnsmoibK=iPL-RVTZoU7jh97$g@u`!orP6Mh=oaj ziCs89xs{w<)(8j~X{9m(BvO&fdZRie>1|HPjdeEzer$rNU}x%wojG z$fpE~V^$+JArV%gEyBve3ci9OVjR3C#=^=B%nY3WA2F0M9Dt4ygI2tNG8?E<1-qi& z1T=GpRDlbqiK>YTiZU|`aWDxng|g@hs)1mEmR2UWB{MH4vy?0oD;K{IyRA^H1qd)O zGSvQm!tjM*Edw{GjSOCL4GLD%)p`ZGCgq%qg@qS`R);V%@ch5eP{42iI`WI^8gK!C z<`zL^QDtEPLD2G8K_*`o4FOdUEYj4>;AX%-C2|SxK$VNK`L@ozvS#M1Xa%l9F&YCz~)oXuWUt|LY7t84f~fCh%Mr zIOl?fiQqF=;EByfK?_kcF*b2AWdQ|IK}~*rUTHRNF+TPQ!g6xLK3Y-|f)WzqlKgVQ z>OoFQa&DlU%lZEy*w0enHYTc{!F?Zg(3BW*$t0j8swB)W!o)1V!6d-Q7{si}ufngw zuU??3na*JiiUM(YCRR>9A$B{#Sn!ZF$miw%LHj6ngU&~W9xciSI>H2UK(@IlWSAdZ zEh&qZ8!MSI8u3VS@UpWq$}vg_@UgS=@k=ntt8J1ImKK@G#m^|p!d|DL$tf->A}ye< zHXmdIXm{lohJ)Z+b-^7PNXZ83*+LQ(DAGlZznF=dnrdo-SJP@~nF*Mi3+oAM2`eZF zYYFRtLWKMOQ-(Z-0}POzSlB`YEg1+Xf&xU4nMHt$MS$6dMU79HUxg169wscj94r#j z%sfIuoEEU)U}li{f1BY2Lo{@JltCOkx(n}?ftv7;)`qAtsDp4}OQfr-sEdmQGmD@A zk047Ncvp}lhY*XXt%!)N2oozahoA@tTd=seI4C4|8B7_zGHhXx0-cDigtWYZpqPX(H@~njACIsM_%0Yw z-}5y?G=m5@cVM^}l0Bf~&X;$^`ud9c_*ilX^79L(SXlU&o6E2Zv547E*2psAwG6tW^MrqZfSl#Sw0?iZXPa9ZZ1A9 z9#A~X|G&ZTiXoLKA6?oU?&Bls?QP8|B)~10Y;NvtW+u%c#3ErUD{Cvx%*`$$$`K3p z5hH^jLj=QnhJB#3s6crY67-_r%nl9x_xF_8jrd$dEk!LvgE)2OMF{gVa_dQ}s!HpL zurn|*B>%t5@SWixc+UodIe5{Kk||{L5Ycx9wHiPb1GowSU9k8>Skgn1Lr98CgguT$ zK$=6ChdF?S)7g;Io-0U(lZ{)7QL=%LTUC=uq>7(cgoQJSThPyhiz{D4160Q3{eQsl zg<%hPjV^;Y>dkwmpoIX97Mh%zI+3DMZ5sN#dzm=}xL6E@(}ji8)6+rv%fPqo9RTk& z2CYK|uQ~<~r$93wsOSAs)KOH+$Vk-8Ox)4YuS`_5%urZQPuNh{nt_Eu0^C{(2JiX- zjT57#G2{#ZUe%#|d3T(TkEjp30GA+hg1Nbmxw*MD3oEa^44V+Mu&scAt*{^mTY$K@ zxGEzXD;onNgAju^!yAUJ;5Fvp$!{@nQ0V|IbwGg$YY7XlyXBzPFPNmSAdCy zpOZy^$%93eSAkc7*Dy^}GoIa)nTrclZt(I8v0L&5gVxp?F|aU{{=dcWhG9EmJV6|k zq(DnoMUBCi2!ggpmzE0$2J#y#398+_D=d6!$r9=8>z%aJ=0i2L|Ii>lb@GY zQj?XJPhVeHQ&>kvP|-LQl)rfXKVV2Bscsik5LOfv;Adn8&BrjhGpX_`2`ED=78@oW zPDWt`Mph0UAvSwhNy@}f@E^3Yct5zb2JNK*MJObzupw5CLuS(}^(`#axt%pRrG?GS z^+Y{9Jk(P)h1FOD*?0umSu}+;Q-y?7K{sM%{l5-wdxGXhLAMKmTg;%KffPWHRx)UG z6jV%%dbKI7L`eQk_dg zibG7EO;naka;}h|pqK``vapCUo30S(L||b-(AZJ>{~HXy81{kp5`*T^7|g+^Yl7@y z2Q9b+EsF!K$N*Jy>AFH<{Q82b!eXitPJxi~igk2#wRn}ab(L9!g+8wb|S5S~Yn1z#>QBXjP ze_^1kJaZ6}vV4sIw*c!>AuSOuL1k4xW=0la7GXg_KVf}lVNM|yBSBVWWf9ol=Y(-GC?W)}dhm;{d=I>iXF za|p5faxU?2H18K}?Xws&a{@W;T}{GcPBTgbX7KJGT(4qi`aqm2SS4Ltqh10PC#jvjh)>XbXO&49sm@>puDFH+QSCA1sAkK3OW@JqRNVRd4-G^x!43a zc-dt{;mMFmAA)CENO811aBjhxungv6zpr3FMJgjMDEIGn86IYron#l`KI ztz>xll_Z!g)j(yDB10X+U54%8{yk`)JGevy&1r#b0^z%R_B5-gSgNR)Dk#)h3W|dO z_y+Y`3=bKaq5G6f7#KhYH-YmyqRtT&fuF++z62A}6@Yg6#Fa(O)mODLIh&Yhaq|nw z^N6yr&SDi36=9R&=Lj@q=VcdQbdxtxU{_b=;NTKs6*2~0$|5Vr%E4i&B`+i_VXP`_ zEXdEs0+~@#5@hBAjm$`bdm}R#n8BfI3fcn=E>gi2AEH19kHvu!H7K}YZFF$@0<~s9 z{)V(fJbTye_u=K|W9MfF?dY&mRF-Gr6!GNa7G&EO=jG+ZB%$mNzB|Cgo`sd$v6CM( zp~Jz&&c)8o$|A_6BgrhlC}=1k%)!Mf#3*Pi$R@xf?Fl+ynvso#6%_s%|3RnuZilWE zQwPoNfr}f+?VFGy+Z47n8ssiet^?uf3{hrYW?=zo0Z9!3WoJ7uP@Oc%h#52(DkNma zXe`Mus=-(Hua4Qw&3rLdz)M9|t@l%Dld3i;6rQ}3;b)>juq$Kz`m<3qU zdeWsucxAMO)mTAG;kk5#MOa0In8g`b7^J`_Bl$vGuX3Q2ZVKK)0}eJwnud0dz}HS( z-WlWVE$YoKz$?g-XlCYZW@cu^#bYDGDa0aTE+}X&D8$9?BPuGY!py}6YG3m)*fG3g z*vBBn0J?`!Ne#523^Z^6+2{mW8w0A^)Q!ROI^Z!~b+GT$K&3BebWyoqSWuLMgHK43 z!&8l2T3BD-=$x&%GAFN~Y94E@mME_v4A>Q4!%fLfKa8Q2&;GwcQL?t%m)qV1&wcBt_YSsnvfZUG)q zQ87zFVRp$jRv~uK0vc0cXJL`pP)-JBhJ^n&8Qw7*U{GQJ&2xcHb%k`DOkt-gm_sJk z!6z?(_8O>xF3AA(^g&DDCvb=f$g|4IaWb;93kop{GqGq0Fp7#X@$m|>g$POr3Q7pd zNph)J2-`3U@v*C_G79nv>$9^7i;By#3$48-Dtb+LHfY|Fhrt?LtAoaXL1%cuX8FPW zH&JC!ShA~u*RVlC*A#Z1tdXgyIHY9=nLE3>N;p@7i-MI`j1r&Lug*kcHq}fG4 zdwMwq#MnVMCB*!{#juj$AY_ah6a?T{1{bQJq6(6J`$gHgc!jxzg+&GU1VGDr8kgq? z3iB)KFbnJI3M()Rh%yN=urMV5zs2yHVJm|W1L#&q(EJ3bAqbu}1`YXuCn(Ipm%hNw z2PHCP&?Ze#t}iVU732_QWegA$;bwOg78e&05f%~>6B9I36>%v%D9I?wyCT6|nNv(t zjZcstG|R*3GBTguXOe}%=xS&J;_91xS4m>}tENVP0 znw3YMU6`AZnS)nOfloq_hhIcVKu%bYlUG2TUohKM5Huz4=;O~LA0fDDx?g$mp%ReJ%*nQ`x(r@_gI0}PcVopLwnoG&><7>Ny*@<0Zf3_ zjvyL(p#C@Ho-NQd&ETay$jRWAn=q%K0FS6V3yZ80D~l*AtF;_6tE>pO5DzzpxB#0V zry;u;2cw{u3=1=#j0=wrD=!}}A1}WLFE0--kCM10H;;g@Fc+_|sI;`GFfW&|2)`f? zmxQ=5C$9xNCl4E^csn7(4-*fkAUF7?t9Gi_GfL^ zf{Ra-l}*sFKu;C~7?>GS{@-Ny#BhLtn?aGm7Bm+CT1EjW1)+T=(B1FgL2=L+w+Nd! z(r`U;Qvft{ek&oV51{1moO8TS{5@S=v>62|F;;v zFdTrcHURZaG{Nlw=(+=FUI#Y^u$+SnYUjb4K#K%enFW~*1lU;wSpwNX^Dta`mX@L> zCc3&35~7llq7o8%l9KzF_yrjScv<*`m<0HQd71fy*wVy6`B5xQSX^97OiT>qs_6eW z8U8RFg1QP+7Q)WK<#^V*aja_*xo8NXp0n-Q=m06tOYE>4q{Cg;$#+LwG$BF z=I2iVvvb&(nFKlcIr$`oWthbT1vzyjL6A{bavzJZB#V?7r#vs0C?AWUB#WeSwX`U= zqNF6BgM*qBr?8Havks`wCFw5B!ow{sEe)!nKy~XHhJA$V)(OHK+@RBrB?Ng@MR-I+ zMff;a`Ps84W{V5+N@)r!u?lc<@pEbji?Rudu!7nodEhy$?a)0yhM=AuJ7}X5_$~wF z;X-9l0t1&5ur?5=lMHGpO^Rb=TOG=i(RSP~zj^tRRwt&*cm`&@Hd8C;PVnd zXLXq}*fV&7(mJG>4mxuc6j$o%pfZ6?9MnJqWieAzP}!jjZZMgPiGz9OVvutNK?{E~XAX`Md@^s)KJ{2;85CmQ|pBUX!M%rl^PvGm9W6s}LhoB9lINr>K0Dx_U8} z1v57ftCS)$2WarfS}@%i1VHU-(5NSpZmeDWI$hO0y!+xnWSYhNb0qb# z`IA8R)5?qbiW+D`3m+RZACoaIkO0}m<%&7pAfqhe>8k1 zDeV7khNa-10=O3nF<#UdxkOMmGtJ?b5fxWcV`k));1J|wWD;f+6BO$fR#FmH%McJ0 zW#J08w&ApJV_;&K3l5!w3|!z*97Mkq)Y}Jj2$Yeo5dn=EnVBnpGUedn6XFqKVbixU zXXO?X;}HX0-6Ai~#KNJ_EiA|GY$|GODvrKD3$*S?`L%_rs+*NM=xkFFDF+rIZc)(L^`d-Y zeBA6ptn3^t+B-ajm4)x!^Oh5q7dAMps_J1Y%_qpq&&Mmk&nF|r2yzRthJ}F&Ry%f69s$9*>>Pf4ilST`f*gFjocy2@Q#rYX zMI>Cg`9+o4dF=V*c?|@3_(1)0(Aei&2FPpz$aO}L`BG3e1hsL&ZBXc_x4EbYxV;Kp z%%^S&>J5O-+81HZ7Lkw;784T@78Q*W;s;IFFbfNcGYX4|F$&~p2y1EzYb5eZMe67j zo{(S^i^(!`a|*Fq!V)wqL-GHc4DT6sFo0HP zfNTMkLZJ1gu(g}u^kFOtn&JVC@f(|pf>xlKDvQ47Vin@xV`UB#=1=ezRTK~~R})Px z9;sH8D9kg6xvjZEa z5T6)3AD1vEvzYo_bv*?s0WlFyP6>HE@ly;e3^D)jGpu1a2+miaaDNW@v3m^o(_fI%pAvBom7e2eS}UG?R{y zx}cg6qON3-kz*F%5n_W^l`IU>|8Fw9Vu)uD0MD1Ak8gllrl1NFR8>KS#4c@*aR zU=rpQOwrMC(AL(rW@Y8Gmu44Y7PFF(v0@Yx=7^M#kWgb{XJuz#W{~`Ujo~eWD>U{H zmtdNSiKmH)Jhw25kg1@csUR~8GaH`}hp#Yb zT?Z=zAA=3UXNH3epxc?989YIIEJ1S+Z0ziii&G#yc~FbO40JCos0VEZ>S%&Wdq{;3 z8fs;OXGl=D*c3D`0&25CI(uvF`B`|G_@%g{1ep26dBpiRxjA?RxP`=3IY5ix)*Gm( zh^nY)h;m7?^RY3D%JECd#(;K*v&MneHgK*Ilow=TA@=tFNt zg@he=<-4ge#K%VBU^hdHcJQJRXpP6Nj9AA55rUSsO3I>&ikjKF%3V&vte`Fa(mb+! z0#ZEE0vsGdtZbYtDy%#L!tBCY4oo&oj9k)e0-TKc9OAsv9LmO`x|_JU`9Vi)vI{B+ zGV*Z<@_@GSaq;pBvGZ~9it!3_%E&SKaEP!82rzT-3GoR^@N;s4YJmLzkHB#T8ix@F zpQXxR4r-o2d$HiA1aw9Ll-IyD0w}Ja-C9sWd=MvWA!;t1$h0)fUS(uTHm6t_;kwwH5bQPhnIhbr<=NIM>kYp7UWfua4X)1UW8ML++ zG~(^Z;124sh_kVS7K*chMkT>%1JdS!4EnIEo0~!I^@An`WIrI!YrS{oVCCXuXXob? z7G>jSXXj^R;<2_CwX~FE;^SbK=VoVPwKNyCkmuv%;^R!<=j7$%i|6Cw;^T_u;}PH! zoXI342)fQhQI?61RZyITg_TJj)G?N27G&b#mEmFI;RPKO^EH$b&I ztShaqjC`yssFs&f*Og=u)>cvym6cT$WMmdsmzNh+cTiwrlyqg1k`h*9XJz5%Rh_Nz}wez>N?1-eOa* zD5Rv#^VH*%6SYv|R^(UW6%~{fkP=Wf*AE8m=46i-U}q9wR^#L0;OEp9RTdRx7v&Td z1Py%T3W2U$*}}*p#Kx>GC@#V)revruFUBVzDX7UL&Bw*c!z;$d%frHx#K|kjA*dzB zD6XRkTKXx;A}q!tDaa%(!XgUFLuvnSF??n?%m68uK(T|TT!Iu>kec2YrA-GapYA1# zT8r9><_U0c@pF1}gSzpi(xL`(!3ri^tb(91EqPvD-DU}GU0rQYE*?P+K6XJ~4qpBP zPTF$G;JasdoVr0LpMu6xe=zibSIxslDZ%Y|Xn`rJjI^;HmWa&7*E%Y5EAgrF z32=yu$byC#<(U-(q*){+IeB;$xz+Spge!!_1o=c1g#_i~3;4yR@*5j``9=E*1esFF`@jiS&F-fyv21j*j($VuB)!LX4b(EKFj8 zVxV2Sp!2st>j=5QqdTCPX2{sM5qRbW5~bks1e{_aLpHFJ@z6Wbpv(x$ln;}Htwb$_ zvjo`K1l+mV1lT#5{r!bCH8n+pM2+Q)<>lo~gSlRe_*m?Pa4futm zlX!WPARCbtg@iz3_G169GrVQ6LA1m`H9L5MQXL#>km)*50s~E+s;PJTGV^iqv+ZF^ z@bwiHwXpEDu;6!hWM)650bPpBGHnTel^m7kGGKv+RRRaICkLWq}}PgaqMOIVDZQ^H+bkkf^mTbhSQl81+fiPcA% zpIeZHi(P`3my#lsW3=bz7w6}f0F#_XTwF%{Tny|CdH?S+d|}uD9XSP^ zt`0g8h5>1Z2e_bB2Cesl_DCQxVk`>kCV@_t0!`(C4$uL0a+O7mm$Pee3X7VFs)_P3 zD^;nes0a%ShVXN8xeE%K2uBDCF5kq?$;ZYm#waco&CJ0fY-%c+Ah8h?jfpZW%%b9U zVxVDeRtCTScNtbQ>;kVkR%6fw_n)BCKc?p3HBRc_<{WtJ!5DNtFsMZins#Rg7i(tX zpvfVz)l9tN?EIXJ+$?M?tlToX{9;@@4)QE4Y~Uj>1bH|(dAZ~nd6}3vgChBPg;_Yo zSa~?OxLCRQ^|-|)BO*B2U4&JHjJUZ4g@iRY*+92=E%|?g;U~iZ@G3z_e1p;}8$0N- zK@o86Wugu~EYb8hJ2MyPRxCy)GgcNs4t^d{USW1dJ|02Ei83-=TE>jLe7Yifdg7ik z{BqJvOsr}`oH}6)EDUM?LF>6eqZ^tGrr`7iDpkVidncfR9MUmi zM=H@l@dYlFL=Py7%F2o=i^|D~3OUGvPL$^o<5lI8=4DdUW?>eV5f>E`6BXxEW0B<( zW095>RS}hunJXwL3_9gNSWrM%P>fqjLQ0BXNRUaGlbbnINQhrpI9E$Xke^pj7*x6n zYk^AdkpFiWzA_vF&znKcNAU&kI)k<@#02sg$QRI&8qm@pP&oiCN!ZwpL1D|r z4l3PY?PbWM1>!IjP-KIW!dlS1M@-zp{QM#!!ZI=fOf1~Of^7UOENY+|n^?F+d4!mm z)P#h&gxJ^xxum(Ixfo@*q#T$Txdqs{*qC@(gn0Rxc)LP`q?kClBqW3-g^i4aB{?}b z?8F!aSveK7M7cyv-Pr`>RG8S=G$nYsA=6sE@-j?}^78VT#(bQ@%xtm>G6G^^;1c5& z!w-f7;4^$ctDr#X*qQ-!M>+D?9eDl_9G4((L+5TFv&4`MgpdX}yp%w+jlfX~)+t&m z$jHje&&|cd&cn~k>n+H{A}GkiDa;OPRVMN=Gx9OI@-Z{jSRT!QORnB@I1c3m|!QDtQjMn*n%4n8wsVO0Tv z^hkCCWo1z{H8CbWHdcOP0RatRVOdTA7C|jOJ}rJmW+paXAvR|o9v*GDAQKx4pD?o% z4-XG$W=fnvpWy|=0S3rOm$A7rXx+t8+N$GBX<(aagG^F|)}U zajJ+~Pl#fU?%>pCW!K?nV`FFK=H%w!W@iy(6A91T{n+ zX0aw{u&`Kah{*9t36}`U@X86Po3pFvvO0ROGKny$RbgRc=VLMw))3^B5@BSj z3kN3@HFgemK2u>0VHR-_78wo!7G5nbE-fBGR#qMGVKmY_Ow7z8>;lX@AaQPfHhqXN zHxnCl4(}twHU>@xSq3NY8EJkD&>NK?E2*%xWq$;Q)6q3Xr?5)eD zQ42oFf}5M4%iG0;$CQI#n1w@*pM!~4kcowvO@K+r)`v$E>?JjB5CF|+i7*&3yk{jWHu12Ma5IxVpNH zy1H8sn~sW#s45pbJ0GLIprAUaeapxr)gH{I2^xuG=Va$)G8PmBZG0AH;+8367GUH6 zo#)5F$i&LS%E@NQ#l=<5Ccwn4$<3|FDag)Z&dtp&!N|zSCJqzj5@2Vx;O6F*WMX0i z^$bDdZtod(GT1RVgHNRn0FADg8iPthP_Ylno}d{-5m2Cunv1d2_mzmRuQ=L1_)WvNUNIbk&KQ8oAXsk~T&IIw531v#7?yQGUIdS{ zASJHr>xC2D++t#cqodv25`_~DT?{+s6tl8aw(^Q|$?*xbL`UZf$+Ii6^K)?Uvn#SI znzDm{0WUL)yf`~2KL>{pCj$!u=l`b+tql9Y^R=M#1{&pulz5`xbvPkQ)D6?p=D6?*j5)Kg-4iR>DcaI7Q zVPIhpVn_n_iFu&CG|>8C$T%$cP6haGAY;?g1j##6rmRfDR&<$wnW@Vh>0!o5H+&t2Pe8Q4qx`H;+ zo&qwGJo1_X>S{bXYI%GjJd%p+5<>if`~v*^qEdXSYC-ipl02ZRR#b)fg+X;@7I>_1 z6L_6Fc)Sx7r${rQmDyEYdc2Ap0z9nl^M!>Cg|oQ$7)4n)k{Fm7!vEi6n8dIPx`KrP z+R_1!;XquN#3LZWDZM3FCoLsBE-%n$mGQ$%FQJ%#?8gSDy=Lkr^dm> z&%u^&Va&?U&n%_L%*iLpA}%4!E5If$DX6S0s2~mAgU-aT20RC~9;dH2**beka7%Lt zurbTd5f)Y#E`aztgMo#?<^N5FWef+wBSVn=OQ0SVw4VzN1MuoPbu$o8SuGcQ7BL$i z8yi2Xogj}Ok1gmdCPwwepf>5^+iW}ntbB!4X zq5>ieEDS#X?=q}~rhf3u8K|s+VelBEv9hT$JGkxx&AJ+!Dz8lxVG$H&77I{gR^e9? zW|j37R##W|5LOfv6&4mXQdF#qj^YwK3O~QPAD^Hg=z?kRl>vNy0)hf8LR_G&<^rH&%RzUO zF|aat{lCSq8L0#`fz&gY;R#xt2F|sh?eE~pD^POc>gpR^#qlo+ER3kS27maHE5HWk{c8Dx}F3O@>f}%{!yc~R-yu4g| z+yZKug2G~omcnv!S~9$h%)DIOTs+)dJiNRK;MMw|Qzd#BKx;D$pd}HgTLP|$L2Wp2 zw+V753bYLX&N8521_js&6%`#eE(v}fK`~)fZVgRtNgi%ZrZ^@AA!!~1Sw(eqQBa#D zy+=h@SrD`umWLN~r;oZa52qF@Xx)uG7ndNvxU#T{im;jx10(qCg%pMZpuOMXF#Et` z5Nx0+UeJ7e5~dms%R1fT*IGu)MscG#3+-Fehk9 zHWzma12Y3?*ZLcVZP5Le;2i_twlk!3GJYfKEt=r%?d`qoj=1<8VRvCy1||m39b<19 zJQ(=EBS_#7fd>Sr;1_}P_Q9bfU@b4eFQCtq$RsN$mLNE2+dO zz^lhD#4p6E%+2M@CM&?m#LEquKNS)XQ)OUg&}6V-xWO<9?mB1;gYrG7uYF^^uc&Vl zc)-`jNkl|YK|uku&H{8!MLNR)1{o|V1K~7vQ9WKk4s~&JIZ*|E0cIX{KG5=X9xgt$ zbOAvz1q*O!i8AwYa&q%os>H3O$Il`vXvh@HBrYhEZoPvT< zpz~Cj83Y(y89spP79sF%ci0X|aJLw=UqB7Cnh9i`fR~(rv@e&otfQ=YIuE}wpKmLd zm=GUZdb6Cof}D_`2rrMYfGsx{mzK077a!>EGSE(#-wdF2VSM1d+%U62169VNFmqG& zg+&GQ1=K~vRmD7FD>#h>wK(I7)iks8Vh#CvJFez9mDf0>NC@5+x@G2V$ z^YE$&D=P=ss_^pIGB7jnGlVfb1Fv>~)a9_1ai-?Vpkm3)3_Rm$Vr~qob3tXVj|DTM zfFy?yHEt z&Bx6x$S)wEsUpa&!Y0Hk#3IGX#V;f+ECRL>RF;Q;Yy|fT!3|+pn1R-#figN$YO4=q z784ZbF_rg86pal4ElA_#;TKWi*3jV<5ad^rPzB@CLF;^pDu*12erNV8GIOCG8|ywVh~^e-H8Ut&7jFkP)=r7V+SoO5;Hb36=zdc0xcjhS2Hzc z<5v+A=H(RS;_74<;OF2|^k?$qkmF((Wfc_F0KDf`jV?rTGQfKLL{#^zG8;xknA z^y3iV78O)2Q#M!U73DW#N@J22lsK=UEg;0fBf=xdFD#-wS&*AwT#$vELxh`Gn3;=5 zo?n1dRFH+0kCRKRf>WB0hh2tEh)0N7l#NY}Q$c}EkcXF>hnts&0~E^%;JdXCAkLr= zRR$fp4)p*l95lEQ-YOo8k>|XdlH)glOwMpiw?7=pg5}mlOwkri$06T zc6C7!K~4@X5hi9PRY7$bZZTG74lyn@P7ziXPVfn-T;LV3LE!bTuu_|i9lXT~M^;V< z;@}eI;b-OL6;b8U)B#<$r^6J%BrYT>U?A_DAZjJd&&|Wh!@|MA!z0M6EXT(w#||pH zB{1T1Q7zTib?Fl+oFlnU$HFLzGXDO@Nt&NtA34BKP z1co#QQE*KJZYhZ>!!Ck{1Q={o9K1$M&`Q+6icgNki$$E5pGQ&Dpq7K1hn-hm05qA# z79=7fEMm$oC@jdP%EKclDkH+l#ly+1%)`yf#l-=NYas?#hKUT@86+4O%+*0Fia@mm zyleo??isVG@kt5^aPx2paT#$53M%rcmRhs0+VQx8PN@f3Bf!ngD=aQ3$iZR3z`_v! z|0cLD1)YT|4E6>1$Ue|{80_MpqcFj~0F6t5Dm_SByj4_4R6xwgDN$5Vl#NY5PBmD9 zkx!aKfQwn}0IRYDuNbSaun?#CMXZHa3q4tI))I2=L`oJ*cm`Mmcbm< z&{sBP2eq;wqpFaB2=GX-8o!gMsMQ61%`^>teNp`j+yWxJg4yzBISMisa>BxL!m_d~ z{M-V3dg3~OhM#C)K!3&&B!Ixhn??k%j=Ifgn!Y?4e z#m~tnAja*a$SJ^Y$dte&B_htFC-0Wz=jZNjWF%^6C~9QnW@tFoor@oI;w(28Hzy|> zn;^ddH@hgfsN`p36Jp~R%Q-)QDONd#7 zgF}QHyk<>?!IR+`_)IQPNeS9(10B%@R~(@761uqtv>+4I+JwXb;?^VCXi;NM0Zu-C zc7;e$AvS)_=m~;cywbg#!UCN93aoz2s%#2c?5Zop#aUSRm^ruwEyRU6jU~Cc_(b>x zSl9&F^#sKQ83ovd1Oz~Ja`^un44)acGJwu}&;pm+kQ@!}&_epw;FPBf8Z`vvd2!H0 zx(H|h7qo3gxhP*q$eEcvMAS)?lSe>}TU44wOIy)YRfSbkjZwtOX{)xdHaAbKkdPfG zC$FrWu!OLLgoF^Yo&-;xDyR)9%HYZHnqfZ!Xa@->tsu<-gN9BZC(9zI$pTSXCMjMK zMiEyFQRNBx8u3cn+M@dV^A%-ycsYax`LrbEj8ue$RfOf`L3N=3Lm)#K!(rTGcWRu% zB3we6oFXDz!W!&yavTbq1=zUxIi&&CJ_v%^^$cnHV|PnHibc*@Zbcnb|m_R5)1~xkMR3fQgZj zIf|2&Q-qOIZKaH`u*^hWZc%0qAr@hNCVnASZ7mjgL4GzP>*y$9c@}AJP;VOCy##j;P|k!`hFt%GG^q5U zTvR}rUzA@_NJ&)R%0N_F+CW+wLheWu5SA3@;gwME^iq)G5my%$NK_XQ5dmQaW`?N$ zw;4V&>;RuL1wNY+X%7u35u1UAX+WJP5C_y45mjbWhwk(0OJ!pcl;#lOWn|&!mXYHV zRpb^FRT5AT7Ukp@kmMIE3t-{(0fB&EQC<;NK5GpX5dm%mRW&I-VR>#|9wFI?2u@o; zCD8e_pkCt#1}9LNf~#GR+!(13W0DdQ;WJV4i5HCv=HwOO;gJ?nDYOTo1%FD+g$PPLL$<)+PNC0&2shp^su%Yz?0S-1U0Z|q{LC}~wj~M9g zQ$_^^Ssl=d60ZNZ7$R`>xM6)3b#+m74sI?5VLb^^DNwV5myMH+gNK!aNiB_sM?}s< zSYBR3N|;HIgOiJulZ&05DGsy_!}tG9hPMo$y!!w{;Df`|A!QP1)B+TX zW}xl($|CIMplAdgw*fwG^2@GfR9yBKu|!KO;AvnyE>bZDLh<8AV@$^ zK#`AWsi0s;f;gjqs;a6#ggkk8O7IVOGfpxISnQ}AFKs2ofB4;rD`!2mfAn!#K|8MF%nG-L}ZCPD2! zNHZJMD`to8;THw%eK9u`hg9pL#wSE|M7h``xW!65xD!}-6gVW=nPXU3`Q^npWfj?# zI2Z-lK(pjr;^NvI!h%Afp#ssIVxny9t}HA9%p3xoEZppz9BkA01^Gdt!q1?{@S0&3 z11I>bDrE*u2Jos_NLvLIAE4PmaMcf9nk;I}4lWxZ-41?55n(Y=4t66)-F#gK2T{j7 zS644?K?zRDATCi+F0mvD1rFH|dk!{sUR_;Yer07Vem!1JPF@aX9u6K}@G1zG zO$I*D$PZ-MB94BTfTc1YAD=N(3X_b8)ERXxVIfY?&IE3LVGR~;&=u8E;0A&S2b(mH zj5IqhH!rB?%)<=|chKncSB66joZzv3Bp-rSw}4V0s2l+mwcvspaxR9Ny1E)@npD(F zN?3$nl$|42lv9dFhC^OU)?ZdbmRpLCiJ6&6h>4L^HC@S)U1jeS9&SB20I2nhA;*ObMQ^MAZtX8At3+?cW`0@Z?uA>Oz_+qXicH9 zDI0u&A*i|%2X7ySo}*!GWU6iqYSEgR#RnR5OUW4-*|M?;voNVjGs!Z`FbfN42?%fr z3kYy2i-~iJ3JY^O2?Ps+kGADtb`@ph5a#FR+{h>($ic$N&n?W)$jK?lEWpCe%*?~W zBP7Jj%q68K$0emI>!85oq-vzbEoY#@C?XaKI;`2$keS&~Qk9PnwBnwX0klv36~lH0 z0R|=LY7cOG1nfh2e-1nlr*38rEoYTYLCFAA7=h+N+1Not6rhB#P?%4IM@mFUm`{*T zyj_?}m`_TOQ9zK7mz&>QG(gmVl}VVHSur3WAYgl(7!MC0kC>zgFCPcLaJ(!RFCU+% zs3>a2m=!X&;Q#D-x#zR_&_7W7-=5VRD`y$d2E#V1q3XZ zvY2E=BrbX=2(j}DaPxBWNvg5&Nb+)XN`OXam<2glB?ZmddAWHw`8c@*K&O_7GN>?o zWSGUE!~nW2ivd()f+i`!p#W~8nt>8KsG$tsUjU0wWpF&g@&iZ-C@5enNx?NCd~i$D zd_Nx}3lBS&00+MSKRXBLaBpT&F=1sE78XHHeo23R9uXc1qINhrxMI; z%p6HfT5@uta&oF=g1j8;ygYn7yxh>MO}PYxg&oEDR2`U^`S{p*xL5^P*!ekmxwv>a z`B|BnEja~PIQe;a_&Hb@SQsMy-(~=%YE^K)c0^j&1KuMd4xgU|ZG!=o^X8z?WrwW@ zPzQMp+PpA@dijYTle&U}3L_sUt1t_v3JaS6FPi`(lZb+XFpB^ytDrW&62FgkR%w3y5}4IM!t4jy41US2^F4Q4@EZcYv* z@TjB&H>VVzq8uAIk#O_yf_Gqn)``Dhm&73CAZipPzY7v*4Cb@D#s};XKZZZo*>A>!^sR`)_^Pz-_6Du{+*_#z!p zb3s|u_@x&Y4FEo`;9W zoL2^Xiw2~Pd=Pw>5NPfWw3-52$bxEj&{|zklM0jskub<3Fi-8W)Z$a*SL72FROe9< z(zZ0<;t>@PWM)-l6=q`A(o$DfSJyS+11BUU9bs`neo<))GihN#UP)mgM?QWDO%4uD zA!c?^Mg;9)jRxI01g_y@|6c>|ec@#Q)$V%WQBnAL0-$!7IVifp-Ff6B0ohXpiYRt= zV{>uvgeh1NxDZj!)?{H6W@2^|jWCfG<>%(+V;5xO<>luTmX_gVW94JjWn<#!OtoVY zX0$UC(B;(@<+I>4=djYN<>6xHeG$mk{UX<>D6LSK?&n6qW7vz_f=Mm(RW?*Ls2H#|LfI*Z2l%DnAJ9yMk`Xb<7ub8;HF|^zQjfsQ0 z3ZTOxK@+I#;Q9GQo4WEW=V7ZBm$78I5gVi%btB`hi`%*Myd&m*G8 z$Hk|Wqr)Y|A;7|H)2GKPEW|4jF2FCzClM_qpspbx%pt5GC@Co@BWNcnDd?chBg`!z z$;&3jY9lD9qz0L{mlG6};NubI6%*s;7vkk-U}XpepL+^gaqYtpz!1U^0h)gSH9E0%AO(LfowCf`Z%Q#GVFq>vAMh&ngAD8pO3--pV+aBH8sb|-9R#{m15_Zx>K#*1 z4-YoE4QZT$;uTUxsHvNaLuzhF-hw3E={BOmB1r-Q{M<|uf?Pbz++O@FOw5Mh6-+8B zp~4)z0;0Sk;!-@!ECTFYpe2-J|fH!5lQh1zWc% z20n}#T!4dztwC)^b#rI~OCnA*HiVl`kc(eZSdLReSAa!W5HzVKD=NWbqU@u|$Hy=S_G0nz<~|on<|^W;E~~!5|HMxW@b^BVCUo3)HF92 z6=oCQw6M_B6ldiTYTv017r}odxO1E^I_q%TFUI+^dcbcs||RaLc8Dpc9d%d4iw%gd_?27G-%m8ySfo6 zu&K+)X>zJa@bYjA^2iE`u(I%patSgqC1tT?dkKSX;qu@x;pOA66p#|&A zbl?W{&xHQpWN2qdfsalwfMOn$0zlynPQKu}4I1*G7=?vCw1+5Uq^>S0E-tJrEG#Uo zp`oQEYNVsA%qF5K%EYD0DaOmq&Betl#;MB1FD4ek30gSJ4O&mo@c$;mQ-(P3t*A1f zQ9kG>C3Jrr=+rLA$cPBL@l#$70S*xsZDs)>Zgx9OO-)9vxJ*7C5k5`{QBHnoF&jZa zK~6SS237_UhHUVO;6%o^$PHJEeHN}!pt9LgxlnmKKffMmZJ8cu`ws|1QgtCX4WZ`} zP`?d?K`9YOs@~4et0gTZC9TEF%d5@}pW(=d)g&=d$8pV`62u z;?m_3=TsEd73Sj<0|h3mLKim|XNP1%a}W!3vUhWWf{cu;tQHfuG@B?ZqZ8;L zCkY7&ejavSXFg^YK2|Lrc3x>d7CuIvNPcc!ZeDIJb|FDlHVJ!fWo`*>F=h!Sab{6& z7Jgo4DJF3y8Ak9eUL5~#Gvq+VJi)DA^c8@hz7Qy%dCJH#2@4Bw32?~^YA~y+$;*q% zbm|Fnaf--r35cl6@~YSf>w(sJF|aU*Gn6nqfuD>ADkH_&)YZixBV?fJ8+N+FX%6oQ z&U9UVer|r=2tf`OAy#K0J^=yYLqfbvLQGOTd?H*TJnTFIZ2SW3VthQH`HCd)8c{M% z*e%HwV-{c*7LXH=*5*@j1Dy!w?2K~4u89Q73A>>6+{Fyr89-~p#lWkUkekZjwlg>) zK}SFp^Gb6Fva$Fw+S^#Ei)=pvnUP#6>?$l=l@P?|tD^%-iJ-e~L8D!u9n{LO`*oGk z2ACjwT1>%bL&M6p<|GkjZf0QtNdYl=L1}w%ez8DtyRihXs3z=mV9?sOM-2Jk-6f#A z48g?}cmNsP3t$&DHqF;m5j7B16xH-HXx7c*5i7~k3bp{v*A{{I){+sv?eW6QT+G4( z5&|Nc{K___V1VjINq!Ny8yOk6{y$@AV%P>=%>bGZgk16tQZ^^yg=-hYP=5~;^^k^^8RVcq(CDAJ7(3`_2arqE@|-!jd1VE~&G>|cIk`El zOn7*C`8ZjHSUI^l1vv#dK%>qa9D?jAHUgl-gc#X5*~G-y*?8Glxj9%_n9DfX*#-C| z1Vx27h1u9xxkLr?6_uD26cp5%G!zvS80FcKrJGUBm6QjnRQSy(_+Ku}3Q)?6P9P~#Cft+6mjf=BQpz@sUkvpE^W zA!GPR%LZUc9Jz%1AZjS8$7{u|%dNCXon4tzcufTa@Q90Z%W(*?@<&GUfKGOB;UI$| zg9-y^4%rCQ8h|tyLDd_mXar$U@dzEt01YXMnzI|LgDOmD)mtR0Bg)GmC8nh=D=R9_ zD2_aC9I>PqvKV`%NxNd#4jc+FDxs|E6OD!BFx6g<}NGi&d1JU zEN&+T@;~4I`wZpa6I=Pgrvu7>*Sf))LZIF|2t&utK}+7$AjucB;YLtYNK{BPIhiFY zO4Pu>UWikOMH_TwC#yJf3R9!8lAfNDv4WtWqluu9G^;#|0KYIFGcP~0Fpm(ZVPMeg@DUP|$v5(7t|uP`HEY zO5{5WAP3(d_glb)8z?kj#ippTC~}GejV*!F1c)vZ65?VPWaD9Fu@dIvQ`40e5|WSr zugeh1wl{O^>KtXWdsF9 zl|=;vWHdC?)s>ZXm^ZXsS?9Ti^iHJ4lr z+~9MQTA?iyIR? z>Le^LXxWr%qPkIOad9MPpfDdFqoN>_urr^KYTJ8mHXE>TlX0YNT-Ej*yf z7GCaPBV|r*Ha-?UW>z+Kc4n5^P*5wHmz$rLgO!hsi;sn!j}3J4GpJr@gPwXR&0q%~ z%ZILb0%dM+YYUW>A*;8QML~C(LwnuesReQH1@4%c3zTSKod7#&Q3(lA&>9g@7ehlq zetyAVQ5IG%K^_4kMSeC}W=0Vf&;})Wd1YS#0XAs}*vQWhDGm6Obou$axB}Q%`GnrYh#enFefX*EOpVbLkSOH2Y>X4=p z=mZte0ypqZFW3qI$O#a6B7*FK%&dk?{DMM^%q%=20z$0%!rYQ{wa&B{bPN)kJwY48WNzP?3+5OHok~w0cU2A%y{SXAeKPb!ch~ z-Yp8M0YFt5D1Cyvps;2IXl0p_vZ$D-qM|x;F;l&$tSG09JSeY-8j4n!8ZkSG3yQM} z^9yk~NHVhva59UqgHL1!)v5gduQS|XD1!T68+^hl=>8b+PAtfLD5#wWng?PxW=HWq zD4nW<8tle*82PzG*o8RQT3ICpgt&$I4J3uw1BCb;IM_V|Oufv_&3#N6&0K@{xP{p` zga!F|LMfGLQ3E}l&b#UWcbOjj{$UA80g$nQ%LxO#v#Rw zVXNxFx3H+2tC_N~i-O9QRx@>OK|vK|CP5Y^5f(mv85TKd7Hbw;Mm|148=l21+ybmD z=E4@b@;nB1F5aM}3Mt~U%!~#TK&L^nF@SPeHF$pnsGLv(uMmNU0xV@h&n7{S7*HTU z5@xly2)iH~n-vqkAU_MAG><5UkqEae3%3%Bkh-9n5Tk}*+Z1s|VHQqVb#X3nM+X)j zSw&Vp4RH>BebBw&a=vohoLq8pa-dY%2tL0PwEGymCW#&CY;#b-1j@Fc+yZV3BDF)5 zO_kd+nHc#b*hN^F7**J%1;p893}jf?`S_THnV7{ym6S9!MGdwZar23?uu7?j@(RfG zC~@)di^wwaa!N}JD+z09fyN9$_lttg$Apa`S%P{kY@l^>pb8H>QVuFUKy4iO$c-te zB?@vK*kwp<@(+njjBMNjVqC&(5gZ8#po>k+%uIt>82QE71-O~m1a$Z{1o(wy`J@Dd zIQdz{xFoB57cwz%@^Fbtv2rE4Nb^W@o0_39)b|2^tAA zu`;vriZC;=atJYt81eB7TU)cU%R_eaNlF?B3YvgU%@JW>V*uT)p2)BZdJZ?}ga&Ew z3EALO4NBQC4C)Jj=7=Tiy+gg7oSaB!k}SC6=C7jkU#-pM``dWEH@eQ zNikK*JtQf@*Vi{7L{v*lOKUmUNM$gY8Wg}MU@rr9>urV@QcRVw@d)s6adC0;6a^K# z5Vxv=U7Q@~DW>5sj7kJ?dsF*Vsha@)W-dSk*`&~d>K$TH~Ns2{A zSc*lKNkKY`nUk4QT1aSXJ_v$j7T3UkeGy~4@QP*|L-zoV5R?;R7vdBaRS@OiWZ{X84`SgK=ThO1Vds=!6BlC?4+33b0$R}@_5T*b9B^9@ zX^mHujF5<+C_6`-nk~E5wqD5TJIUaYwQb;jJcBu6V-3ho@C*_tw}L{**z^jcfC7gA zADg(TfSI_5aGt0_ioQ=YXwZw9(@jT(PeETeT-Zf8+{FdH&jVCyib8UcGI)FibUX+s ztU>vwq*9wzPE=4*hFwKSL@>qQ-@Yu$SWlEkO5ak(R+Cd@jtK)JLlXEz$3x&9^&qE! z``XH;ps7yKm0BQYnwgq{*KqZwsS6A7N{I6E@$hSL@Qd)X+o*G^n$!rJ@$&PDI0tgD z^K)tns~V|r$?2;kF!BoWGQ!fsXNJuTeBiT_L3Irq=n^?lT?6V^!$+u%8MP=giL!2`7$KzKSoFE>Ab zNQaeyfmywYzP{yF9&Q0{k@LbX!WP297Q!x|ydnrLM{DtyMzG~tpt9d|>dw3S7A%<0 zBw8-oQ(m6O&o3h=D8R+3p# zfms&Rhsytdo#8d=m@H^<7IgUn$mt-gED9Qvea*-t#UaSblExSw;%}w8{WvInvT&>s z_7E1XiuL37($HXFVW{|jgW)3s=%z7Q@acQ76{yHdO-)V3!Nx+*Q~=fUA4UB|MU5qR z)eYGlIfctX%Mjh&-OI(rJ!Cm~1qC^U**S&SHk6eK2>6OQh(pVaD3ZzyOJ`qKTU%Ru zCt=VobV!K@DW_9|0|bN}q!^ePKzSB)2A(j3B)FvvD)hjyC?+N@2HETgUc|2kK63(e zke4{S`dU{PQ9V6Iads9_7CvD$Sw0SSeztHCYat0nXO>1`9UWmWCl*Ep9-V+*HXc4U z-o=i>!geeo+#;YhQ2PJ7(DR-_>td194J6T+i?c(k1@H_#_=YBPQ}(-w!sepZ!bSGl zoU#%wOm3ViT*8vNlG;qV^3!GX#l`ixnYabnnRVEN*fqJhgxL6`7$votg;;c$z`nf2 z@QL9Ng8=xfO9pczPzwuOtb+;=Gx%CX(2WAcR)#!=hFMu6f?RBsqWYqu`WpoW1)1c8 zg#xq$#q?AK3xtFUge@#Ueu?@25PX+17jy@>F=%vGosAtdn*}x=ac+lljIOYVpfR7e zsJI$mqPn`eRjZl0x@xJiimDR7oT{2EyRe3^wy?0aF!+|{H1H_;0R{<3tbmU_0jGJC zLz+SR=0L?3$U9=6d^vf=1-V2dJ@{1ljkx%@*j3C$Em`;kq(wCO0;Pq8M8zgaO9+T5 zaJcF5NeC$ka0!bEOH1$N5fvAg6wvYJ(2@Y{z0Lg(3akB~HTvMC5ug+S#o+vgyedRl z)cBL7sJXeWu8Az4AP2jEHYbZPE4zZJj*g{}g@v#dXtxPFpD?SK0JETwunOozLCF1Y zptJPE89;4v25{j98mb2mBbk^RgV#lY1Cd<>=0h`6$VlWoRu(~KRt^b1c@|+2Mq$R- zSSA)lQAQ&nB@SLSenoL54rU=1_GEE6CQ%VJO+jNfVLpC-K4B?QWj!G?4ITw)B`IEU zQx!E?5hgKd21bTN@GXc37@#Aw;J}3X7Scb0UHb-$PH+sXgBLQZsc#b%loM3sRW;Ys z6O!PT69+BBl@`&{Ggs$Q=VfCNVrFJzVq#{pO-|BR;E`7smK2s?W)fs(mJnfK6=Y|T z7M2uNQW9Wg6JcfHVqs%t1+~#r|K9=cCIppyp!){E_jQ0qG9c@DK&3upF%D?CFt|=P zhU6DWK84KrJ8D-mL16Jie())JPN7uHe* z-8Uy~z{V-XC~0fS#bv-MCc`W#&8Q*5BG16c5DBjT_k(Lqbchy=3?g(go_)UU6PtQEqNgZfgWaSiOw-B}z7EUtua+77`;SgrxVHe=x+f7(cmywN& zU6_xLlZ_R0M}Yu8uP~pu96zW%CaCJG?7_h&!pv;QguhnEo>tzsm1ChA}PhA z!N{m6z{khGi-VgFbV@!mLku|d4l*b(s4>_ufbOA$)Om0>sDZYRLHgk!M}k6)U5y>o z7l!0Th?Jh9QYeT*mf3*IB{p`@fIDQmQJsx_n_aJ!c}tfNn=msgAGaV2 z7aNDGAe%4~3qQ9YD;FE*{8hrjtAvHiRm_=%ge7Fy1%yR}xmC@X`2}TU*#t#FXA`h8 zq=Q2Va-$Wfl>j=AN*S`d0(7PmXh9vQRSKP(2iH-L0s@4!w7gS!dU8{R?F9w+g}8kL z_=N>UOPqyeH4TJ?Wql`c3Q2K^DR4;(g64;q88W~-(+@C6LfcUAmLABH;1UPafj1U4 z1}#(sH5x$e)EBxI7NT}`ifkPGe4N5;Qlh$yqVA$G?(SXc!U6)q>H_?H5-P01%E}or z0s=9@Y7DFldEgtLVdo@+)>DAihJiv1e&sW$wGN6?kk3F-ZVtKz3A*zZL=}|@$T2Y* zGIFsCa`3V-D~KwJnn-c+@yLW3DJqI8D2Rf|9m3pFjEsGtOP^WTBtf@63-YmZNm@xs z=}Jj~TIFf~uYvb9bAoSP1I-SC@-TdCT^zb=T~ryoyh99k%>kQ=DoTMl0BkPIFzI|x4EQl0^HgBGl22DeZ}5jUBE zufs-K_z9^HO&=HPTU(1-Sm+9hri+@Z3n=9a$O?!u^D`F+i-A@mi>YW!NNB5z8A|XA ztBaY52nl()F*A#RYT>m1_rUkqBW_WHoregv8{8K&76mU~0=4Er_+G52g{YON#01ea z(KOIC#5Ok5rS-(b^yUe7bVSN{NV-XZdLVJ&eSF&)1i>jC)CLBf6{iduEC$^H2WpU- zgHt~!5R#J%l9yMUDI~?AqR!08p(H2F%B9!N$JfHlDZs%ZE3B+6 zEGx{w!jK8g*^oLNde1bdQA5w)@k&g7Cd zHy0IQ6XdkBV-W z^eI7c6-EvYMMX{yEkQw1IoS{v2|+dy9##QyRv88sh8*y&b5Lsql;=Qc9$HI6A_i0@ zfrAHfn=5Q^0ko$QoMuFgi;P8$jC6D?+bwl;jElKBgxGjkSsg?}9UL4S)`O1t<`?1T z7vUEUjRs9eGjp&g7x4@73xd)-D5gL=e;_y3f%d&KfLC;x8bj}_gREJBtSo|*LXg(x z9`j~%jZ}3}F*adNb!%%zK|T&4u4rK{enG(lQo_Pg-CkaWU{n-k z7YB_lfo`e+^*=#-_Cz7$IfBtytgL*XW5oo86*;+!Ero?G1;LkcYJln5D1i-LB4fYuIx zLjtrc2DFBgT^)P}tGV)9a}_}aGi3pRg4)hd=0FxE0Tm88E=HyRR)wA5GDjCo8VU;w z3JYrs@H2|Ba|x<}Phke#`nH#WmqCaDwC+X|d~P)8gh)_LVh-s#gXh=5{eI|~JRmng zQ#NQs6*^XQjyE);-2fI3G11DrM1hgX#R1b@)o1={Kto7tz5oTo)X5tbN;!)({Qs$8n7G&e( zx+PG3i9B)!s-+<(Z5o>@ zf9OWi}TI)KX(}6Ero+RZ&+rH5FBHc6L!vs1}5rw7E)99eU8FOpAa!ctvdJ z|62@y7`8KrKv$?RfO=`LZI9p^iotOTDmWmu4LBQvS5| zff};lID+JQ(7eAmmh(lxHM23O06e4yy7K`{7<#jD28ddN4i{13Q`2W<7G+^^iL$ny zA}%frnv)V1*XQAl6%=&l;^L8)5e8i$$CIiCT78fW-a!ay(L-heL2F4tEj&=U2VMIP znlppUoq-$1pyr7gsC@!yn}`~}Z)x#Swoo!xwopnhW#nQNX5(RH2Az=T?Tz=6S_UqL z!2h80k`6M+F@WyyGGs7^p3>xOhG3ifM(XfXXY5+E#%{s5Rg=6l~ZA56=h{}QDI_Mm*bP-5O$SiVisl= zvSwk{F?Z(R&g5Z_6<}u7%}8H;B8#cxB_H3is*EH9!`Ev31MkrAt_ZRc3CcANi{)M zeo-zd9zkYKL9T28E_MNS;Xd9nZXG^FK4HG?9Q?v;0&Z5iBIfKa;w)U;Z0yp!9GpU& z&P>u`EaF^j{K9NPbA_Fp455I5i6Qp?ZE!BpWv~aeSTXj}n?qd;nz{!~@q$9o6w*=# z^$J0`2;4>j1+(!>b0-!KVHPG$StfaQ2@Xa!#l=~fg_uRmd{sD<-Q0Eg)(Hr5XbLKT&Uj#F0M!zp62=U? z`yY0z0HnPHJN*WfU7(Bh!0rJ>G6*BCZ~?mzZIK};gMpgGAo_`*Ade&)4+o2nu%Mv6 zjf#|%f`X`&sJy(Sq?)Y+XnPW~jEsS_v;mk5v=bEM;uB?MxRz%HH z1X!4anONi*83lxR*aX=4SeW^h_!Q+VnB+i{4Kgw^#$~+R%v{`gOpKf&2A~R-l|z(Y zf=@_}kzFWVM8r}=RgwkN0*nLiH$M!HYgl-IN@_?3289(U%pg@QXzT@CY@3;bwqt?@ zWgrrueMoHVJ@H0%c8a2+QKF(MPEJZJ9D+QY0z9GuEG+!2EL@zd%&dHD>;l{tf+GBS z5<+b3jxsJ$!V<#DlIGmp=90?75*%C{e8Nn^jLckYZ0tPDpdnc{fb1YyuLpsBLxV@^vuPEQFg z7GYLSMbyKWJc8mD0Q7dt;2FDsKi3oAD-TM9cD4?DL5n>Je|s}8G?kqDoV8Ha(ml#Va2 zj0Ug17Qdr- zAR;Cp!7I$m$H&GiA;>Sp#G@`GAOyaX>H&D(Rv6xP1LZbQ&V%GQP;LXSIRtqahC#^| zhG8c?%tYKj713?2uWx2%TxDcvsHZlI*YZFgVEir9TEwOn*Lg127P-wEeyr86@n6Q{2n2-zx^&Q0Q z!6XA0L)8D93?CWxK~G83V=x8p_HbkH0pB14iCsul4kkgZH&Eje(&{w^4YR-(QkkoR zF8BZ~JQZO#hE(>D)B`2KhTY^awdHh|7U1F#Vzm@tXAxwzOJ?Ka5f$KN7v$thVPO_! zVHRa(swWs~D$W9DO(!W0v4&W*6k#C&ApyK|6+9Xy3ZAhOg)Bh_=Vfzcc4bgM z#2j=TF{m>O+H?+Hs|pfUqF9fG{hEj<6^zDEe8sIR#~znR%G`c^Ucm1^Bpx#5i<>MOcp}CGqgs z3z-OlTFdF+bh;BfBP9&piwC()9W-tX?wNud3oe1CigJ{Sf}8tuxwr+z z`GojHh4^`e!~|K{xCB8i7v$m=WMbyz<>TZM;^P$(2T2@GP37Tn6gCIntqvO91@&M- zvwWZ%)%3yp3LyP7WzcOpV&dQx&fx21KnGkaJ3zogfQ?yzHG!Q;keQ7|)KfIh)6>(_ThL5UjGddGS&)aBhfff6Vu=7N zpCGfCkPtT$AHQZQ4^OI~h@cRBMlzJhl{3&8$-Q&t%wZBO6%{Ql_2T9h<>eLO<`&`R z=G5lo)E4Dn0G(wX!SI3MAcHIe=!^<*I%0#3OM+TBpz^@XTp7d^XJd!<2f;Z-92T#p zkXQxf6=l$r0UH~5=+w*<)N)+wEX>NwDag&Pz{fAiCB`Sn&&k2XswTuQ$|20+;K;;m zY{tUMC&0lWEiEb`Dk&){!OzU>%gDvX$HK|Vq$DA+mS2*Om5o`Dlbe%MfE{$wG6$!S zG`FM_3x_T%vw}1m8@G@M69;Ht2rn-e7bhdT8W$HMFB=yV7ie^epCKH4OOyZ>cu zGck#IdhiPJLvM3ks)%q3DXH-C+o|#LFt9On zgZp6np?mHjE7d`x7SMnMH$`Bh65vt@x&;iBk*6w%%FC;zYVj)Z*aukKORA}s@Xtk8)O%ve*mx5ARQ`DuLb5+1Pwbg z2GpuG0~Mp7Y7T}$TYErdBdDu0TLpCcqY9|L$ot!}7&hh^yLkqYU&&?nPJ~b5De~0wa*%6IRcrh+&Z0gG|Bp@K7CnO*$ zC?=*VAi}H0qbMMv$OF3dWec~UB)6Oxr=lpAc#OQVyqu7_>JkV%}4Ux-y$K}wv7jh#(cjD?kzLy(!7S)P}ZkDrN; zi;a(unNe7fOGsFiNsN!3f14negdjgBGqWHwGq)hW2nTqcuM#}ky9eC9lLen$fD*>g z^UA?(JJ4W_vMA)P2~lIy!~DX$0wP9&yn+IPj4Z7Ds(hk+S^_LA!dk-oV%`#pS{u1V zB{>yDIi!WTgioZiu<$A=GpZ``u`s6!3C)!i7uPa01ogu~Xa84&XCy$U+kj5c1eKJ~ zaspKRfZ7+JaspI^!?Cg{sNV!GL_h^Wmbaj;sJ39No{Ea5rl^L7va*(zs9vV1g{ZHE z#T*e;VPREQetrQ#&|yRT{DM3@BJO;A?tNrSzqx zWi2c$q@}}>_<1$?_=9j7ZilsFflqYSqTb83v#d<7_f5~2+47?zz%G*x0WoG7Pl@R0;5EItV)8yqBR}~Xet>=|wWs%@#5@qD(7UALNl3-;K z;pXQMW#i!#VCClLXJq2x=H}+*;u7X#U}WI_e}f^LVJrAdddMxn#%%1$X3$&1!Bv2= zsWG^0G&5Hg4CNPLVPR2WWfNp!66TZS5MXCk(&6LdVdvmsGvBHr!_2}WEy&N62B{9> zg!y=R*f>D*1}xyw#-9ua8B7>JBPgIfFrYae)Yt=UiUF-y0~OZhXh8%P69;upjX{kn zP}MryURcGBg`Zu3mtRmoK%QHSUs9BdM?y}WS6`lySw@*#Q-YI6jz>XAnUP6Ao?k>< zn~lSOM@Gg_MrN&&5epv=CpQldmlU4>w}6tUm^iNt7eBW=E1M_}Kd&&T4aUW<#>B`a zt-vnF$-yro0$N$h@&7tQ9m6)zN)B;#BXJ{BNDM;V3Z>BFlU)sT2e%RzADb+rxHOM~ z3^S9c1dp^B3mXp~kDQ2Bq5>BeA3GNtsG}jx&BG-oqan^{$SuJq$S*IzCdMnsE5X6R z&A~4yB`nO#BO=7X!OzDoCnCtjtD(XOs_`JFiyvT6gr1&e0^0il%BrB68-zg(RdD_U zUrr7x48fCEX6B&68PpPk441d_^Qej&=_o0Q%CNDB@Chm!@QOGKTgb9-bDCOMSXdab z@e8pFt3`1L3JD9#2+PQDbMvsti3{`by!kOZToDxaP-iMlq0m?bQ=qX% zF>!Gta|i=g^nf#W2%m-uhb9*vs|2Hr0+*^BBeSeDm!c#ytDqF8JSQ7JD;qQDs%Ta| z7FI?^Ru%z4K0zK4$wQ!mkN=D~BcmD%hYY`NEK6lbw#@e>v1<`a=%=i(F=l@R4S?Jnx_F%A(n zCUq8JaY11bW+m1vQP47#&AtM>qO5G@Dk?%eyz)vX(o%(lgLOe`nLuMuKNt=&aDnSD zL^laE7yz;X+`j<(3p^g8rjCH!qHOGZ(t@Bpom~99lAN-NqRO&dvV6?U%%COOOiYYS zjEqbZcl7gc@vGRd3x}5%E35Kb>4C23bX4VKWnpCno$Sxb!otGB3TlDmf$tJJ$RG{f zgAP6u8Ps$GI|Q8ILGvh(ia{MT_F`r(t_Io&4H_(ZBx)|o%)+B2%EQCXAt22o%HhZ^ zDXhpH%*fBn&n7M0{ES$i|B*Y`YE6UBuqoBefs3*y@D9I-%0qQyM z@Y-oJFf){b*9~oh_HRLV<$}TjwAut*i-OvaprWc;h0CPQjLS+CJlv$Q1av;d5@F$V zt!zEe3_{-jTi}^D1@KJ)pf(lQ3!uR}q?tm{ycVddZf*)X%pBDGtWsoU5@t7-U}xbJ z78MYcRuqtBWCm}Ox5^gaW|qiy2Azz^DK75DXD-bvuE%FDsUyk2%8>v65%~0O$haD) zrwp3GN$5)INw^dj%L>a23(E`3Izjf_%76f<9R^xg z`i)^XG`&FA1;Wq7gsvM@hHUzRG_JuzEXt-Yr9lf7MFmA=)CH7;M1*;G1tlchrKP2| zRJyQp^0M)Wi@OV0Nb!p636wE{cAm%yD=G@hgGNg8|K9@YLqeFBgM)(ybWnV*hV2ykLj{w-P~X7QlT9P&*xF6DZL@ zS8;&*6qlDRn^*$@ne5VPtm-MOii+$?TxoLra(w)}LIP|o0!*9&%sAh+RvFlShDe$MWUEvchu03d-!fB5Yy;Y!dt&pb=M4JilQ; z>;b_Z&q$_UUAb~fJp?GQD=D+9WO2x%Y%+X;8O;loh>5B#v;fBD&g1}g1~o% zf!0ld`nr%(D?1`6j#^aV9~%pXXm6$&@t7ZV+=vZ2r;lR zfbJuSWk9U-0f#0^T$w71LPmBVaTV)n0@~9pFDk^zBE+sC#Lg|mvwhhzVHsgLV+93e zb|E2F2>~`SK@L!!1ohlrGeo1N1dKe16j#^QteM^f0dnjLitI|ckhn^f<&)**=Tj75 zW*20K#T65S07C`?Xm_@l+Jgc_j-Q_alru7LoCpFwfFC1ofbMPvp9rGDRLaySDl5t*E6=XPDJ*IrT4QLy zSI>gvajaz( zX#M~aE}(Urpw=rSU?9s3z~imp{)y=o&y@RVUS6V}ai(4-ZM=elyxRQyGVrvO0A5|c zAKZHd72BY0g*Y3#DCp7&=yoAUF9STRcP7@@h||}AQ$b9hTSJLM*@D$vL6n1qgP)&C zh>?leDqC2ENr;h0h>cmz++2)Jn2VE#pGRDSiI<`W1rurWZ&%K`#v4BYR4q~j~gmrtsNfLu;#6?UZ@b_E3vMYb|! zAw?m6ArV0iRzYS?Ar=lH4p4c($B+!ZLzR<(AAA-XsJ#PjS3){KmM6%b?-l=EY9WnvcRXJ-^*6%f|qGG{Vm6=v)am*bK!SK(wgU}s_y66Kbc5M&WxpuPJTISAxCBQuEit|3H6*V^f zV5uu=FRCtTnPA^+SS2D-m8TW%;K0DdAi|Ks@DRLP?UvTScutLQ-qUUn2k$ZLXwwH5PVk}A44j`BZdRu*;NBU?22e)=7ADZKU~oeoTBBU^5%uvA^=S+h)z=pd71h%dUC7HT z$j`4OARq`jK2{L4L!XBs4Sb517`QEfw45Hki-1iXw0R6PEX&3o?WMymBjV&_+GOG6 zBq9^8AS@^<%FeNqkyC(`Nr)eGcoe@NBcqtGG?$pQCL1d#_kd3M_`+})y2ghAI$Ev_ zUPuO-?PrHwum$Qe!1^F9?3{d(e6mU`EFv6!!5l&0ZIrekpkBen%`c-N%rC?$BP`h} zF3c%vR4C~x$-vAY!H~@Gis29g==>niUIFNeY|z*#v@MM|e-2#ZKvwZ~MYC`UvoJ|B zF$?Q(YDnGFsOp}s6yi%bVUJp+(}FvbU+efS0d;@Up4qWX3D0@tDT&Ljg1&t zxj2OcdAYb)L|FJ3g@w6=ctrTPWq3t+xw1q++k!+|g*7yUZNwy$*(@X#+2lZ5A~l3W z_(dcXYPiL@c;eO7h27mj{cO1%wodK#?K`v zAk53k$|TCcDK^LmboqRp$`m6yp-&65|%)7UJg<qYf$LY8d&Jq*KnIV2dSvi}w2VPB#_zLpRY8-FygY)O z61<{ftU?kjjx1tApxccaqWqRP3XAY_a`18SNQ?7{7#PKZueVR|(PGyL54Hi{O?YY47TL7S{lWu>Dbc{zBw zc=*HwRM!a!@w0Pra&vKUu(NaV3yBH~unBNW$w*6c3UDZjvT?C`R4ot=XpO!G4` zv2*cpvGMTma|0>`j1IPatEcYRxHENaTuCCkhz!os4) z#wfzXD$gtGAsXx9F;iGXBtckQlvz|tT7*$lQZr6SC{9?7frUYeA(5eqVHe?lpZ*^?1iL6q}IMXxV4|dA*0T! z#+e|^BhAClqX_Pqi3+l@f_i44y9aJDB!lla1kD+OPCt-_^k6~b2%z*0!jKg}5cA`` zOhISNDJXCVae_ADgZq`+mM#^RhV&~1#Mxw^{Yn;wRPgPap#8<5&<2gEL&F=i>CD*3 z)Z9c}TnxM@4b*-WXIBGdX%GhOYylPUpbWn!Fi==gk&%y$k&#h|QHYUSPMV*Ug`XwW z#9EkFSV%~MDU7L5*v3XUK!=HogNvDiMU&BV0Sm7nGe3*4@Un<7#&l(2112GMAqIBv zDv@st2N}$f&VLMo_!yG*K=maO1`9%FP9Z%%FbP>RA*u|z%teV^ogFmD2by99uhoWD zM016?#W}>egk@AzWMmW-Ik~x%ggB*mx%oJ?w3PVxMES&d#QB9qM3|U3I6zA_)%le~ z)cFER1O)|^1(hZF1q5WQ-7C2nxtUA_O+dAo zkSUmCU}X^df1Tk4gFk33Fzg-#ap=Mh&?Xa5H3=?OMU5d*dbXThTAfu{MtOEyAq0rC zD=4rl@d&bm+UwEMJd)hJJPP161L{w3GFX6jPeWFXfpR&dHwe1v5|mIN7@U)p!665V zZa4;wRv12_BVon&Ahy7;-E8Gx%s)- z1-K-{xdqsGAm`+Zt4VQ7aPxxiMHFQS1fOpMI`P>DRQiAlZty_@AnV~nXV8^Tkj)C_ zp!H8?=CD-~pstvjy16*0umX7twzEoIT2)($MNC^sNmM~WLzt0STtit|RMlRdiBXa% zl!=?2i-n6#ginx-i-VJoNlZ*wjfUni84q%U;+t!aES(Pp@IA+-ek{Y!NkZf&LYafsL3Y9!^g`ksjH=}tSqXa zpst~%Y0J;b$H*tmB_qTrAjK`g&%rLh&d$ZE%*egf!^g|T z3%SgWmrGetijR?lQ-Fh)k&8=^os*M`lZ%~8h>1}Qw0ez!m4TnZA3UZ2TK#OoV8P(Q z0Pcx`LRnN<1akg^vJ!Xz5F&=u!h}p)nSt9OpdE-P#REIL`W81=VHIT_7B(Sf0UoIW z136I{ZWc}+E

        }K1p5)(6NTxylidU9GpC9hGv4?!h(X*%)U%h_+@4Jg=82RC3qB7 zwE2aF`6c|9)I{QT}pii}#^prb|D_!u}Ca=@#T4=@NY zh=5NvQee=4o^q*d3cj#POdM8?fRa1XeZnBOgH{iM3K&qC@v&8riHSv!jah+>S&)fU zzCcCAQb|cvMa5i6DHXg&(bd&2oSlt>m4}a?hlQI*Sx86-gxk{6czB$IEx>0x2{HsT zd}27jpv@2f3RiFm1z#fuIRp@ta=_^tk}zPWIv7J2h(Y;~>}?gG zJ1_auhOc8@*2yQs%gfKj%*epYzz04(q#oXC0L}D((x@SWH$wnJC_^+T zR3YmTPHN7f78y6o}ggP&;cvzSuj|#U0w`YvFARng`KZl@>KEEI@6Tdt&voNz5FC(7} zGanDLju?lCnz5h+vy3b|2REAp8z&D37Xt$~L(>2I;Q1iXUUSfWf%*)l4AuvOQ z!OxWr@)M^kKPxLgyE;EBvj9s3&lG;p?r~v$FF|hbne@E8a)NT)?!1D$)|^~?oI-qT z0^Fbr1UdOxg;|)n_?d+z35s;nZ(4LVwv|$g;9I%9g zLl`nU1X|FhZdM_|&(9;k&+RG-zGcMJv<+QgDL1b$r%)}J^bXy!jXa|qDX@ORMnS+*tf;WqUidsky8k)yN*q|Hilpz754j$BS z;1w3&=Tk6JR~J=P)sf6-We8S9JDU!_Ma?H{)OmgBZ65x=($Wll+=YeB{}$6nT53ZSXlU(V+1$^ID9k=q`5_OGz5heKo^oL2txy2 zj9Ea0Nk~{;l1U0QYr_d$Spqui1hg6lvT7fc!$CP4T7ruziz1J*D~d2O^KqH#tE-DD zDQPIl$nZ(!vgT+g^0M*@in%h035alp39Aar%L}UtD+=qd2#W{`OYkZ&Ffw%g{{`O9 z#SfYzF$SM=4mv^+w2gYIsFEljlYpoLlWkExYjp*a5VN%frx3`Ep!)|wyDzjrEmY94 zD8x9@Oiq-MpUcWbOG{K!(^ywonNK2@HAh{MhnZK9gVR-*n_G-M9N|h`W?^A|0SRt? zC6JAa|NjNIi#Z`_5nQ>6E*6!OH5WN2Yv zVR+B5g#mP~Eb<};aJ2%OPWXjK#roHBK+EXDng=)#scDUT(X*i5(eA`dP0&KYCMiD zvhs?u{E`at5+aYoT_31!kqH5`~sp3%nVfwEDWz0wt)LmQlL0P8-WHLQU$3- zn=+Ug`6M~S*ch4Am<5Cc<(MVY($ht4ZMV2`bBQoB>&nUU@rY>7^%4e+I_LlY2lj(H zc!dP4c!CagiNHo4A)CX&$GCy|!H^oLQAb!;hmnJeRfwCHlNmhd$j8sc$1A|Y$0Q}n zXv!AL&&kTqE?=pkA#5xrrow6=!pO%68g&%s;pXG!mv@Ng5D^xd%fZdd4&G-_^8Ysj z`|7xHCY&Q004N*02b|E$%HfBpOVCMxDSSf;B z{M-V}ZML=rpwn(x*|;@}g@lC)xcP*+1UZEGI0XbzQ=GUlJE-*!YUQcpO?-8wtR;#{ z0xaBuqD(@JoE&=Ua&n>)67mwFqC9-U{9?l5+$uJr0s@?Y!b-vl3c^al^1^!H8JVR2 z{}?_ajUekm+J~?cv6Vr)?ZMdG)EwN!Vq=Fd7cl{MK~@VJvGDWy>x260BG$}|3Pwzv zq5^E}9DIVpT#S5t0-VcMNO1`;w+af%%NxkZ=&GI%Gk+?&AqDn1gTZGiC?XS7M-h+}S~)0NR)V6M`ND59+~zR%wC<{6Oou*x1Fz zK`W&pOa37nH%(^;G4V;Vi?cAgGcxk=iEs+C1u^l8vkS8_GJ3Ib@(FRXbBMBu^YaMu z@XN6Xa%sx2XtBz&NP+}5+VKf63Nv!D>o79&aR`gC=3DUbGYT`ZbEvU%a`A~U^RaQr z@r#P`%kgrsXvzz53$Sv?3rI+S<~%t5KW4~g*bctk2($`H6ucDTJrBP5U|H8@yVSes2)Sg1)CywZ&O|2>9WLgt7G3o8dmh>OcG$1-`U z@kNC*=YY&HW)bESYKNE;1FnTZ^KYP%7PT`83SV#x!+HYX)!2|^{fJdqNQO^ZkXMOM zk&lmyOF>AUk3~wFiBXi1$;X$4SCEI5SAdg~pEJQ)Rsgi)gHH&wCQ`;glUv(COITb+ zT0&S^Q(W9Ah>KegJf_X{{}Dq5VIK)72S`Xsi7*ARxT|r51v94w2P+BdG7AfcG(vm? zTHBvS$Q)5&J_R3fadBzJ2o@J5j))NE^uRy`VSP4XF_9K+ZP4ff`~QawA%x5k7UY() z7ZMZ{VsvA(k_4HP3UZG&i-@oYG^RNJKOpQckbAtv#KdHoB3Yajxxz!3GJ}KFg>_hk z1w@)5{!0IUo8be)CP>PG3}JvKbwCqwpolV81|1GuSntHi=_6_)%E`m0!mp`kvPoD? zyj?^jnU9}e-6O!)7gR5RW)HqFY=O>-X@crIMD+z}^nvEXK;3T;2A%c^T~%e8%fnN{ z&CMyy#>FZiEC4#hP(WBfEkigyUO0f0PngFeCMG5(#a~e1{ScQc}nn1C^%#aDbMS44Ih7-I_6Iu&^YHBrg=t@!0FoLqEaaFDw z6RRL-$tjPVkgOz&oFa=miyHV!M1kW4qWrwve7t<(qI}|dTEQGb0zz|S^raafr#yn@ zm1MwcCXvsGR|YS^g|(AG?IdV(9Xz0Xo{>kALx7E0h*3~nSX@BKOw_zyh>2T}J4J|% zO^~&JE@WBmR54Q@d2V?(12JJaIbk(MRas^^S!QV!CI#^6?>E6ChM*l8NXNZ{Vg@o4 z0ovIE?ahLk%Ah_b?4*%>vLey~l7iA!imYscLd>EpEYhNCYQ_rejGzNWctv@9dE|72 z_ytrXd4zR&dDxW|8HIUubcA(nfQcnDKkaIlK7 zHfZxp11O!cfY0On#sE5R98^QQPDKx<$@r?(k^=JU+i#jsD@flm#FPV#{!`(P7&pe;qu z9T}ONSe#fng!u)hIYm=d4ndY!vr=pO9u|Pw^rplrnnT(9Q${aH6jEteeBEl8Petv%3R_Y=Nshm=x z?3@A4x*VF`@lN_O0X8<8Vqy%83@PA|jspyukR5Z7%P7HZS5RukX!V2pU}n`KjLZT& z7NE|$wzh?dmKGnMEUS!!h!_tmkD!<D9p+$BqYYG1e%LZ z`+psL#;!PnJao(na)vEvJOt!B@D3DXQ4w*_Rs~oY1}bqN=OTeB#ZN*)+zLD@+>E>u zp!_AuF2GZ0$gV6X!!B7V>Mfe!?d|QoP=H@hgil;lhMQNInJY?~Nr;D+)ku|FQXx2# zk1rE+*aWE5%Ln`aAOjl%=)5h^Oa>_Hs;fbk(10hiphx_&LHus621*QSrp9dIAeB&s zkQok$O7OHVEcJjCZe!==;pAc$wP&(n;o#@w=i%ewU>0TNWs~9+Rp5~qP$tl7u&&0^Z%gxEp!NtSRD#RinER@N|%)!UO&n3jg&&9|KYN2q7aVv{)bMbR> z^9i#GvGNLlPt=J4ufg699f?(e^vB>458kV1Yzj_ppe8JA+AP08TVG#I*g{xYM_5ES zJ1i_rTRYgoA}G~SN?1CKk1tHxNryvymb9)^v=XSqXaE0*AqILAInEZ2kRY#=lc=bu zBx3-JoeW207*l#skb;Qujc#k$Ha$J!AvF%YC`-xg1oUp+(H6EQ>Anz zBy=T&h4ow@HH3|@usFMfESr=9n}RrpBxtoBXsyFLhV9^6OCY05pi`%eMZps^;79|z zMjg~H6E{}|jZlK4&e&9&Nz_;zbU30iCG&R-LH88M9my*(#k`e`zilFNhg9HSHm>30_ zxdhmlMFa(c1Ox?=1Ox;W!K+M}7$D~aZ)Z>epR@`JInWV9pwxso2@4iBpil%grJ%#$ zAP0ksM^O4I&Ew_ew*W8Lk>D2P5MW{yQRP(-);1L7;^mg`a}?!MC@Sel)OmswSolarrUke{2Mo1ce=8$@yQ3xoE*Gs=Jl(L1@NxTRUy*+lsm*x)Cs zgLaP#f=}FcgVcuV(B+Gu=!f0ijo3>Lss|wVT7cJ@nuAIoQ0y2(4weC>4Ry9V9OgEh zUNZbV?EIV-{2VL-th$2SJOcc2f+A`xtb*K}f-HHAsvN33+?*UjoS?-kQJjX{hGwFS z)@FiwoCYF%2L(Z=;fQkx3bTuHv+?k=^6|5Z@pAIXNs2OaaIgtUv+{5XGIPlDaq3<$p2kX8_&)3_05ha*8;(5eYhy4l)R&uFl48 ztOlO$F;-Itl^7rl+NcCdbD(H?7R4$dEXxi$!&E?@kIj^WONoo$fQu)ApWDLOnbE~1 zM$|;q)5JtaU!GgpO@&oZPF`L{kj0pbi%XJ?i-U{Xgin`G&y|!XR%>%6z1Vj108S8p;@n`uUe<3Ud+ZXYM{=@&!?!!Bgo7W1wMn0L!*vg zMqE`$P_PSh*o{1hVBloP1&@txhu#$lIY|e0HX+Db#AFy`W*jHyY6>erhS!P9kCOJ_S32{bIDP>R_1r&Oqd0@~PMW8kc z*1L;EU}x5Vt~`eodm@mMnO#lY1hV>E+0+;;2HI+tWuYV`C8{ebEv;n5$jXhFxv}8B@E!(r22fpL%HY7@#^A-^#}EPCoEI;`4%!I`Dzd@t-n5uN z9u9F%A!ZgQW+pv5CM6zbCP6tl$PV!seNh&61w$DQHa-P@etjW6K_+4DKyGe+CoX2* zz`(!+ULHPPVQHRV9$^tF7Vz3Qc_}_7rXU_cNl24Nu$hgMgPot>jE{>)fRk68lZ}~; zlTDw?mXDo}R}d6ioc|x;8HoY!j!+gA=I4>H0#&Ch?kr{!Tv6em5fo)%eP$s(A?OIo zjQ^k$o)0j9`lYawFhMJTQML|(A{umhp0Oz;VV+V|WfWjxWfm0R=Vy}=kQWq`0@UnC?liHBp}8pEW#uy#0(zshwPaE-GB|hZ5Ub~gS-V=)&OcfLkb0Ws{))8mDxdK z3Lq>3YD1bq@*||Pv&GIrP?J|fgwKdukK4$CQD5IghM84dU06_9Rg6>CR9~N0k6oTM zRDhjLfGviTMUa(4P7t)SU0Rw~h+ABcot;HcNRXFT5Ojp9pp>AHAPak>6rUqIuMjIg zw-7H2_`Wug|F;-kF}Q(Omok9c&Y%GSF>s>;X8}vj66^~2eiIl z8QhXVv|`}rmcVLxP}vS@141$tI6T#rMa|fa)j_$)7}OjyRo<@(8qxt1YNEEHB0Ms( z`ev%CqVk;V{6d1NDxhp2XzMws z?_zEOZmcVV3Sy9VKvQ9$^a@$R1xwnd;L6w76twIERGOKChMG*3l|{`!t(kanZgxHa z4gn5UMn)4hHeN|iJ}W)}UJ-U)PDVivX3%YFY`hY3jEYK(g2FsJ!kkh(GOTin?Cdf| zyqxTeJRF*=EZXes+D1moas1ruT)cv8{A^6@9Q;DuQXz`c{30Uk9FhupVrLI=va<2< z$8j(*fjT67Jlq1D{G6hKJh}Y*uADqVqTK9~T{?u)SdIICjRCaEQiK7vlNEBd zC+rS5@CH^;B?|H-Xu<{5YeE$S*X__I5-4<#yPw%I5?o@UjJkZnyo~&OyzYu3+`>|f z`h3ECOzc9OMupI8{oIAvMP)g}T)4&LI2CrW^Kme;GcyUQs7Qzi@+*lkvh%YuF|o1; zs;CHva0)A}%Mj${=i}#96#^YMB`(0pA;<=5lZ5}j4PHmW$6&!=!{7k!Nko9w&w#fv zgN`%@6*bVE#Gn`gPcDGcC7cZB!H5V@zKQ}Wo2TL>;7ne8}7gwUNFh37JKM$zP*^gna_?pmo>P|6ej(W=KIEn+L@_XqpRD9D)l$Xefc$AWJ}2f-LF*Eq~zw zEie;cVipz#HE2c5K%}6cptv^+3$K7Q8?OK(2RknxFApz2FSjqBI*%kj0|O8EmbtGC zpxZ1#>z|~dqjkneYk=5IVG~v6pktE2Q3FYH=Io-%pu?9TaR?CuIn7)gA|h%m4po69 zcPv&^q*+K*RMZ#>R0VaJxH+7}guy_C&6$mZiAzwA$pGB$6^&yNV6^4uw`3Gx9X}rPCIO3v$NUOL8f4fyO#PH;cD29EA5` zK&KW!{R8qFXf6Y~v3hF2Kbmt;?&b() zFD4@`#UU&rDh&!FuKza~Y8eh8a+)W>HNZ zWhG}OCGZs{<|X3HA{k7~T*8)+(2*As;}ekK5K0yiQ56ytXJuey0G;Xs>Mem*WvHox z{RU}>fFlH6n~RCRQskAE7L}3VR_0Y?Am!Ppc$vLR}0`ngzuLx`14 zfL)MO%S&}3C}%l4L*){&Lfla&RnN-YPEBSXgBA+-`{XAI;n89Pv`0=d+N z>?j8fCx9@hAqZZl0y@(Vw9->q6ntVhcrhWwmv0N?1qB4<1Nj{IgZ@`85oEf8Hs3$YJqSJsQn@= z93vvEsVOXC2Cg5?KyCuBlgkF*V}AftN}7Y#2txaJpj0dZI&BSpl*}>>VKD(oNl`;K zPC-#_QJI`%18x}y9Wh~T?Ro5+a%{5V;(ZLP4BY>3GUSo%13@M5DoG_JH8oKU4Sp3c z)Q%AXjX4X&hze_I35%M8-45{wsHD#Ww;H!GaDs321&^_TJOV27MZnvoL2D79EkaNo zt5jQ>#4pUR>?JP5Cd{eAuD~fQqA#2fChQz+#HJ%T*+*QM)1;Q2QI z-lGdDfkZ(`oQ)m4Qc0X$9kjyK%v`xIG`-k{mDik&OAvJVWD+BjFfY6Ed|_cLVRa)G zF%ecdeO5sZE>1>$9R?=v7UR+Pn#jf@z{a=KLs;0AMTlDnl(IqVF;mG- z7sB#NO2P^X^70A_!m6q~@?fYL2T2!k!k}~kx({AhSl9x*XbiL-6I4TfX4nKu6`)mi zpouk515yNf!vSct6%@K4abr_u(Ofh0c3X2URv`{PRwhOjE`C>jE@icqGQz?#6M4Bs znK{ZL9D;)#BBp`re#l(Q7I;2o0Jq+hKq(DW-ocu>kW{A*UhM`d^~_Db3W)Lx3G1?O zveikjuro)4Tc;dSLPDF5D{~7m%@!73&&(_}Rax0gNy${3RgHm}0W{VKs)f`TbinnH zsj<1T61Xr0wKhPB5!6pLf-U8M9`R-_0vefP2W4l`N>e@+Mh;#f86Ht?D@iRCc3#k` z4oOj7V?GluNk$oIF-9o^cUeYmel8hBRuKbtD|SvHHbHT5Z4Fs|IV}}V4n;){P60(w zFQ)AOP4EsFR_KWfpfPypiL&fyB^6{P5ZDEvNqKW+QEMhsWp)U4f`@~Pmm|W!*jUuW z#DH6zjfa&D zn;Izpfy(6^vhyFfTvk$2R8&y`m&<(0{3?8S%ViFRLU2ks$iT@U%pl943Ll?fK*R-t zrH+UnPzes**a@nOL1RlGx{!}s5OndjAh!pY#lt1YW5LTU$jQycA;_g$Anauzr7sP_ z6C@!(^PCmGd-^Ku` zb3uD9!C?(5FAx~gz6KSQU<_SI18OUP+y|mR3ahB8>F8Kmikh10=%}eF3!6#mf#EiF zF>yiuKmkD|B|(8eenD|D^-OR}Kp#wkPDx<@e+OK1LT}L$H&q4=w}Y||y!HpJO$N6; zLAQY!v$4C1a0m&A3#bUI3G;F2acBy#vIsI;u`>!XvGF7sXen^18A=L=hYLrs35p2r zWfqrZl#-Ma6_;UP1>aiwivhH=4$>k5&HX?o_S8TVd*B`Ipw2Ax;C)ER2AbJZ2CX=S z-eRLHnyD)&#;+%!D$FZnZNtOIRLaP~#>d9Z%p=Sz%%j7rz+=youc4`>&a0pyE-Ea@ z$J1Gx2AZhgkx^AuSGV>7&9#6q0~;*qKaIi;w+k=l@Wq`qP&tyY*MmJYHGq3mW)Q?%q()E9OC>^TxzU>Ow8hJtbEd< z0s^jrLW2C#d;%PT{DMOKyu7>upm7%gK~YgqOPCWR%q=F$sm;kDSkEgc#4W(U&X5US zd3zANb4U_C;sVNDkU1MRcF@*ta5IPvbX=zyXcHNz*A9tGXy_S(6lCfMi3sTOtBQ!J z$eQyDa*KhkmDCa7W8-HM6V?9Ci2QM}Ot(pK8#*m3GP&xw*%YqMo5N8J+rVqM^ z+L#@5S<{;sMn-0)cqdK|HYs5_E=4g>c|JK2ULFokPGKH?Ha z;w-~0C?mtb!2oJ2bud8gg_dT3%pQYw(}8mXC?kMInn0Za_-s3tu3mlsiFcF6xI+_6V?#y=jGz%97T&3Qw{#z4(0V^L+$ z_%hhlpkfo8i68+D8r1`pD4tUO1Qj6a z=HMg;StR&W)2z`a>XxEQ;HkW8?h-5e1?&@E5G zuIBtaY}|Z&tb%-eLMlok+H696LM$>Oq5@*(f}#u@44@e_P-{()0W@m|T0f!AU<=-P z0P6n2#;`$=Ckkp8f_j;t8DUVgfTBl)9Xh;?c3c~%C@3otb+E#oqJj#n;PyJG_P!1ti-(oOpt)kuonZ{%1-GD>1YuZg ziixv>M|6<~+s)O@L9@dUC7`MdGII=`CsKQw&Ss#aV`L<1V4%a!#vdUmsV6BZ3MM5L zSy+{PLPaGcAS>QNMR<95__&Q&g_wBVcm(`USJb4Io zS2w6I1=Y`>mH}sG{I#A*RRbt?!N1#PW zpj&r96)X7iF=Nm=Hi&Ov7bC29kl~hK=jHO^{eVGa&14o(Yxetr`ZRWUI&HeP-fUTJZ04Rz2$d0A#z z5ms?QR$*}#5m3B=>dKGM-3^d+IH0rdAtgDui~x0jkByr}NSIGpP*{)II7b_Fa*wu* zv9SyzXw*#tMDPd-nu{_C^C*~^nVH%92{Ldq@G)pJd}TPqpupe=p7%&)$YjW6C}yZ+ zsAp(l0IjQqWFB=;c@D~0kdYB+u?wc~D@QX2XFxy$PaB?v5^KtVtv+(h=2n#Z^3i7iNkdJl-tuo~2 zcIE*EK945oEIV#hFe%Q=FTx}!%qk$jD#*_&%+D&!!z|Cl4;@oWAiM7-ETy0zEGH)| z4ceur1TB7aq6I;vi(s@6X!KtQG9Cy$+y=bP@fLXHJ!HMGE`tX{95`p1nVPd3i<*mr zM&TiAJIuwzl}*6w8`acB!F2#=@hxa{jEx-}?GRZrP@;h75H|;9Sy+JtY07|Fh10kh z1(<|bn7H^@IXGCD`B^!+S(tel6`9$1xwvHcKtP{^n=z0>fSZYjnTeNCg_(<;jhByu zg^h)em7RmbSd?E)P?cZbQPf(KPf0-8JBgcvQACW5Nrg#5l!IS@Nm`0gSc;j2O@L96 zhs()AT1!e;gptcZU4>DYQCO0Ng-w7-K#-rCmqk#BNnDgezRSr;L6TQgN)S|g3h{}9 zdJZxF?=bve*ukK|5WoPsArQQj0NiDO%yEdbgGw)OGXva*QU{Gint_JB!Bc+_m7pO$ zh(eIZkq&WJQwI%=L#j+jOXh7MBOg1jFdG|}v;ZeR4-Y3N4;w!#7Z0Bx2Wt^O8xJoZ z2d5Ahmy|H4uow?39~bDDcP7yI9~j$+2rDaVmkaF>4CLk%5(8cE!OzUj$123n#UjMY zqprxq&*7lLA*QF76s4mnD9kP_$uGdf%gVvaF2XOt&&>n|%%B70nVFfav~2{0C544S z=dl+;Pf}-R;02Aaf$A1eR6;sJprI#I&^S4`*$)m7WmDxhrADH9$wI6w!pvfZ76I&_ zi-;A>3=BjKrwB_*$}30qr(!W%TpmIhu01zB|kZFPX|tAVWF z2W`IqCnk1vb5LarDeF_hl|&Vy%)oXCD>BM6sj$imh_g#GDKe^Y3$ZW@GlA^%mKI?Y zlMq&97GjZB=5@Q1G9bE$VBj}cONbB2J)EL|s1vO~FWgDnf2Evej z`DZ^_Q5i#NX*oSMWEFkO7S_-QQON%gxN(ie8Tdrpo5MvSs`H|=U zO@=72ALSWT5i=7AKZ24I%#WtZ5FduQNs3B%>42~P6O@%?l3|n<6l0QPl9AyQU}hF% znk+0OVR-Oeac_thR9!4s{49pDk$OxezIZ=62 z85spba0rPi%E@UH2q7j0J@8y`2Lm&Bo&wa{0pFPpjsQ>=Lh7jnHZD2n&&n;q&nF}< zq`UzLYpw6-#tEs7Snk%EE4zC#>zp((n6dxx$v%y9QC2KW7eLX{MUS1gy5lMbt z(9Cc+gCO_>8<1V#y~>ag?iFgHJ)-Id<`lKI7R>?K75x7X!#jq}3}T>`A}BdS8XQOq zQi5I0TPz$Mc@;SXcvxL?Kx3T3E?j(|`Fb1B%!oS!GsA1}Z55zXN7Zj9Z%i#`TcjIIS6+!|bYy#?PP6t_dxrKQ|Ih2&e z>^WK3g}DU<7`eFwLJTTNOteBO~E}00t%o_y2zx-ZJcC;AQ}wHed>J zD7&b+C}yy@i;}28Jqx!WCtC)$n6OA^9Tz{N zC@Wj?(j5$p3|`G75Wk?Hhz_s1n3y=9 zm>3URgoL0--x38289@;qAweM_VP0VoVIDydAq7THWlkkWcTjl~@&6w*h46z{SHM@I z8-o{AgZiS6twHA=i>g_x&4{zHiPO;V23_%E0n+Wqz|QcLVGDR4G3W$CqT+`Y0$k!!vwVcrKxT(C zFfqJf*ulUDJ_iCctHKUy;DX9^P$vt7O_fDohzN1;va_a(rrT(W?U*OVB+A0xykN6l zSeUbc0RuCGGXo35YjDpG)TU-IM=TxzPn&>N*nry5pzU6up2KWL9w`n1E=EQXMpa=a^7PHS!kxzg|dZ}1swpxHCfEd-$AAJM@D zYXL_jo7P>@rQXMu1fq~lsBD9o**!5qV; zCe0xy%_ghLsty{Nj$+_vc*d}w0di&}WEKEgfWStgKn*TsQR8Pl)}l6nYHFhD>Y{3D zHtOp9t=ihcYHF5hYT&SqXW(SG&#;dHbZdtoB62#84Vfo~mhVPIqc z-ApaUpvb^r4&EgRUakXK_y;O&*w{dWm*(J7QZzyT}(zumQB}yQHamTO=XuOm#_?%v_L5X3xn_ff8g`;xfwt^ zdqC@Iz&RK)MgXbZkt6kutEhv6sH+J-7q0+!gb2T|fKZH}2$v9FOeo}R)=(n72v65yTBqJBK0GF+guhJyb81&0PJ1L)3p z*bE;i!GH$JVNE)?6O=)o5Mj?3WakiKlMCWx73NiyR#q0(Vv`e;VpCR?i`HP=$<8at z&Mzn~z^WvyC+y*&EyXLYD6FTar^?F0z|7#qzzFsu$bX=-agZt^FcY)`1e)?ikt5;= zWSB^bM?#oiSkq3_xnGctSBS4%h@D-SZBhj!cNM70X(@7vXeg_KPLz^kkrQW=5NDQ9 zV3uWIVF+U2WO&1{89dJhY3YG-G^G8l3|iO?$|0c1U5Iy$K~ove(XYwezi`z-ctzRYqv?9vq|1So}S$!aL9s(BO%9d{eF=OC*a%1PF+#Y4ZvS2=nmq2?`2{EKaiJ5aJiA6V(vOQ&HgI z=H=(*;p5{MWMEWkpxZh< z7?{8(E{lS9S?Ge!+XA1fNaXJS52A{qq7pJZg5vDLoWcpBGJL8m8eGQu0-)35TLkz7 z`Gus!#g~QfiShIES%QXSX2mJ!3iC>8iVMg_Dsl2la>|Nui3{)uFfcRtGH@`wVb~A5 za|$wB2~PT;gkTD*~d&StSMvYcnu1 zg#7;o_8H{#dr$=gDajzsGiC5air~{M*^NKAsfpUMneu3}TZpPUs<5&N@v3pK2y<(7 zI%(Ufiwg=#+i5!q3-Gh5hzPJKFt9QNGBAR3D`=IR9)l4B=ss%5C=#e}0H+9OwneNH z1D9?nlX;+uKhoOSSyX|8laq^wQ_k6jhh3PBn}Y>Zqo`S{+o)NqGuH|W%E+*@^09Gp z3kqj|Ci7U?Ih2%CBf%q-kdXvX&E@z19|LHQln{d$gA}wBf$m#@*5{xw098Doh9{)_ zg4CA}1w}ac*jU0u%|sPIRZ*R^0I!fl0=KXPuV`C=IHM>t2d7%Al@-XsSRsBsenB~Y zUSU2#kgXvMoZ!>?K&2}vFN4q02U#ErDm%cr8NOW!)S80sSOPgCWQwjiO3v@(aB`DtdZ9ObRcAt&ZwAgIlyBPJ@M$)_r+@1W0G$gaS~$Scbs z#Ldj8#G%b1EWs}%!Yr|skxP)3SyWJjM}S98NkvLnkXKkxgeh1?jf+Q^g_B!GMuv}% zOH6`+k-_`_FYpRjP#yw}7K%ZJU%<5`sI_7STHXap$mYWp38TpUuR?F7}ee6rH~Y=T@)PNEK$qTKv^!f8Bwg1r2K9OmrGT$1A4(wq3$czL;0 za-@X0GlbREg>{7ZxcLQT`8Wl6`P>EM1R43c#dtyed-wl87~U`(WYA_X0OuG;rvfs7 z11eTA$5)}JxSD}3hGSC~2aQG>hx7Bs{5oBW#1D!RkE6ym)E#~NG;wq%0%^{<$C@lh7Z^XjFz{24E{|~qh1l^RN z4ZbS@HYX2B!k~rM(7p*cd$X~d8-t<^vfT+>QoEaoiU?cq^7AS>I56^nPQ74qa8Tyq zlMa{R7g7-56A~1O;TIAV5U5pDQdSV)cZkeoSecU5)#o|5`w&fT--up zT;N-zLm1c?K(|6LGvHWh11TFpX$!%EmN?*i7u`LHpBJ>Lhnt^QRsh7}cR zWd)@KqBsS)co?}w1?2ddSh@HF_yst41-Upl*@VOe#nS~jI0d=A1UXrR*bYcLa2m+- zDM-po@=92EEE8wsm*D0S5a5!KP7*QBD?NR(8$#TI}qC9PE5c zgoR^0gq0k`1(^j!goOq9+4)6SK)EfDfra5E!!CGB6Vh`4jhrB1SPhn$**K%EtgMW! zsYx^oa*#F-QuNbz0XO}>y+k(!)1f7Ebo;U(8EC5g6j0_(b4l)Qc=rJ&ugSym^ys8X2bi~Y*9g#mk z#{z*;9%L-lTy&9B!Hj35R!hF1(b!J!K3`y#Ck292PAuqbpU@J>aAsGpzm z3@0Na>mD0pW5)_dVd++3F;Fy#2#SGv1D^kXgIfd=3^K6#5owSZ;d;mxPf+a)8D3o} zDyGh-BBpNP>@4c&Xz8bHp(4d4BhD@6|hJo)y0vHYc&JilVWBLzQkEf+$>LkSBQ(pk&TT{NPv%Bidl+TP(VdMl1qzQ ziBpxy+>2dYM2u5XQp|{5SxlW*Kvh^s#g2(dRGfdNuo#CRKQlWUm!K#oJEIUYGbanX zkdQE=0+%4WAhWQuybu?UAU_W;pD+iP05_k69EUtJ6FWC2sFm*e|0ly|hQkbE44`!v zpt&t@zZ2qKarpWb&K6p!1cyl1zm0}X&!Dy9v&Wf5kYnzZfOZEc0(pB zJ^>*c7f~lCV`D2TQEO{cQ(!w!WfkPL8BUwm1>~%$e=_AiZ@uogN^2(ulk6xaB>oLcDAze^b~b*QMORE0^wjj zP%DZrm`_+nMwrhKwCqUG5Hu4Aw$Yn`o8cqFUeFvAgE%;qGC+z=NJC9r*%UOD0a|aQ zt`4q;ltqo}_$8$HWSn`$rFa!2GDLaJL`8&5dHFeH1%##iot*aa$_Vfaa`N*^^2^S2 z=HpjZR#Fh)ViS{;5)}rY`s4|2Cm)2a7c>Xoa01%z0WRAS85|buAQ}|(pnykgnuBB% zP|IPP5D%ZMm;jH267-BU6B8E~V`I>Sx`i?b6!G!!@NQM@&updgea6*nihnkI`l4;M2hm#~zuw6L^rCzt~D1{s*aEnIa5b9iqI-g*U< z9uTiVlb?vVF=#0=s1QL;n4bic1XP%XWjVxom{pvNj6}`NT{M|RnHdGyr#l%Ki0bM( z#0UzC2@7+IuyXMTi+~pViwFxbGqP~AqzH?FHU)_>Ff;i5|HJTwVLyWm_=Iurx;;p; zKq@yOA;QKEYJMPhQ^9M^Km!=!%53c7W@{Yv1=M)71w}>F`ILoq9Ymx#J+(NcMFc}N zSUJT+xJ4yJ4Y-v>G&wmnP1slkMbuc?lsP5~itq{uODii&3G?#_3krY^4dNDHV~!CN z%f)()kdUyTu&`jQyu7fe zFgG_V55E8p8#lKwXkAng0|Ucz@LFxeNG7Np1C?N+pwt2yFNS6h=rVC*Q2Gs;DwLNe z>f)l>+Z(8^E(%6A>gr1c1s#p~MT^4)MMOZiG%&C+c>n*)@Cm%C4|IBn8G{3Z7xZix z(BvfYO--_=l1-X{ z6?B&ecoqp#5<~JoXn71cse_U`Xlnpuh})bEypbPrwg9LU3iGw)kd$P!v}82Q(_l1Z z`#Xb=V?*=xHWupkslM>P*lz9p>Os4K{Y;cOGo)f*hiJyh7qanmkf`tU~f!BAi@| z3ferzicHK*vPwLfk}PbDLh?L1680KgLcEF`EW#{o+7sB=1o-(tM{bHr@Ck6SDoTs< z3bC+C3-XJ|v9Ym8@$n0Yv#>I9^MEp?B)ftTFDnlps6KZF&v9)Bk9mXIjG*kr4!TGI z6eR4R1F*qZ9pXe#5JE~zNFDm7jbDVXt*|i9QbWT~j7^ALo{d?EUD{Ab$J|`ha=VF! zffl#CL5!eKz96Wg0G+kO3T6pPNPxy7AmeDDbHgBQW)twJyC|s9jF{E{FOmRX@CZJO z4dfosSSl#f!!rLpGZ$_)K{jqyW_^AZel|9KW)CJsT~Q}9Gerp89?b6u8HmvkXXIuT z5M}0I7hslh4dV|6Wey=B$QeMOeu4l0Ukoo95WC_)V?j&dVdj zDa_1bI+agGR9u}=gPB{FLzt71NkmFOBE*`FS4M_coI`+>Nm-ehUv;K{h=8;b6E~+c zsDUHR62dJm%F1Q0VZxoZ7^t52eic- z>=BVkv06FFmf6S-|_qC$ea9(UZU z>UoMW3i5D)ZX8pK*8uM-2c7B`^#2dTYla;RLP)1Rf-C`z-66_R&;T}Q--f6$C{{s5 z`L%peks@J!Ar3wkCSeb0T?q+hM@M04>4@kYfB#VM7+$xXx}aFFAwP5t1ZclDXv~?L z0o1bsk7YnwapIzEkedWR%ZyBwO@(>+h4=)-z@#FhylfRqg{G7=udK`_ejWinK6QQ` zK|X$YcQz40NqJs*OHj|p;1Wrw$^?is|8>j*lN9`k-gNE^x zpV?_^2fG^S>FMjs%gf6-GYNvOFy!TvQ zr_)M;_i}?q+dyY~L4p}n7J#k~6N6MJ%53c5iXU_Vs4}jh+Q)tDJVJs3%&ZX{4nACh zg4`_3Dbj508Uf;(+%CexHqv~;Orm`JOd=^lLSkYmDUA7?f>PrEl43l9%*?`E z96~~zoI);q!V-MET>Sd7LVPTG0-)AfAOkCS_88Jj2CZxWRjY{Md2m~Z-59*s4OURb z8n8I1F|!D9sk1Ovqhq;>)~#++um7>jyXS~{t)2{ALPvoZ@a zv#Qz|8@sxSdTbB??;;Vb1$7|Bn7R4*xL7&4Ks`!9Nl8%s1R8&M2c46GoE`(N2|&#y zb7N3OPzIMVU`K&t9=w|Xni|AG4Gd*b<2UnEnPudeMVZ~jQ!UMc^-N9e?L`B{1ibBX z!o&5{)LQuk_<4Ed1+?{e`Gxp}h53c}dG+`Ow1vPeQ3fV(7(ja4Ad6tzGa*G9s5S(L z3^X~y9RO~bvV+2f-T0lWJrBDW8xJRImZ*b^i>Rx*g0!@#q@vml4) zEP+BEZeeE5u+k0zVPWBP0YN!AK>=!nW?{(XHQ|!-@`f@phG0@kTAJU4kDr&H7j#Pvlwrcp$;HDc z%*e*x#mmpD!^On~x`>*Ak--l<8*~tKw<=`aFvzjWpgsn8`8PQ1zzZ_LWeKFe1RC2w zw0}&EMWaPkot;&A_&L~_`ME>|nc4W+ShzV^+4x!51-Y&G6*%=3_&A;9y_u7Zot%_K z8C6AO1w{n8IeAzZg&CPxIXF1Dn3y@(Iaql(xH-85LCrl29#%mSL0J)1@M+zI{gWJoX65q^R9o)z;XGa?~GzN`bf*b@{ zV0=$dT#1>5pM!&+kx5cijY*V)Lr{o|o1IOB!$6K*jGvR6m5qn1&4G!RZ*6Olap0Ml7)qZ$oCWNHVyxQiQUdH^3@i+`|9^tV3_)j*d4W&t1N#V)0>M$K z3|cJ+9&kf!2?iY)2fClu*pv-4XQ6IpDh|4(2r?Q6p3er2&VkOy1kVhag?d?Wh>Pp% zTQIQ*F)?b%Gbyr5g7yq6i-OJ^W7L+BkrI?J6c)}B5EBpvU0D|`%q_^v!v*d}aP#sA z@q&&CV&Y?FXXoT(V-Xi;VPZ3u=aAPnRbn#tQsz{0;$Y;@5E4>XWoG7M0j*0A;o;@r zXJBUV`2Ujube}svgBEy{7o7V+c?dF$B95|~0d&U@WLAq^OdOQi;y@i#=h@E2jS5nt zLK=K(5?Zw;Lfky;f-GEY+ya`x!RrMD1wl)%7fAByn2U?>3rL!nuyC?-v2!tVva<7r z3PERKKr>ZJ44|D9cA!=}Xg4+Z) z0;{y37@M>puc8o#5DN<*E0YitD}R890EZ}(46~>pAE&6KBxAQZ8>^n9k{GYBgrlC5 zusk!rFzDbd0b$*RQlh-FN^+dyT8e?fN=jjhoS^&a*cd$i{{_z&fmU*X&PfN23xd~< zLBb0%HUsNOz*-lepaRt}_bfb@dsLEe?AR z&R`iX7GXYjA$BGq7E3|U_yJ>siHnP}Xp5+li;MX|AzmRfF@9DRc~)LQ79n;v9?-G@ zL2*HK2~AB2b@0wFhyQ;VJ~JF*;AhYW@2 pGXP;$!gY2T-F9+#LpuLxXZZC}u$8 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 literal 0 HcmV?d00001 diff --git a/docs/html/guide/appendix/media-formats.jd b/docs/html/guide/appendix/media-formats.jd index a3cc0ff09692..db5a15e10126 100644 --- a/docs/html/guide/appendix/media-formats.jd +++ b/docs/html/guide/appendix/media-formats.jd @@ -2,8 +2,9 @@ page.title=Android Supported Media Formats @jd:body

        The Core Media Formats table below describes the media format support built into the Android platform. Note that any given mobile device may provide support for additional formats or file types not listed in the table.

        -

        For your convenience, the table T-Mobile G1 Media Formats describes additional media format details for the T-Mobile G1 device.

        +

        For your convenience, the table T-Mobile G1 Media Formats describes additional media formats and characteristics provided by the T-Mobile G1 device. Other devices may support additional formats not listed on this page.

        +

        As an application developer, you are free to make use of any media codec that is available on any Android-powered device, including those provided by the Android platform and those that are device-specific.

        Core Media Formats

        @@ -130,7 +131,7 @@ page.title=Android Supported Media Formats X X   -3GPP (.3gp) +3GPP (.3gp) and MPEG-4 (.mp4) @@ -151,9 +152,9 @@ page.title=Android Supported Media Formats -

        T-Mobile G1 Media Formats

        +

        T-Mobile G1 Media Formats and Characteristics

        -

        In addition to the core media formats supported in the Android platform, the T-Mobile G1 also supports the formats listed below.

        +

        The table below lists media formats supported by the T-Mobile G1 in addition to those provided as part of the Android platform. This table also details G1-specific performance characteristics of some Android core media formats.

        @@ -163,7 +164,7 @@ page.title=Android Supported Media Formats - + @@ -178,13 +179,13 @@ page.title=Android Supported Media Formats
      4. L2: <=161 kbps <=48 kHz
      5. L3: <385 kbps <=48 kHz
      6. -Mono and stereo profiles with 16-bits per sample. Decoder does not support WMA Pro, Lossless, or Speech codecs. +Mono and stereo profiles with 16-bits per sample. Decoder does not support WMA Pro, Lossless, or Speech codecs. - + @@ -192,23 +193,17 @@ Mono and stereo profiles with 16-bits per sample. Decoder does not support WMA P - - - - - - - - - +
        Format Encoder DecoderDetailsComment File Type(s) Supported
        Windows Media Audio (.wma)
        VideoVideo WMV   XWindows Media Video (.wmv)
        H.263XX 3GPP (.3gp) and MPEG-4 (.mp4)
        H.264 AVC   XLimited to baseline profile up to 480x320, and 600 kbps average bitrate for the video stream.On the G1, this decoder is limited to baseline profile up to 480x320, and 600 kbps average bitrate for the video stream. 3GPP (.3gp) and MPEG-4 (.mp4)
        -

        Note that Windows Media codecs are not part of the Android platform and require special licensing from Microsoft or an authorized developer such as Packet Video.

        + + + diff --git a/docs/html/guide/developing/eclipse-adt.jd b/docs/html/guide/developing/eclipse-adt.jd index 75f3d78f4809..3b3bb38a476d 100644 --- a/docs/html/guide/developing/eclipse-adt.jd +++ b/docs/html/guide/developing/eclipse-adt.jd @@ -38,15 +38,15 @@ manifest and resource files.

        To begin developing Android applications in the Eclipse IDE with ADT, you first need to download the Eclipse IDE and then download and install the ADT plugin. To do so, follow the -steps given in Installing +steps given in Installing the ADT Plugin.

        If you are already developing applications using a version of ADT earlier than 0.9, make sure to upgrade to the latest version before continuing. See the guide to -Update Your Eclipse ADT Plugin.

        +Updating Your Eclipse ADT Plugin.

        Note: This guide assumes you are using the latest version of -the ADT plugin (0.9). While most of the information covered also applies to previous +the ADT plugin. While most of the information covered also applies to previous versions, if you are using an older version, you may want to consult this document from the set of documentation included in your SDK package (instead of the online version).

        @@ -138,9 +138,9 @@ folders and files in your new project:

        Wait! Before you can run your application on the Android Emulator, you must create an Android Virtual Device (AVD). An AVD is a configuration that specifies the Android platform to be used on the emulator. -You can read more about AVDs in the Developing -Overview, but if you just want to get started, follow the simple guide below to create -an AVD.

        +You can read more in the Android Virtual +Devices document, but if you just want to get started, follow the simple guide below to +create an AVD.

        If you will be running your applications only on actual device hardware, you do not need an AVD — see diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs index a044ceaecd3b..da4a2c33c5cf 100644 --- a/docs/html/guide/guide_toc.cs +++ b/docs/html/guide/guide_toc.cs @@ -146,7 +146,9 @@

      7. Designing for Performance
      8. diff --git a/docs/html/guide/practices/ui_guidelines/activity_task_design.jd b/docs/html/guide/practices/ui_guidelines/activity_task_design.jd new file mode 100644 index 000000000000..e2fc89c6ddba --- /dev/null +++ b/docs/html/guide/practices/ui_guidelines/activity_task_design.jd @@ -0,0 +1,1238 @@ +page.title=Activity and Task Design Guidelines +@jd:body + +
        +
        + +

        Activity and task design quickview

        + +
          +
        • Activities are the main building blocks of Android applications.
        • +
        • In addition to writing your own activities, you are free to re-use activities from many other applications through intents.
        • +
        • You can enable activities in your application to be started from intents in other applications.
        • +
        • In nearly all cases, the activity stack just works as expected.
        • + In a couple of cases you might need to ensure the right thing happens by setting a string or flag. +
        + +

        In this document

        + +
          +
        1. Applications, Activities, Activity Stack and Tasks +
        2. +
        3. A Tour of Activities and Tasks +
            +
          1. Starting an Activity from Home
          2. +
          3. Navigating Away from an Activity
          4. +
          5. Re-using an Activity
          6. +
          7. Replacing an Activity
          8. +
          9. Multitasking
          10. +
          11. Launching from Two Entry Points
          12. +
          13. Intents
          14. +
          15. Switching Between Tasks
          16. +
          +
        4. +
        5. Design Tips +
            +
          1. Don't specify intent filters in an activity that won't be re-used
          2. + +
          3. Handle case where no activity matches
          4. +
          5. Consider how to launch your activities
          6. +
          7. Allow activities to add to current task
          8. +
          9. Notifications should let user easily get back
          10. +
          11. Use the notification system
          12. +
          13. Don't take over BACK key unless you absolutely need to
          14. +
          +
        6. +
        + +

        See also

        + +
          +
        1. Application Fundamentals
        2. +
        + +
        +
        + +

        + This document describes core principles of the Android application + framework, from a high-level, user-centric perspective useful to + interaction and application designers as well as application + developers. +

        + +

        + It illustrates activities and tasks with examples, and describes some + of their underlying principles and mechanisms, such as navigation, + multitasking, activity re-use, intents, and the activity stack. + The document also highlights design decisions that are available to you + and what control they give you over the UI of your application. +

        + +

        + This document draws examples from several Android applications, + including default applications (such as Dialer) and Google + applications (such as Maps). You can try out the examples yourself in + the Android emulator or on an Android-powered device. If you are using + a device, note that your device may not offer all of the example + applications used in this document. +

        + +

        + Be sure to look at the Design Tips section + for guidelines, tips, and things to avoid. This document is a + complement to Application Fundamentals, + which covers the underlying mechanics for programmers. +

        + +

        Applications, Activities, Activity Stack and Tasks

        + +

        + Four fundamental concepts in the Android system that are helpful for you to understand are: +

        + +
          +
        • Applications +
        • Activities +
        • Activity Stack +
        • Tasks +
        + +

        Applications

        + +

        + An Android application typically consists of one or more + related, loosely bound activities for the user to interact with, typically bundled up + in a single file (with an .apk suffix). Android ships with a rich set + of applications that may include email, calendar, browser, maps, text + messaging, contacts, camera, dialer, music player, settings and + others. +

        + +

        + Android has an application launcher available at the Home screen, + typically in a sliding drawer which displays applications as icons, + which the user can pick to start an application. +

        + + +

        Activities

        + +

        + Activities are the main building blocks of Android + applications. When you create an application, you can assemble it from + activities that you create and from activities you re-use from other + applications. These activities are bound at runtime, so that newly + installed applications can take advantage of already installed + activities. Once assembled, activities work together to form a + cohesive user interface. An activity has a distinct visual user + interface designed around a single, well-bounded purpose, such as + viewing, editing, dialing the phone, taking a photo, searching, + sending data, starting a voice command, or performing some other type + of user action. Any application that presents anything on the display + must have at least one activity responsible for that display. +

        + +

        + When using an Android device, as the user moves through the user + interface they start activities one after the other, totally oblivious + to the underlying behavior — to them the experience should be + seamless, activity after activity, task after + task. +

        + +

        + An activity handles a particular type of content (data) and accepts a + set of related user actions. In general, each activity has a + lifecycle that is independent of the other + activities in its application or task — each activity is + launched (started) independently, and the user or system can start, + run, pause, resume, stop and restart it as needed. Because of this + independence, activities can be re-used and replaced by other + activities in a variety of ways. +

        + +

        + The Dialer application is an example of an application that consists + basically of four activities: dialer, contacts list, view contact, and + new contact, as shown in the following screenshots: +

        + + + + + + + + + + +
        + +
        + Dialer +
        +
        + +
        + Contacts +
        +
        + +
        + View Contact +
        +
        + +
        + New Contact +
        +
        + +

        + Here are other examples of applications and the activities they might contain: +

        + +
          +
        • + Email - activities to view folders, view list of messages, + view a message, compose a message, and set up an account +
        • +
        • + Calendar - activities to view day, view week, view month, view + agenda, edit an event, edit preferences, and view an alert +
        • +
        • + Camera - activities for running the camera, viewing the list + of pictures, viewing a picture, cropping a picture, running + the camcorder, viewing the list of movies, and viewing a movie +
        • +
        • + Game - one activity to play the game, typically another for setup +
        • +
        • + Maps - one activity to view a location on a map, a second for lists + (such as turn list or friend list), and a third for details + (friend location, status, photo) +
        • +
        + + +

        + An activity is the most prominent of four components of an + application. The other components are service, content provider and + broadcast receiver. For more details on activities, see Activity in + Application Components. +

        + + +

        Activity Stack

        + +

        + As the user moves from activity to activity, across applications, the + Android system keeps a linear navigation history of activities the + user has visited. This is the activity stack, also known as the + back stack. In general, when a user starts a new activity, it is added + to the activity stack, so that pressing BACK displays the previous + activity on the stack. However, the user cannot use the BACK key to go + back further than the last visit to Home. The adding of an activity to + the current stack happens whether or not that activity begins a new + task (as long as that task was started + without going Home), so going back can let the user go back to + activities in previous tasks. The user can get to tasks earlier than + the most recent Home by selecting its root activity from the + application launcher, a shortcut, or the "Recent tasks" screen. +

        + +

        + Activities are the only things that can be added to the activity stack + — views, windows, menus, and dialogs cannot. That is, when + designing the navigation, if you have screen A and you want the user + to be able go to a subsequent screen B and then use the BACK key to go + back to screen A, then the screen A needs to be implemented as an + activity. The one exception to this rule is if your application + and manages the navigation itself. +

        + + + +

        Tasks

        + +

        + A task is the sequence of activities the user follows to + accomplish an objective, regardless of which applications the + activities belong to. Until a new task is explicitly specified (see + "Interrupting the Task"), all activities the user starts are + considered to be part of the current task. It's notable that these + activities can be in any application — that is, all in the same + application or in different ones. That is, a task that starts out in + contacts can continue, by choosing an email address, to an email + activity and then, by attaching a file, to a picture gallery to pick + from. Contacts, email and picture gallery are all separate + applications. +

        + +

        + The activity that starts a task is called the root activity. + It is often, but not necessarily, started from the application + launcher, Home screen shortcut or "Recent tasks" switcher (a long + press on Home on some devices). The user can return to a task by + choosing the icon for its root activity the same way they started the + task. Once inside a task, the BACK key goes to previous activities in + that task. The activity stack is made up of one or more tasks. +

        + +

        + Here are some examples of tasks: +

        + +
          +
        • + Send a text message with an attachment +
        • +
        • + View a YouTube video and share it by email with someone else +
        • +
        + +

        + Interrupting the Task - An important property of a task is that + the user can interrupt what they're doing (their task) to perform a + different task, then are able to return to where they left off to + complete the original task. The idea is that users can run multiple + tasks simultaneously and switch between them. There are two primary + ways to jump off to that other task — in both cases the user + should be able to return to where they were before the interruption: +

        + + +
          +
        • + User is interrupted by a notification – a notification appears and the user wants to act on it +
        • +
        • + User deciding to perform another task – user just presses Home and starts an application +
        • +
        + +

        + Of course, there are exceptions to the rules. Beyond the two ways just + mentioned, there is a third way to start a task, and that is by + starting an activity that defines itself as a new task. Maps and + Browser are two applications that do this. For example, choosing an + address in an email starts the Maps activity as a new task, and + choosing a link in an email starts the Browser activity as a new + task. In these cases, the BACK key will return to the previous + activity in a different task (Email), because it was not started from + Home. +

        + + +

        A Tour of Activities and Tasks

        + +

        + The following examples illustrate basic principles for applications, + activities, the activity stack, the BACK key, tasks and intents. It + shows how the system responds to user actions such as starting + activities and switching between tasks. With most of these examples + you can follow along, launching activities on your device as + indicated. +

        + + +

        Starting an Activity from Home

        + +

        + Home is the starting place for most applications. (Some applications + can be launched only from other applications.) When the user touches + an icon in the application launcher (or a shortcut on the Home + screen), the main activity for that application is launched into the + foreground where it has user focus. As shown in the following figure, + the user action of going Home and touching the Email icon launches the + List Messages activity of the Email application. The Home activity + remains stopped in the background, ready to restart when called on by + the user. +

        + +

        + +

        + + + +

        + An activity can keep or lose its state depending on how the user + leaves the activity — by the HOME or BACK key. +

        + +

        + By default, pressing the BACK key finishes (destroys) the current + activity and displays the previous activity to the user. In the + following figure, the user starts email by touching the Email icon in + the Home screen, which displays a list of email messages. The user + scrolls down the list (changing its initial state). Pressing BACK + destroys the List Messages activity and returns to the previous + activity, which is Home. If the user re-launches Email, it would + re-load the messages and display its initial, non-scrolled state. +

        + +

        + +

        + +

        + In the above example, pressing BACK goes to Home because it was the + last activity the user was viewing. But if the user had gotten to List + Message from some other activity, then pressing BACK would have + returned there. +

        + +

        + By contrast, the next figure shows the user leaving List Messages by + pressing HOME instead of BACK — the List Messages activity is + stopped and moved to the background rather than being + destroyed. Starting Email again from its icon would simply bring the + List Messages activity to the foreground (changing it from stopped to + running) in the same scrolled state the user last left it. +

        + +

        + +

        + +

        + Exceptions. Some background activities return to their initial + screen (they lose any state, such as scrolling) when they are brought + to the foreground. This is true for Contacts and Gallery. If the user + chooses Home > Contacts then chooses a contact, they are viewing + the details of a contact. If they start again by choosing Home > + Contacts, they are presented with the initial list of contacts rather + than the contact they were last viewing. Contacts is designed this way + because this initial screen is the main entry point for the + application with four tabs for accessing the full range of features. +

        + +

        + In addition, not all activities have the behavior that they are + destroyed when BACK is pressed. When the user starts playing music in + the Music application and then presses BACK, the application overrides + the normal back behavior, preventing the player activity from being + destroyed, and continues playing music, even though its activity is no + longer visible — as a visual substitute, the Music application + places a notification in the status bar so the user still has an easy + way to get to the application to stop or control the music. Note that + you can write an activity to stop when its screen is no longer + visible, or to continue running in the background — the latter + was chosen for the music player. +

        + + +

        Re-using an Activity

        + +

        + When activity A starts activity B in a different application, activity + B is said to be re-used. This use case normally takes place + because activity A is lacking a capability and can find it in activity B. +

        + +

        + Contacts Re-Uses Gallery to Get a Picture - The Contacts + activity has a field for a picture of a contact, but the Gallery is + normally where pictures are kept. So Contacts can re-use the Gallery + activity to get a picture. This is a good example of re-use of the + Gallery activity. The following figure illustrates the sequence of + activities to do this (up to crop). This is how it's done: The user + chooses Contacts, selects the contact for viewing, chooses MENU > + Edit contact and touches the picture field, which launches the Gallery + activity. The user then chooses the picture they want, crops and saves + it. Saving it causes the picture to be inserted into the picture field + in the contact. +

        + +

        + Notice the Gallery returns a picture to the Contacts application that + started it. The next example illustrates re-use of an activity that + does not return a result. Also notice that the following figure is + illustrates the navigation history through the activities, or the + activity stack — the user can back up through each activity all + the way to Home. +

        + +

        + When designing an application, it's good to think about how it can + re-use activities in other applications, and how your activities might + be re-used by other applications. If you add an activity with the same + intent filter as an + exisiting activity, then the system presents the user with a choice + between the activities. +

        + +

        + +

        + +

        + Gallery Re-Uses Messaging for Sharing a Picture - Sharing is + another good example of one application re-using an activity from a + different application. As shown in the following figure, the user + starts Gallery, picks a picture to view, chooses MENU > Share, and + picks "Messaging". This starts the Messaging activity, creates a new + message and attaches the original picture to it. The user then fills + in the "To" field, writes a short message and sends it. User focus + remains in the Messaging program. If the user wants to go back to the + Gallery, they must press the BACK key. (The user can back up through + each activity all the way to Home.) +

        + +

        + In contrast to the previous example, this re-use of the Messaging + activity does not return anything to the Gallery activity that started it. +

        + +

        + +

        + +

        + Both of these examples illustrate tasks — a sequence of + activities that accomplish an objective. Each case uses activities + from two different applications to get the job done. +

        + + +

        Replacing an Activity

        + +

        + This is the use case where activity A replaces activity B in a + different application. This situation normally happens because + activity A is better at doing the job than activity B. In other words, + A and B are equivalent enough that A can replace B. This case stands + in contrast with re-using an activity, where A and B are quite + different activities and supplement each other. +

        + +

        + In this example, the user has downloaded a replacement for the Phone + Ringtone activity, called Rings Extended. Now when they go to + Settings, Sound & Display, Phone Ringtone, the system presents + them with a choice between the Android System's ringtone activity and + the new one. This dialog box has an option to remember their choice + "Use by default for this action". When they choose "Rings Extended", + that activity loads, replacing the original Android ringtone activity. +

        + +

        + +

        + +

        Multitasking

        + +

        + As previously noted, when an activity has been launched, the user can + go to Home and launch a second activity without destroying the first + activity. This scenario demonstrates launching the Maps application. +

        + +
          +
        • + State 1 - The user launches the View Map activity and searches + for a map location. Let's say the network is slow, so the map is + taking an unusually long taking time to draw. +
        • +
        +
          +
        • + State 2 - The user wants to do something else while they're + waiting, so they press HOME, which does not interrupt the map's + network connection and allows the map to continue loading in the + background. + +

          + Note that when you write an activity, you can make it stop or + continue running when it is moved to the background (see + onStop() in Activity Lifecycle). + For activities that download data from the network, it's recommended + to let them continue downloading so the user can multi-task. +

          + +
        • + +
        • + State 3 - The map activity is now running in the background, + with Home in the foreground. The user then launches the Calendar + activity, which launches into the foreground, taking user focus, + where they view today's calendar (as indicated by the heavy + outline). +
        • +
        + +

        + +

        +
          +
        • + State 4 - The user presses Home, then Maps to return to the map, which by now has fully loaded. +
        • +
        + +

        + +

        + +

        + The application launcher at Home has launched "View Map" and "Day + View" activities into separate tasks, hence the system is + multitasking — running multiple tasks. +

        + + +

        Launching from Two Entry Points

        + +

        + Every application must have at least one entry point — a way + for the user or system to access activities inside the + application. Each icon in the application launcher at home + represents an entry point. Applications can also from another + application. Each activity is a potential entry point into the + application.  +

        + +

        + The phone application has two entry points: Contacts and Dialer. A + user entering from Contacts can choose a phone number to launch the + Dialer. As shown in the following figure, a user could choose the + Contacts icon to launch the Contacts activity, then pick a phone + number to launch the Dialer activity and dial the phone. +

        + +

        + Once the user is inside the application, they can access other + activities, such as New Contact and Edit Contact, through tabs, menu + items, list items, onscreen buttons, or other user interface + controls. +

        + +

        + +

        + +

        Intents

        + +

        + When the user takes an action on some data, such as touching a + mailto:info@example.com link, they are actually initiating an Intent + object, or just an intent, which then gets resolved to a + particular component (we consider only activity components here). + So, the result of a user touching a mailto: link is an Intent object + that the system tries to match to an activity. If that Intent object was + written explicitly naming an activity (an explicit intent), + then the system immediately launches that activity in response to the user + action. However, if that Intent object was written without naming an + activity (an implicit intent), the system compares the Intent + object to the intent filters of available activities. If more + than one activity can handle the action and data, the system + displays an activity chooser for the user to choose from. +

        + +

        + This example of touching the mailto: link is shown in the following + figure. If the device has two email applications set up, when a user + touches a mailto: email address on a web page, the result is an + Intent object which displays a dialog box with a choice between the + two activities to compose an email (Gmail and Email). +

        + +

        + +

        + +

        + Here are some examples of Intent objects and the activities they resolve to: +

        + +
          +
        • + View the list of contacts - resolves to a contact list viewer activity +
        • + +
        • + View a particular contact - resolves to a contact viewer activity +
        • + +
        • + Edit a particular contact - resolves to a contact editor activity +
        • + +
        • + Send to a particular email - resolves to an email activity +
        • + +
        • + Dial a phone number - resolves to a phone dialer activity +
        • + +
        • + View the list of images - resolves to an image list viewer activity +
        • + +
        • + View a particular image - resolves to an image viewer activity +
        • + +
        • + Crop a particular image - resolves to an image cropper activity +
        • +
        + +

        + Notice that an Intent object specifies two things, an action and data: +

        + +
          +
        • + A generic action to be performed. In these examples: view, edit, dial or crop +
        • + +
        • + The specific data to be acted on. In these examples: the list of contacts, a particular contact, a phone number, the list of images, or a particular image +
        • +
        + +

        + Note that any user action to start an activity from the + application launcher at Home is an explicit intent to a specific + activity. Likewise, some activities launch private activities + within their application as explicit intents so no other activity + can access them. +

        + +

        + For more on intents, see {@link android.content.Intent Intent class} and + intent filters. +

        + + +

        Switching Between Tasks

        + +

        + This scenario shows how the user can switch between two tasks. In + this example, the user writes a text message, attaches a picture, + but before they are done they glance at their calendar. They then + return to where they left off, attaching the picture and sending the + message. +

        + +
          +
        1. + Start first task. You want to send a text message and attach a photo. You would choose: + +

          + Home > Messaging > New message > MENU > Attach + > Pictures. This last step launches the picture gallery + for picking a photo. Notice that picture gallery is an + activity in a separate application. +

          + + + + + + + + + + +
          + + + + + +
          + +

          + At this point, before you have picked a picture, you decide + to stop and glance at your calendar, which is a separate + task. Because the current activity has no button to go + directly to the Calendar, you need to start from Home. +

          + +
        2. +
        3. + Start second task. You choose Home > Calendar to + look at a calendar event. Calendar launches from Home as a new + task because the application launcher creates a new task for + each application it launches. + +

          + +

          +
        4. + +
        5. + Switch to first task and complete it. When done looking + at the Calendar, you can return to attaching the picture by + starting the root activity again for that task: choose Home + > Messaging, which takes you not to Messaging, but directly + to the Picture gallery, where you left off. You can then pick + a photo, which is added to the message, you send the message + and you're done with the first task. + + + + + + + + + + + + + +
          + + + + +         +
          +
        6. +
        + + +

        Design Tips

        + +

        + The following are tips and guidelines for application designers and developers. +

        + +

        When writing an activity that won't be re-used, don't specify intent filters — use explicit intents

        + +

        + If you're writing an activity that you don't want other activities + to use, be sure not to add any intent filters to that activity. This + applies to an activity that will be launched only from the + application launcher or from other activities inside your + application. Instead, just create intents specifying the explicit + component to launch — that is, explicit intents. In this case, + there's just no need for intent filters. Intent filters are + published to all other applications, so if you make an intent + filter, what you're doing is publishing access to your activity, + which means you can cause unintentional security holes. +

        + + + +

        When reusing an activity owned by others, handle the case where no activity matches

        + +

        + Your applications can re-use activities made available from other + applications. In doing so, you cannot presume your intent will always + be resolved to a matching external activity — you must handle the case + where no application installed on the device can handle the intent. +

        + +

        + You can either test that an activity matches the intent, which you can do + before starting the activity, or catch an exception if starting the + activity fails. Both approaches are descibed in the blog posting + Can + I use this Intent?. +

        + +

        + To test whether an intent can be resolved, your code can query the package manager. + The blog post provides an example in the isIntentAvailable() helper method. + You can perform this test when initializing the user interface. + For instance, you could disable the user control that initiates + the Intent object, or display a message to the user that lets them go + to a location, such as the Market, to download its application. + In this way, your code can start the activity (using either startActivity() + or startActivityForResult()) only if the intent has tested to resolve + to an activity that is actually present. +

        + +

        Consider how you want your activities to be launched or used by other applications

        + +

        + As a designer or developer, it's up to you to determine how users + start your application and the activities in it. As an application + is a set of activities, the user can start these activities from + Home or from another application. +

        + +
          +
        • + Launch your main activity from an icon at Home - If + your application can run standalone, it should probably be + started by the user touching an icon in application + launcher (typically implemented as a sliding drawer on the + Home screen), or from a shortcut icon on the Home screen, or + from the task switcher. (The mechanism for this is for the + activity to have an + intent filter with action MAIN and + category LAUNCHER.) +
        • +
        + +
          +
        • + Launch your activity from within another application - + Perhaps your activities are meant for re-use. For example, + many applications have data they want to share with other + users. Activities that can share data with other users include + email, text messaging and uploading to a public website.

          + If one or more of your activities can be an alternative to an + existing activity in another application, you can make it + available to users at the point they request that + activity. For example, if your activity can send data to + others (such as by email, text messaging, or uploading), + consider setting up that activity to appear as a choice to the + user. To give a specific example, Gallery enables a user to + view and share pictures. When the user chooses "Share" from + the menus, the system compares the "Share" request (an Intent + object) to available activities (by looking at their intent + filters) and displays choices to share. In this case, it + matches Email, Gmail, Messaging and Picassa. If your activity + can send a picture or upload it to a website, all it needs to + do is make itself available for sharing (by setting its intent + filter). +

          +

          + Another activity can start your activity either with or without expecting a result back.  +

          +
        • + +
            +
          • + Start an activity expecting a result - This approach + is closed loop, where the activity being started must either + return a valid result or be canceled. In the previous + examples of sharing a photo from a Gallery, the user ends up + back in the Gallery after completing the send or upload + procedure. These are examples of starting an activity + external to the Gallery. (Such an activity is started with + {@link + android.app.Activity#startActivityForResult(android.content.Intent, + int) startActivityForResult()}.) +
          • + +
          • + Start an activity not expecting a result - This + approach is open-ended. An example is choosing an house + address in an email message (or web page), where the Maps + activity is started to map the location. No result from maps + is expected to be returned to the email message; the user + can return by pressing the BACK key. (Such an activity is + started with {@link + android.content.Context#startActivity(android.content.Intent) + startActivity()}.) +
          • +
          + +
        • + Launch your activity only from within another + application - The previous cases of sharing by way of + Email, Gmail, Messaging and Picassa (from within Gallery) are + all activities that can also be started from icons in the + application launcher at Home. In contrast, the activities for + cropping a picture and attaching a file cannot be started from + Home, because they do not stand alone and require a + context.  +
        • + +

          + In fact, not all applications have icons and can be started from + Home. Take for example a small app that is infrequently used and + replaces existing functionality, that already has a natural entry + point inside an existing application. For example, an Android phone + typically has a built-in ringtone picker that can be selected from + the sound settings of the Settings application. A custom ringtone + picker application that you write could be launched by an intent + identical to the built-in ringtone picker. At the point where the + user chooses "Phone ringtone", they are presented with a dialog + letting them choose between "Android System" and your ringtone + picker (and letting them save their choice) as shown in the + following figure. A ringtone is something you set infrequently, and + already has a well-defined starting point, so probably does not need + an application icon at Home. +

          + +

          + +

          + +
        • + Launch two or more main activities within a single + application from separate icon at Home - As we have + defined it, all the code in a single .apk file is considered + to be one application. You can write an application + that contains two main activities launchable from Home. +
        • + +

          + The Camera.apk application is a good example of an application that + contains two independent main activities — Camera and + Camcorder — that each have their own icons in application + launcher, that can be launched separately, and so appear to the user + as separate applications. They both share use of the same lens, and + both store their images (still and moving) in the Gallery.  +

          + +

          + In order for your application to contain two different, independent + activities launchable from Home, you must define them to be + associated with different tasks. (This means setting the main + activity for each task to a different task affinity — in this case, + "com.android.camera" and "com.android.videocamera".) +

          + +

          + Contacts and Dialer are another example of two main activities + launchable from Home that reside in the same application. +

          + +
        • + Making your application available as a widget - An + application can also display a portion of itself as an app widget, embedded in Home or another + application, and receive periodic updates. +
        • + +
        + + +

        Allow your activities to be added to the current task

        + +

        + If your activities can be started from another application, allow + them to be added to the current task + (or an existing task it has an affinity with). Having activities + added to a task enables the user to switch between a task that + contains your activities and other tasks. Exceptions are + your activities that have only one instance.  +

        + +

        + For this behavior, your activity should have a launch + mode of standard or singleTop rather than singleTask or + singleInstance. These modes also enable multiple instances of your + activity to be run. +

        + + +

        Notifications should let the user easily get back to the previous activity

        +

        + Applications that are in the background or not running can have + services that send out notifications to the user letting them know about + events of interest. Two examples are Calendar, which can send out notifications of + upcoming events, and Email, which can send out notifications when new + messages arrive. One of the user interface guidelines is that when the + user is in activity A, gets a notification for activity B and + picks that notification, when they press the BACK key, they should + go back to activity A.  +

        + +

        + The following scenario shows how the activity stack should work + when the user responds to a notification. +

        + +
          +
        1. + User is creating a new event in Calendar. They realize they + need to copy part of an email message into this event +
        2. +
        3. + The user chooses Home > Gmail +
        4. +
        5. + While in Gmail, they receive a notification from Calendar for an upcoming meeting +
        6. +
        7. + So they choose that notification, which takes them to a + dedicated Calendar activity that displays brief details of the + upcoming meeting +
        8. +
        9. + The user chooses this short notice to view further details +
        10. +
        11. + When done viewing the event, the user presses the BACK + key. They should be taken to Gmail, which is where they were + when they took the notification +
        12. +
        + +

        +This behavior doesn't necessarily happen by default. +

        + +

        +Notifications generally happen primarily in one of two ways: +

        + +
          +
        • + The chosen activity is dedicated for notification only - + For example, when the user receives a + Calendar notification, choosing that + notification starts a special activity that displays a list + of upcoming calendar events — this view is available only + from the notification, not through the Calendar's own user + interface. After viewing this upcoming event, to ensure that + the user pressing the BACK key will return to the activity + the user was in when they picked the notification, you would + make sure this dedicated activity does not have the same + task affinity as the Calendar or any other activity. (You do + this by setting task affinity to the empty string, which + means it has no affinity to anything.) The explanation for + this follows. + +

          + Because of the way tasks work, if the taskAffinity of the + dedicated activity is kept as its default, then pressing the + BACK key (in step 6, above) would go to Calendar, rather + than Gmail. The reason is that, by default, all activities + in a given application have the same task + affinity. Therefore, the task affinity of the dedicated + activity matches the Calendar task, which is already running + in step 1. This means in step 4, choosing the notification + brings the existing Calendar event (in step 1) forward and + starts the dedicated activity on top of it. This is not + what you want to have happen. Setting the dedicated + activity's taskAffinity to empty string fixes this. +

          +
        • + +
        • + The chosen activity is not dedicated, but always comes to + the foreground in its initial state - For example, in + response to a notification, when the Gmail application comes + to the foreground, it always presents the list of conversations. + You can ensure this happens by setting a "clear top" flag in the + intent that the notification triggers. This ensures that when the + activity is launched, it displays its initial activity, preventing + Gmail from coming to the foreground in whatever state the user last + happened to be viewing it. (To do this, you put {@link + android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP + FLAG_ACTIVITY_CLEAR_TOP} in the intent you pass to startActivity()). +
        • +
        + +

        + There are other ways to handle notifications, such as bringing the + activity to the foreground, set to display specific data, such as + displaying the text message thread for the person who just sent a + new text message. +

        + +

        + A notification always starts an activity as a new task (that is, it + puts FLAG_ACTIVITY_NEW_TASK in the intent it + passes to startActivity()). This is done because interruptions to a + task should not become part of that task. +

        + +

        Use the notification system — don't use dialog boxes in place of notifications

        + +

        + If your background service needs to notify a user, use the standard + notification system — don't use a dialog or toast to notify + them. A dialog or toast would immediately take focus and interrupt + the user, taking focus away from what they were doing: the user + could be in the middle of typing text the moment the dialog appears + and could accidentally act on the dialog. Users are used to dealing + with notifications and can pull down the notification shade at their + convenience to respond to your message. +

        + +

        Don't take over the BACK key unless you absolutely need to

        + +

        + As a user navigates from one activity to the next, the system adds + them to the activity stack. This forms a navigation history that is + accessible with the BACK key. Most activities are relatively limited + in scope, with just one set of data, such as viewing a list of + contacts, composing an email, or taking a photo. But what if your + application is one big activity with several pages of content and + needs finer-grained control of the BACK key? Examples of such Google + applications are the Browser, which can have several web pages open + at once, and Maps, which can have several layers of geographic data + to switch between. Both of these applications take control of the + BACK key and maintain their own internal back stacks that operate + only when these applications have focus. +

        + +

        + For example, Maps uses layers to present different + information on a map to the user: displaying the location of a + search result, displaying locations of friends, and displaying a + line for a street path providing direction between points. Maps + stores these layers in its own history so the BACK key can return to + a previous layer. +

        + +

        + Similarly, Browser uses browser windows to present different + web pages to the user. Each window has its own navigation history, + equivalent to tabs in a browser in a desktop operating system (such + as Windows, Macintosh or Linux). For example, if you did a Google + web search in one window of the Android Browser, clicking on a link + in the search results displays a web page in that same window, and + then pressing BACK would to the search results page. Pressing + BACK goes to a previous window only if the current window was + launched from that previous window. If the user keeps pressing + back, they will eventually leave the browser activity and return + Home. +

        + diff --git a/docs/html/guide/practices/ui_guidelines/icon_design.jd b/docs/html/guide/practices/ui_guidelines/icon_design.jd new file mode 100644 index 000000000000..155684a25b93 --- /dev/null +++ b/docs/html/guide/practices/ui_guidelines/icon_design.jd @@ -0,0 +1,1406 @@ +page.title=Icon Design Guidelines +@jd:body + +
        +
        + +

        Icon design quickview

        + +
          +
        • You can use several types of icons in an Android application.
        • +
        • Your icons should follow the specification in this document.
        • +
        • A set of standard icons is provided by the Android platform. Your +application can use the standard icons by referencing them as resources.
        • +
        + +

        In this document

        + +
          +
        1. Launcher icon
        2. +
        3. Menu icon
        4. +
        5. Status bar icon
        6. +
        7. Tab icon
        8. +
        9. Dialog icon
        10. +
        11. List view icon
        12. + +
        13. General guidelines
        14. +
        15. Using the Icon Templates Pack
        16. +
        17. Icon appendix +
            +
          1. Launcher icons
          2. +
          3. Menu icons
          4. +
          5. Status bar icons
          6. +
          +
        18. + +
        + +

        See also

        + +
          +
        1. Android Icon +Templates Pack »
        2. +
        + +
        +
        + +

        Creating a unified look and feel throughout a user interface adds value to +your product. Streamlining the graphic style will also make the UI seem more +professional to the user.

        + +

        This document shows you how to create icons for various parts +of your application’s user interface that fit the style set by the Android UI +team. Following these guidelines will help you to create a polished and unified +experience for the user.

        + +

        To get started creating conforming icons more quickly, you can download +the Android Icon Templates Pack. For more information, see +Using the Android Icon Template Pack.

        + +

        Launcher icon

        + +

        A launcher icon is the graphic that represents your application on an Android +device’s Home screen. It is a simplified 3D icon with a fixed perspective. The +required perspective is shown in Figure 1.

        + +

        Structure

        + +
          +
        • The base of a launcher icon can face either the top view or the front +view.
        • + +
        • The majority of a launcher icon’s surface should be created using the +launcher icon color palette. To add emphasis, use +one or more bright accent colors to highlight specific characteristics.
        • + +
        • All launcher icons must be created with rounded corners to make them look +friendly and simple—as shown in Figure 2.
        • + +
        • All dimensions specified are based on a 250x250 pixel artboard size +in a vector graphics editor like Adobe Illustrator, where the icon fits within +the artboard boundaries.
        • + +
        • Final art must be scaled down and exported as a transparent 48x48 px +PNG file using a raster image editor such as Adobe Photoshop.
        • + +
        • Templates for creating launcher icons in Adobe Illustrator and Photoshop are +available in the Icon Templates Pack.
        • +
        + + + + + + +
        + A view of
+launcher icon corners and perspective angles + +
        +

        Figure 1. Perspective angles for launcher icons (90° is +vertical).

        +
        + + + + + + + + + + + + +
        1.92°
        2.92°
        3.173°
        4.171°
        5.49°
        6.171°
        7.64°
        8.97°
        9.75°
        10.93°
        11.169°
        +
        +
        +
        +

        Figure 2. Rounded corners for launcher icons.

        +
        +
        + +

        Light, effects, and shadows

        + +

        Launcher icons are simplified 3D icons using light and shadows for +definition. A light source is placed slightly to the left in front of the icon, +and therefore the shadow expands to the right and back.

        + + + + + + +
        + A view of
+light, effects, and shadows for launcher icons. + +
        +

        Figure 3. Light, effects, and shadows for launcher icons.

        +
        + + + + + + +
        1.Edge highlight:white
        2.Icon shadow:black | 20px blur
        50% opacity | angle 67°
        3.Front part:Use light gradient from color palette
        4.Detail shadow:black | 10px blur
        75% opacity
        5. Side part:Use medium gradient from color palette
        +
        +
        +
        + + + + + + + +
        + +

        Launcher icon color palette

        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Color palette, whiteWhite
        r 0 | g 0 | b 0
        Used for highlights on edges.
        Color palette, light gradientLight gradient
        1:  r 0 | g 0 | b 0
        2:  r 217 | g 217 | b 217
        Used on the front (lit) part of the icon.
        Color palette, medium gradienMedium gradient
        1:  r 190 | g 190 | b 190
        2:  r 115 | g 115 | b 115
        Used on the side (shaded) part of the icon.
        Color palette, dark gradientDark gradient
        1:  r 100 | g 100 | b 100
        2:  r 25 | g 25 | b 25
        Used on details and parts in the shade of the icon.
        Color palette, blackBlack
        r 255 | g 255 | b 255
        Used as base color in shadows.
        + +
        + +

        Step by step

        + +
          +
        1. Create the basic shapes with a tool like Adobe Illustrator, using the +angles described in Launcher icon: structure. +The shapes and effects must fit within a 250x250 pixel artboard.
        2. +
        3. Add depth to shapes by extruding them and create the rounded corners as +described for the launcher icon structure.
        4. +
        5. Add details and colors. Gradients should be treated as if there is a light +source placed slightly to the left in front of the icon.
        6. +
        7. Create the shadows with the correct angle and blur effect.
        8. +
        9. Import the icon into a tool like Adobe Photoshop and scale to fit an image +size of 48x48 px on a transparent background.
        10. +
        11. Export the icon at 48x48 as a PNG file with transparency enabled.
        12. +
        + +
        + + + +

        Menu icons are graphical elements placed in the pop-up menu shown to users +when they press the Menu button. They are drawn in a flat-front perspective. +Elements in a menu icon must not be visualized in 3D or perspective.

        + +

        Structure

        + +
          +
        • In order to maintain consistency, all menu icons must use the same +primary palette and the same effects. For more information, see the +menu icon color palette.
        • + +
        • Menu icons should include rounded corners, but only when logically +appropriate. For example, in Figure 3 the logical place for rounded corners is +the roof and not the rest of the building.
        • + +
        • All dimensions specified on this page are based on a 48x48 pixel artboard +size with a 6 pixel safeframe.
        • + +
        • The menu icon effect (the outer glow) described in Light, effects, and shadows can overlap the 6px safeframe, +but only when necessary. The base shape must always stay inside the +safeframe.
        • + +
        • Final art must be exported as a transparent PNG file.
        • + +
        • Templates for creating menu icons in Adobe Photoshop are available in the +Icon Templates Pack.
        • +
        + + + + + + +
        + A view of menu
+icon structure. + +
        +

        Figure 4. Safeframe and corner-rounding for menu +icons. Icon size is 48x48.

        +
        +
        + + + + +

        Menu icons are flat and pictured face on. A slight deboss and some other +effects, which are shown below, are used to create depth.

        + + + + + + +
        + A view of light, effects, and shadows for launcher icons. + +
        +

        Figure 5. Light, effects, and shadows for launcher icons.

        +
        + + + + + +
        1.Front part:Use fill gradient from primary color palette
        2.Inner shadow:black | 20 % opacity
        angle 90° | distance 2px
        size 2px
        3.Outer glow:white | 55% opacity
        spread 10% | size 3px
        5.Inner bevel:depth 1% | direction down size 0px
        angle 90° | altitude 10°
        highlight white 70% opacity
        shadow black 25% opacity
        +
        +
        +
        + + + + + + + +
        + + + + + + + + + + + + + + + + + + + +
        Color palette, whiteWhite
        r 0 | g 0 | b 0
        Used for outer glow and bevel highlight.
        Color palette, medium gradientFill gradient
        1:  r 163 | g 163 | b 163
        2:  r 120 | g 120 | b 120
        Used as color fill.
        Color palette, blackBlack
        r 255 | g 255 | b 255
        Used for inner shadow and bevel shadow.
        + +
        + + + +
          +
        1. Create the basic shapes using a tool like Adobe Illustrator.
        2. +
        3. Import the shape into a tool like Adobe Photoshop and scale to fit an image +of 48x48 px on a transparent background. Mind the safeframe.
        4. +
        5. Add the effects seen as described in Figure 5.
        6. +
        7. Export the icon at 48x48 as a PNG file with transparency enabled.
        8. +
        + +
        + + +

        Status bar icon

        + +

        Status bar icons are used to represent notifications from your application in +the status bar. Graphically, they are very similar to menu icons, but are +smaller and higher in contrast.

        + +

        Structure

        + +
          +
        • Rounded corners must always be applied to the base shape and to the details +of a status bar icon shown Figure 7.
        • + +
        • All dimensions specified are based on a 25x25 pixel artboard size with a 2 +pixel safeframe.
        • + +
        • Status bar icons can overlap the safeframe to the left and right when +necessary, but must not overlap the safeframe at the top and bottom.
        • + +
        • Final art must be exported as a transparent PNG file.
        • + +
        • Templates for creating status bar icons using Adobe Photoshop are available +in the Icon Templates Pack.
        • +
        + + + + + + +
        + A view of
+status bar icon structure. + +
        +

        Figure 6. Safeframe and corner-rounding for status bar +icons. Icon size is 25x25.

        +
        +
        + + +

        Light, effects, and shadows

        + +

        Status bar icons are slightly debossed, high in contrast, and pictured +face-on to enhance clarity at small sizes.

        + + + + + + +
        + A view of
+light, effects, and shadows for launcher icons. + +
        +

        Figure 7. Light, effects, and shadows for launcher icons.

        +
        + + + + + +
        1.Front part:Use fill gradient from primary color palette
        2.Inner bevel:depth 100% | direction down
        size 0px | angle 90° |
        altitude 30°
        highlight white 75% opacity
        shadow black 75% opacity
        3.Detail:white
        4.Disabled detail:grey gradient from palette
        + inner bevel: smooth | depth 1% | direction down | size 0px | angle 117° |
        altitude 42° | highlight white 70% | no shadow
        +
        +
        +
        + + + + + + + +
        + + + +

        Only status bar icons related to the phone function use full color; all other status bar icons should remain monochromatic.

        + + + + + + + + + + + + + + + + + + + + + + +
        Color palette, whiteWhite
        r 0 | g 0 | b 0
        Used for details within the icons and bevel highlight.
        Color palette, grey gradientGrey gradient
        1:  r 169 | g 169 | b 169
        2:  r 126 | g 126 | b 126
        Used for disabled details within the icon.
        Color palette, fill gradientFill gradient
        1:  1 r 105 | g 105 | b 105
        2:  r 10 | g 10 | b 10
        Used as color fill.
        Color palette, blackBlack
        r 255 | g 255 | b 255
        Used for bevel shadow.
        + +
        + + + +
          +
        1. In a tool like Adobe Photoshop, create the base shape within a 25x25 px +image on a transparent background. Mind the safeframe, and keep the upper and +lower 2 pixels free.
        2. +
        3. Add rounded corners as specified in Figure 6.
        4. +
        5. Add light, effects, and shadows as specified in Figure 7.
        6. +
        7. Export the icon at 25x25 as a PNG file with transparency enabled.
        8. +
        + +
        + + +

        Tab icon

        + +

        Tab icons are graphical elements used to represent individual tabs in a +multi-tab interface. Each tab icon has two states: unselected and selected.

        + +

        Structure

        + +
          +
        • Unselected tab icons have the same fill gradient and effects as menu icons, +but with no outer glow.
        • + +
        • Selected tab icons look just like unselected tab icons, but with a fainter +inner shadow, and have the same front part gradient as dialog icons.
        • + +
        • Tab icons have a 1 px safeframe which should only be overlapped for the edge +of the anti-alias of a round shape.
        • + +
        • All dimensions specified on this page are based on a 32x32 px artboard size. +Keep 1 px of padding around the bounding box inside the Photoshop template.
        • + +
        • Final art must be exported as a 32x32 px transparent PNG +file.
        • + +
        • Templates for creating tab icons in Adobe Photoshop are available in the +Icon Templates Pack.
        • +
        + + + + + + + + + + +
        + A view of
+unselected tab icon structure. + +
        +

        Figure 8. Safeframe and fill gradient for unselected tab +icons. Icon size is 32x32.

        +
        +
        + A view of
+selected tab icon structure. + +
        +

        Figure 9. Safeframe and fill gradient for tab icons in +selected state. Icon size is 32x32.

        +
        +
        + +

        Unselected tab icon

        + +

        Light, effects, and shadows

        + +

        Unselected tab icons look just like the selected tab icons, but with a +fainter inner shadow, and the same front part gradient as the dialog icons.

        + + + + + + +
        + A view
+of light, effects, and shadows for unselected tab icons. + +
        +

        Figure 10. Light, effects, and shadows for unselected +tab icons.

        +
        + + + + +
        1.Front part:gradient overlay | angle 90°
        bottom color: r 223 | g 223 | b 223
        top color: r 249 | g 249 | b 249
        bottom color location: 0%
        top color location: 75%
        2.Inner shadow:black | 10 % opacity | angle 90° distance 2px | size 2px
        3.Inner bevel:depth 1% | direction down | size 0px | angle 90° | altitude 10°
        highlight white 70% opacity
        shadow black 25% opacity
        +
        +
        +
        + + + + + + +
        + + + +
          +
        1. Create the basic shapes using a tool like Adobe Illustrator.
        2. +
        3. Import the shape to a tool like Adobe Photoshop and scale to fit an image of +32x32 px on a transparent background.
        4. +
        5. Add the effects seen in Figure 10 for the unselected state filter.
        6. +
        7. Export the icon at 32x32 as a PNG file with transparency enabled.
        8. +
        + +
        + +

        Selected tab icon

        + +

        The selected tab icons have the same fill gradient and effects as the menu +icon, but with no outer glow.

        + + + + + + +
        + A view of
+light, effects, and shadows for selected tab icons. + +
        +

        Figure 11. Light, effects, and shadows for selected tab +icons.

        +
        + + + + +
        1.Front part:Use fill gradient from color palette.
        2.Inner shadow:black | 20% opacity |
        angle 90° | distance 2px |
        size 2px
        3.Inner bevel:depth 1% | direction down | size 0px | angle 90° |
        altitude 10°
        highlight white 70% opacity
        shadow black 25% opacity
        +
        +
        +
        + + + + + + + +
        + + + + + + + + + +
        Color palette, fill gradientFill gradient
        1:  r 163 | g 163 | b 163
        2:  r 120 | g 120 | b 120
        Used as color fill on unselected tab icons.
        + +
        + + + +
          +
        1. Create the basic shape using a tool like Adobe Illustrator.
        2. +
        3. Import the shape into a tool like Adobe Photoshop and scale to fit a 32x32 +px artboard with a transparent background.
        4. +
        5. Add the effects seen in Figure 11 for the selected state filter.
        6. +
        7. Export the icon at 32x32 as a PNG file with transparency enabled.
        8. +
        + +
        + + +

        Dialog icon

        + +

        Dialog icons are shown in pop-up dialog boxes that prompt the user for +interaction. They use a light gradient and inner +shadow in order to stand out against a dark background.

        + +

        Structure

        + +
          +
        • Dialog icons have a 1 pixel safeframe. The base shape must fit within the +safeframe, but the anti-alias of a round shape can overlap the safeframe.
        • + +
        • All dimensions specified on this page are based on a 32x32 pixel artboard size +in Adobe Photoshop. Keep 1 pixel of padding around the bounding box inside the +Photoshop template.
        • + +
        • Final art must be exported as a transparent PNG file.
        • + +
        • Templates for creating dialog icons in Adobe Photoshop are available in the +Icon Templates Pack.
        • +
        + + + + + + +
        + A view of dialog
+icon structure. + +
        +

        Figure 12. Safeframe and fill gradient for dialog icons. +Icon size is 32x32.

        +
        +
        + + +

        Light, effects, and shadows

        + +

        Dialog icons are flat and pictured face-on. In order to stand out against a +dark background, they are built up using a light gradient and inner shadow.

        + + + + + + +
        + A view of light,
+effects, and shadows for dialog icons. + +
        +

        Figure 13. Light, effects, and shadows for dialog +icons.

        +
        + + + +
        1.Front part:gradient overlay | angle 90°
        bottom: r 223 | g 223 | b 223
        top: r 249 | g 249 | b 249
        bottom color location: 0%
        top color location: 75%
        2.Inner shadow:black | 25% opacity |
        angle -90° | distance 1px | size 0px
        +
        +
        +
        + + + + + + +
        + + + +
          +
        1. Create the basic shapes using a tool like Adobe Illustrator.
        2. +
        3. Import the shape into a tool like Adobe Photoshop and scale to fit an image +of 32x32 px on a transparent background.
        4. +
        5. Add the effects seen in Figure 13 for the proper filter.
        6. +
        7. Export the icon at 32x32 as a PNG file with transparency enabled.
        8. +
        + +
        + + +

        List view icon

        + +

        List view icons look a lot like dialog icons, but they use an inner shadow +effect where the light source is above the object. They are also designed to be +used only in a list view. Examples include the Android Market application home +screen and the driving directions screen in the Maps application.

        + +

        Structure

        + +
          +
        • A list view icon normally has a 1 px safeframe, but it is OK to use the +safeframe area for the edge of the anti-alias of a round shape.
        • + +
        • All dimensions specified are based on a 32x32 pixel artboard size in +Photoshop. Keep 1 pixel of padding around the bounding box inside the template. +
        • + +
        • Final art must be exported as a transparent PNG file.
        • + +
        • Templates for creating list view icons in Adobe Photoshop are available in +the Icon Templates Pack.
        • +
        + + + + + + +
        + A view of list
+view icon structure. + +
        +

        Figure 14. Safeframe and fill gradient for list view +icons. Icon size is 32x32.

        +
        +
        + +

        Light, effects, and shadows

        + +

        List view icons are flat and pictured face-on with an inner shadow. Built up +by a light gradient and inner shadow, they stand out well on a dark +background.

        + + + + + + +
        + A view
+of light, effects, and shadows for list view icons. + +
        +

        Figure 15. Light, effects, and shadows for list view +icons.

        +
        + + + + +
        1.Inner shadow:black | 57 % opacity | angle 120° | blend mode normal | distance 1px | size 1px
        2.Background:black | standard system color
        These icons are displayed in list views only.
        Note: The list view icon sits on 32x32 px artboard in Photoshop, without a safeframe.
        +
        +
        +
        + + + + + +
        + + + +
          +
        1. Add the effects seen in Figure 15 for the proper filter.
        2. +
        3. Export the icon at 32x32 as a PNG file with transparency enabled.
        4. +
        5. Create the basic shapes using a tool like Adobe Illustrator.
        6. +
        7. Import the shape into a tool like Adobe Photoshop and scale to fit an image +of 32x32 px on a transparent background.
        8. +
        + +
        + + +

        General guidelines

        + +

        Below are some "do and don't" guidelines to consider when creating icons for +your application. By following the guidelines, you can ensure that your icons +will work well with other parts of the Android platform UI and will meet the +expectations of your application's users.

        + + + + + + + + +
        + +

        Do...

        + +
          +
        • Use a normal perspective. The depth of an object should be realistic.
        • +
        • Keep it simple! By overdoing an icon, it loses it purpose and +readability.
        • +
        • Use colors only when necessary. Mind that the base of a launcher icon should +be grey and feel solid.
        • +
        • Use the correct angles for the specific icon types.
        • +
        +
        + +

        Don’t...

        + +
          +
        • Use open elements like text alone as icons. Instead place those elements on +a base shape.
        • +
        • Use colors for your status bar notifications. Those are reserved for +specific phone-only functions.
        • +
        +
        +Side-by-side examples
+of good/bad icon design. +
        + +

        Using the Android Icon Templates Pack

        + +

        The Android Icon Templates Pack is a collection of template designs, filters, +and settings that make it easier for you to create icons that conform to the +general specifications given in this document. We recommend downloading the +template pack archive before you get started with your icon design.

        + +

        The icon templates are provided in Adobe Photoshop and Adobe Illustrator file +formats, which preserves the layers and design treatments we used when creating the +standard icons for the Android platform. You can load the template files into any +compatible image-editing program, although your ability to work directly with the +layers and treatments may vary based on the program you are using.

        + +

        You can obtain the Icon Templates Pack archive using the link below:

        + +

        Download the Icon Templates +Pack » + + +

        Icon appendix

        + +

        Standard launcher icons

        + +

        Shown below are examples of launcher icons used by Android applications. The +icons are provided for your reference only — please do not reuse these +icons in your applications.. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + Android asset +
        Alarm Clock
        + Android asset +
        Browser
        + Android asset +
        Calculator
        + Android asset +
        Calendar
        + Android asset +
        Camcorder
        + Android asset +
        Camera
        + Android asset +
        Contacts
        + Android asset +
        Dialer
        + Android asset +
        Email
        + Android asset +
        Gallery
        + Android asset +
        Generic application
        + Android asset +
        Gmail
        + Android asset +
        Google Talk
        + Android asset +
        IM
        + Android asset +
        Maps
        + Android asset +
        Market
        + Android asset +
        Messaging
        + Android asset +
        Music
        + Android asset +
        Settings
        + Android asset +
        Voice Dialer
        + Android asset +
        Voice Search
        + Android asset +
        YouTube
        + +

        + +

        Shown below are standard menu icons that are included in the Android platform +(as of Android 1.5). You can reference any of these icon resources from your +application as needed, but make sure that the action you assign to the icon is +consistent with that listed. Note that this is not a complete list of icons and +that the actual appearance of standard icons may change across platform +versions.

        + +

        To reference one of the icons from your code, use +android.R.drawable.<icon_resource_identifier>. For example, +you can call a menu item's {@link android.view.MenuItem#setIcon(android.graphics.drawable.Drawable) setIcon()} +method and pass the resource name:

        + +

        .setIcon(android.R.drawable.ic_menu_more);. + +

        You could reference the same icon from a layout file using +android:icon="@android:drawable/ic_menu_more">.

        + +

        To determine the resource ID for an icon listed below, hover over the icon or +simply look at image filenames, which use the format +"<icon_resource_identifier>.png".

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + Android asset +
        Add
        + Android asset +
        Archive
        + Android asset +
        Attach
        + Android asset +
        Back
        + Android asset +
        Call
        + Android asset +
        Camera
        + Android asset +
        Clear / Close / Cancel / Discard
        + Android asset +
        Compass
        + Android asset +
        Delete
        + Android asset +
        Directions
        + Android asset +
        Edit
        + Android asset +
        Favorite
        + Android asset +
        Forward
        + Android asset +
        Gallery
        + Android asset +
        Go to
        + Android asset +
        Help
        + Android asset +
        History
        + Android asset +
        Home
        + Android asset +
        Info / details
        + Android asset +
        Map mode
        + Android asset +
        Mark
        + Android asset +
        My Location
        + Android asset +
        More
        + Android asset +
        Play
        + Android asset +
        Preferences
        + Android asset +
        Refresh
        + Android asset +
        Rotate
        + Android asset +
        Save
        + Android asset +
        Send
        + Android asset +
        Search
        + Android asset +
        Share
        + Android asset +
        Shuffle
        + Android asset +
        Upload
        + Android asset +
        View
        + Android asset +
        Video
        + Android asset +
        Zoom
        + + +

        Standard status bar icons

        + +

        Shown below are standard status bar icons included in the Android platform +(as of Android 1.5). You can reference any of these icon resources from your +application as needed, but make sure that the meaning of the icon is consistent +with the standard meaning listed. Note that this is not a complete list of icons +and that the actual appearance of standard icons may change across platform +versions.

        + +

        To reference one of the icons from your code, use +android.R.drawable.<icon_resource_identifier>. For example, +you can construct a simple notification that references one of the icons like +this:

        + +

        new Notification(R.drawable.stat_notify_calendar, +"sample text", System.currentTimeMillis());

        + +

        To determine the resource ID for an icon listed below, hover over the icon +or simply look at the image filename, which use the format +"<icon_resource_identifier>.png".

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + Android asset +
        3G
        + Android asset +
        Airplane mode
        + Android asset +
        Alarm
        + Android asset +
        Bluetooth
        + Android asset +
        Bluetooth connected
        + Android asset +
        Calendar
        + Android asset +
        Disk full
        + Android asset +
        EDGE
        + Android asset +
        Email
        + Android asset +
        Gmail
        + Android asset +
        GPRS
        + Android asset +
        IM
        + Android asset +
        Installation complete
        + Android asset +
        Music
        + Android asset +
        Roaming
        + Android asset +
        Signal
        + Android asset +
        Signal unavailable
        + Android asset +
        Silent mode
        + Android asset +
        SMS/MMS
        + Android asset +
        Speaker phone
        + Android asset +
        Sync
        + Android asset +
        Sync error
        + Android asset +
        USB connected
        + Android asset +
        Vibrate
        + Android asset +
        Voicemail
        + Android asset +
        Warning
        + Android asset +
        WiFi
        + Android asset +
        WiFi network available
        + Android asset +
        WiFi unavailable
        + Android asset +
        Battery 100%
        + Android asset +
        Battery empty
        + Android asset +
        Call
        + Android asset +
        Call forward
        + Android asset +
        Call on hold
        + Android asset +
        GPS on
        + Android asset +
        Missed call
        + + diff --git a/docs/html/guide/practices/ui_guidelines/index.jd b/docs/html/guide/practices/ui_guidelines/index.jd index e19d5b49f3ff..0b9d2754d21a 100644 --- a/docs/html/guide/practices/ui_guidelines/index.jd +++ b/docs/html/guide/practices/ui_guidelines/index.jd @@ -6,18 +6,39 @@ page.title=User Interface Guidelines

        The Android UI team has begun developing guidelines for the interaction and -design of Android applications. Look here for articles that describe these -visual guidelines as we release them.

        +visual design of Android applications. Look here for articles that describe +these guidelines as we release them.

        -
        -
        Widget Design Guidelines
        -
        Widgets are a new feature introduced in Cupcake. A widget displays -an application's most important or timely information at a glance, on a user's -Home screen. These design guidelines describe how to design widgets that fit -with others on the Home screen. They include links to graphics files and -templates that will make your designer's life easier.
        - +
        Icon +Design Guidelines and Android Icon Templates Pack +»
        +
        Your applications need a wide variety of icons, from a launcher icon to +icons in menus, dialogs, tabs, the status bar, and lists. The Icon Guidelines +describe each kind of icon in detail, with specifications for the size, color, +shading, and other details for making all your icons fit in the Android system. +The Icon Templates Pack is an archive of Photoshop and Illustrator templates and +filters that make it much simpler to create conforming icons.
        +
        +
        +
        Widget Design Guidelines
        +
        A widget displays an application's most important or timely information +at a glance, on a user's Home screen. These design guidelines describe how to +design widgets that fit with others on the Home screen. They include links to +graphics files and templates that will make your designer's life easier.
        +
        +
        +
        Activity and Task Design Guidelines
        +
        Activities are the basic, independent building blocks of applications. + As you design your application's UI and feature set, you are free to + re-use activities from other applications as if they were yours, + to enrich and extend your application. These guidelines + describe how activities work, illustrates them with examples, and + describes important underlying principles and mechanisms, such as + multitasking, activity reuse, intents, the activity stack, and + tasks. It covers this all from a high-level design perspective. +
        diff --git a/docs/html/guide/topics/resources/res-selection-flowchart.png b/docs/html/guide/topics/resources/res-selection-flowchart.png new file mode 100755 index 0000000000000000000000000000000000000000..d738b3f0c866ef39f9b756dc08dd615798ec5400 GIT binary patch literal 23228 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 Dh2JqK literal 0 HcmV?d00001 diff --git a/docs/html/guide/topics/resources/resources-i18n.jd b/docs/html/guide/topics/resources/resources-i18n.jd old mode 100644 new mode 100755 index 4bbb44ac5e5a..2bcc5e33deea --- a/docs/html/guide/topics/resources/resources-i18n.jd +++ b/docs/html/guide/topics/resources/resources-i18n.jd @@ -37,7 +37,7 @@ PNG, and JPEG files. The XML files have very different formats depending on what they describe. This document describes what kinds of files are supported, and the syntax or format of each.

        Resources are externalized from source code, and XML files are compiled into -a binary, fast loading format for efficiency reasons. Strings, likewise are compressed +a binary, fast loading format for efficiency reasons. Strings, likewise, are compressed into a more efficient storage form. It is for these reasons that we have these different resource types in the Android platform.

        @@ -88,12 +88,12 @@ of any XML files.

        You will create and store your resource files under the appropriate subdirectory under the res/ directory in your project. Android has a resource compiler (aapt) that compiles resources according to which -subfolder they are in, and the format of the file. Here is a list of the file +subfolder they are in, and the format of the file. Table 1 shows a list of the file types for each resource. See the Available Resources for descriptions of each type of object, the syntax, and the format or syntax of the containing file.

        - +

        Table 1

        @@ -410,7 +410,7 @@ public class MyActivity extends Activity

        Alternate Resources (for alternate languages and configurations)

        -

        You can supply different resources for your product according to the UI +

        You can supply different resources for your application to use depending on the UI language or hardware configuration on the device. Note that although you can include different string, layout, and other resources, the SDK does not expose methods to let you specify which alternate resource set to load. Android @@ -436,7 +436,7 @@ MyApp/ Append these to the end of the resource folder name, separated by dashes. You can add multiple qualifiers to each folder name, but they must appear in the order they are listed here. For example, a folder containing drawable -resources for a fully specified configuration would look like:

        +resources for a fully specified configuration would look like this:

         MyApp/
        @@ -444,8 +444,7 @@ MyApp/
                 drawable-en-rUS-port-160dpi-finger-keysexposed-qwerty-dpad-480x320/
         
        -

        More typically, you will only specify a few specific configuration options -that a resource is defined for. You may drop any of the values from the +

        More typically, you will only specify a few specific configuration options. You may drop any of the values from the complete list, as long as the remaining values are still in the same order:

        @@ -457,41 +456,46 @@ MyApp/ drawable-port-160dpi/ drawable-qwerty/ - +

        Table 2 lists the valid folder-name qualifiers, in order of precedence. Qualifiers that are listed higher in the table take precedence over those listed lower, as described in How Android finds the best matching directory.

        +

        Table 2

        Directory
        - - - + + + - - - + + + - - + + - - + + @@ -506,6 +510,14 @@ MyApp/ + + + + + + + +
        Qualifier Values
        LanguageThe two letter ISO - 639-1 language code in lowercase. For example: - en, fr, es
        MCC and MNCThe mobile country code and mobile network code from the SIM in the device. For example mcc310-mnc004 (U.S., Verizon brand); mcc208-mnc00 (France, Orange brand); mcc234-mnc00 (U.K., BT brand).
        +
        + If the device uses a radio connection (GSM phone), the MCC will come from the SIM, and the MNC will come from the network to which the device is attached. You might sometimes use the MCC alone, for example to include country-specific legal resources in your application. If your application specifies resources for a MCC/MNC combination, those resources can only be used if both the MCC and the MNC match.
        RegionThe two letter - ISO - 3166-1-alpha-2 language code in uppercase preceded by a lowercase - "r". For example: rUS, rFR, rES
        Language and regionThe two letter ISO + 639-1 language code and two letter + ISO + 3166-1-alpha-2 region code (preceded by lowercase "r"). For example + en-rUS, fr-rFR, es-rES.
        +
        + The codes are case-sensitive: The language code is lowercase, and the country code is uppercase. You cannot specify a region alone, but you can specify a language alone, for example en, fr, es.
        Screen orientation port, land, square
        Screen pixel density92dpi, 108dpi, etc.
        92dpi, 108dpi, etc. When Android selects which resource files to use, it handles screen density differently than the other qualifiers. In step 1 of How Android finds the best matching directory (below), screen density is always considered to be a match. In step 4, if the qualifier being considered is screen density, Android will select the best final match at that point, without any need to move on to step 5.
        Touchscreen type notouch, stylus, finger
        Whether the keyboard is available to the userkeysexposed, keyshidden
        keysexposed, keyshidden, keyssoft
        + If your application has specific resources that should only be used with a soft keyboard, use the keyssoft value. If no keyssoft resources are available (only keysexposed and keyshidden) and the device shows a soft keyboard, the system will use keysexposed resources.
        Primary text input method nokeys, qwerty, 12key 320x240, 640x480, etc. The larger dimension must be specified first.
        SDK versionThe SDK version supported by the device, for example v3. The Android 1.0 SDK is v1, the 1.1 SDK is v2, and the 1.5 SDK is v3.
        (Minor version)(You cannot currently specify minor version. It is always set to 0.)

        This list does not include device-specific parameters such as carrier, @@ -513,92 +525,84 @@ branding, device/hardware, or manufacturer. Everything that an application needs to know about the device that it is running on is encoded via the resource qualifiers in the table above.

        -

        Here are some general guidelines on qualified resource directory names:

        +

        All resource directories, qualified and unqualified, live under the res/ folder. Here are some guidelines on qualified resource directory names:

          -
        • Values are separated by a dash (as well as a dash after the base directory - name)
        • -
        • Values are case-sensitive (even though they must be unique across all folder - names in a case-insensitive way)
          For example,
        • -
            -
          • A portrait-specific drawable directory must be named - drawable-port, not drawable-PORT.
          • -
          • You may not have two directories named drawable-port - and drawable-PORT, even if you had intended "port" and - "PORT" to refer to different parameter values.
          • -
          -
        • Only one value for each qualifier type is supported (that is, you cannot - specify drawable-rEN-rFR/)
        • -
        • You can specify multiple parameters to define specific configurations, - but they must always be in the order listed above. - For example, drawable-en-rUS-land will apply to landscape view, - US-English devices.
        • -
        • Android will try to find the most specific matching directory for the current - configuration, as described below
        • -
        • The order of parameters listed in this table is used to break a tie in case - of multiple qualified directories (see the example given below)
        • -
        • All directories, both qualified and unqualified, live under the res/ folder. - Qualified directories cannot be nested (you cannot have res/drawable/drawable-en)
        • -
        • All resources will be referenced in code or resource reference syntax by - their simple, undecorated name. So if a resource is named this:
          -       MyApp/res/drawable-port-92dp/myimage.png
          - It would be referenced as this:
          -       R.drawable.myimage (code)
          -       @drawable/myimage (XML)
        • +
        • You can specify multiple qualifiers, separated by dashes. For example, drawable-en-rUS-land will apply to US-English + devices in landscape orientation.
        • +
        • The qualifiers must be in the order listed in Table 2 above. For example: +
            +
          • Correct: values-mcc460-nokeys/
          • +
          • Incorrect: values-nokeys-mcc460/
          • +
          +
        • +
        • Values are case-sensitive. For example, a portrait-specific drawable directory must be named + drawable-port, not drawable-PORT or drawable-Port.
        • +
        • Only one value for each qualifier type is supported. For example, if you want to use exactly the same drawable files for Spain and France, you will need two resource directories, such as drawable-rES/ and drawable-rFR/, containing identical files. You cannot + have a directory named drawable-rES-rFR/.
        • +
        • Qualified directories cannot be nested. For example, you cannot have res/drawable/drawable-en.
        -

        How Android finds the best matching directory

        +

        How resources are referenced in code

        +

        All resources will be referenced in code or resource reference syntax by + their simple, undecorated names. So if a resource were named this:
        +      MyApp/res/drawable-port-92dpi/myimage.png
        + It would be referenced as this:
        +      R.drawable.myimage (code)
        +      @drawable/myimage (XML)

        +

        If several drawable directories are available, Android will select one of them (as described below) and load myimage.png from it.

        +

        How Android finds the best matching directory

        Android will pick which of the various underlying resource files should be -used at runtime, depending on the current configuration. The selection process -is as follows:

        - +used at runtime, depending on the current configuration of the device. The example used here assumes the following device configuration:

        +
        +

        Locale = en-GB
        + Screen orientation = port
        + Screen pixel density = 108dpi
        + Touchscreen type = notouch
        + Primary text input method = 12key
        +

        +
        +

        Here is how Android makes the selection:

        1. - Eliminate any resources whose configuration does not match the current - device configuration. For example, if the screen pixel density is 108dpi, - this would eliminate only MyApp/res/drawable-port-92dpi/. -
          -
          -MyApp/res/drawable/myimage.png
          -MyApp/res/drawable-en/myimage.png
          -MyApp/res/drawable-port/myimage.png
          -MyApp/res/drawable-port-92dpi/myimage.png
          -
          -
          -
        2. -
        3. - Pick the resources with the highest number of matching configurations. - For example, if our locale is en-GB and orientation is port, then we - have two candidates with one matching configuration each: - MyApp/res/drawable-en/ and MyApp/res/drawable-port/. - The directory MyApp/res/drawable/ is eliminated because - it has zero matching configurations, while the others have one matching - configuration. -
          -
          -MyApp/res/drawable/myimage.png
          -MyApp/res/drawable-en/myimage.png
          -MyApp/res/drawable-port/myimage.png
          -
          -
          -
        4. -
        5. - Pick the final matching file based on configuration precedence, which - is the order of parameters listed in the table above. That is, it is - more important to match the language than the orientation, so we break - the tie by picking the language-specific file, MyApp/res/drawable-en/. -
          -
          MyApp/res/drawable-en/myimage.png
          -MyApp/res/drawable-port/myimage.png
          -
          -
          -
        6. + Eliminate resource files that contradict the + device configuration. For example, assume that the following resource directories are available for drawables. The drawable-fr-rCA/ directory will be eliminated, because it contradicts the locale of the device.
          +
          MyApp/res/drawable/
          +MyApp/res/drawable-en/
          +MyApp/res/drawable-fr-rCA/
          +MyApp/res/drawable-en-port/
          +MyApp/res/drawable-en-notouch-12key/
          +MyApp/res/drawable-port-92dpi/
          +MyApp/res/drawable-port-notouch-12key
          + Exception: Screen pixel density is the one qualifier that is not used to eliminate files. Even though the screen density of the device is 108 dpi, drawable-port-92dpi/ is not eliminated from the list, because every screen density is considered to be a + match at this point. +
        7. From Table 2, pick the highest-precedence qualifier that remains in the list. (Start with MCC, then move down through the list.)
        8. +
        9. Do any of the available resource directories include this qualifier?
        10. +
            +
          • If No, return to step 2 and look at the next qualifier listed in Table 2. In our example, the answer is "no" until we reach Language.
          • +
          • If Yes, move on to step 4.
          • +
          +
        11. Eliminate resource directories that do not include this qualifier. In our example, we eliminate all the directories that do not include a language qualifier.
        12. +
          MyApp/res/drawable/
          +MyApp/res/drawable-en/
          +MyApp/res/drawable-en-port/
          +MyApp/res/drawable-en-notouch-12key/
          +MyApp/res/drawable-port-92dpi/
          +MyApp/res/drawable-port-notouch-12key
          + Exception: If the qualifier in question is screen pixel density, Android will select the option that most closely matches the device, and the selection process will be complete. In general, Android will prefer scaling down a larger original image to scaling up a smaller original image.

          + +
        13. Go back and repeat steps 2, 3, and 4 until only one choice remains. In the example, screen orientation is the next qualifier in the table for which we have any matches. + Eliminate resources that do not specify a screen orientation.

          +
          MyApp/res/drawable-en/
          +MyApp/res/drawable-en-port/
          +MyApp/res/drawable-en-notouch-12key/
          + Only one choice remains, so that's it. When drawables are called for in this example application, the Android system will load resources from the MyApp/res/drawable-en-port/ directory.
        - - -

        Terminology

        - +

        Tip: The precedence of the qualifiers is more important than the number of qualifiers that exactly match the device. For example, in step 4 above, the last choice on the list includes three qualifiers that exactly match the device (orientation, touchscreen type, and input method), while drawable-en has only one parameter that matches (language). However, language has a higher precedence, so drawable-port-notouch-12key is out.

        +

        This flowchart summarizes how Android selects resource directories to load.

        +

        resource-selection

        +

        Terminology

        The resource system brings a number of different pieces together to form the final complete resource functionality. To help understand the overall system, here are some brief definitions of the core concepts and @@ -671,7 +675,7 @@ information is applied as approriate) and load them into its instance.

        Configuration: For any particular resource identifier, there may be multiple different available values depending on the current configuration. The configuration includes the locale (language and country), screen -orientation, screen density, etc. The current configuration is used to +orientation, etc. The current configuration is used to select which resource values are in effect when the resource table is loaded.

        @@ -710,4 +714,3 @@ SDK matures, this section will contain information on the Internationalization and Localization features of the Android platform. In the meantime, it is a good idea to start by externalizing all strings, and practicing good structure in creating and using resources.

        - diff --git a/docs/html/guide/tutorials/hello-world.jd b/docs/html/guide/tutorials/hello-world.jd index 4d1e9cdf5b67..79b723d162d6 100644 --- a/docs/html/guide/tutorials/hello-world.jd +++ b/docs/html/guide/tutorials/hello-world.jd @@ -29,7 +29,7 @@ You can then return to this tutorial and ignore anything about Eclipse.

        Before you start, you should already have the very latest SDK installed, and if you're using Eclipse, you should have installed the ADT plugin as well. If you have not installed these, see -Installing the Android SDK and return +Installing the Android SDK and return here when you've completed the installation.

        Create an AVD

        @@ -80,7 +80,7 @@ Android project in Eclipse.

        "Android XML File" will also be available.)

        -
      9. Selected "Android Project" and click Next. +
      10. Select "Android Project" and click Next.
      11. @@ -147,7 +147,7 @@ Android project in Eclipse.

        built against the 1.1 platform library will run normally on the 1.5 platform. The reverse is not true.

        - +

        Your Android project is now ready. It should be visible in the Package Explorer on the left. diff --git a/docs/html/images/activity_task_design/ActivityChooser.png b/docs/html/images/activity_task_design/ActivityChooser.png new file mode 100644 index 0000000000000000000000000000000000000000..6c20afbbd21cb0b24b626ea786d5c5a3e6c38071 GIT binary patch literal 82669 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/ContactNew.png b/docs/html/images/activity_task_design/ContactNew.png new file mode 100644 index 0000000000000000000000000000000000000000..decaaeb0b1e498d5a19bcc3057b98b3053413f76 GIT binary patch literal 82669 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/ContactView.png b/docs/html/images/activity_task_design/ContactView.png new file mode 100644 index 0000000000000000000000000000000000000000..5eff2ba6d1fc256e9770eca542f2a3ea7ecbaaa2 GIT binary patch literal 82669 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 FO#lu$=so}d literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/ContactsDialer.png b/docs/html/images/activity_task_design/ContactsDialer.png new file mode 100644 index 0000000000000000000000000000000000000000..28794b7f2576abf0b0c22131cfd56a827705fa4a GIT binary patch literal 82669 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/ContactsList.png b/docs/html/images/activity_task_design/ContactsList.png new file mode 100644 index 0000000000000000000000000000000000000000..ef1b83f48db19ba96b7576b0f1965abd616c1381 GIT binary patch literal 82669 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®ooldxzc{SX9M&6Q! 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/HomeTaskBasics1d.png b/docs/html/images/activity_task_design/HomeTaskBasics1d.png new file mode 100644 index 0000000000000000000000000000000000000000..bbb96d9b33d96ab0f9d3ff541ef25fc68fe2369b GIT binary patch literal 45696 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 X&5i5&Rl*q<7#KWV{an^LB{Ts5%#jmj literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/HomeTaskBasics1e.png b/docs/html/images/activity_task_design/HomeTaskBasics1e.png new file mode 100644 index 0000000000000000000000000000000000000000..09dd491cf3357bd23d47712d79057146c364abcf GIT binary patch literal 23046 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 AZ2$lO literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/HomeTaskSwitching1a.png b/docs/html/images/activity_task_design/HomeTaskSwitching1a.png new file mode 100644 index 0000000000000000000000000000000000000000..de79aaf953eaa2c513eebacc6fb9913e6d7c8928 GIT binary patch literal 20359 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�zc7oeG+bZI#(!RTycQ_xpS$+; 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/HomeTaskSwitching2.png b/docs/html/images/activity_task_design/HomeTaskSwitching2.png new file mode 100644 index 0000000000000000000000000000000000000000..dee58a397a94e6ef72a03a3ccdef05ea63157dab GIT binary patch literal 41605 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 Hl+XkKfr@Pc literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/HomeTaskSwitching3a.png b/docs/html/images/activity_task_design/HomeTaskSwitching3a.png new file mode 100644 index 0000000000000000000000000000000000000000..0c90a86a1ddb82ae9c2baff63a017cbbc95f969e GIT binary patch literal 26125 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/HomeTaskSwitching3b.png b/docs/html/images/activity_task_design/HomeTaskSwitching3b.png new file mode 100644 index 0000000000000000000000000000000000000000..4a16e69ddb460fe791ff3725658288ce3bb55f29 GIT binary patch literal 21663 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
        6f%D>TmdwOWUMt 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 E03u`hod5s; literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/HomeTaskSwitching3c.png b/docs/html/images/activity_task_design/HomeTaskSwitching3c.png new file mode 100644 index 0000000000000000000000000000000000000000..d7789aa8f31fcfe550373a3fa144873f61741d55 GIT binary patch literal 16329 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 S>=_ss7(8A5T-G@yGywqHW_!i} literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/IntentsDiagram.png b/docs/html/images/activity_task_design/IntentsDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..0ed366ff721d90519229797ec0494262e33c1b36 GIT binary patch literal 37600 zcmeAS@N?(olHy`uVBq!ia0y~yVC-aIVASPcVqjn>GU66uVBmMmbaoE#baqwWns9;36?hi+q3n_114+uE&Rmet&mscUBhjfkV$_#l(78 z7+M6BJ<6(i3-#Dz3a>n7V7$=4o4`2R+|K6Afn&#ny8d|o{wd>i*i6ZN<5zvB|8B;U z9yBp1q%36E{h#mJ@`U-aZyXM~D;-i=;KRWBn0XJUfP8brv?mGaEQP#Bdj47O=xwSk z`@q2J{_wBnu4IOQjY6D_E(|N4D_&Fm(f0VENop*UqKrIKp%{b5-3b!{GUor}e4_d> zQDw#HJzN_#p2j5b&lcYk@_T{o%laJ`au{YUv|YEf-hwlk!D70i|8M^7IooT)IL<9B zuoq43GHo~@#ne#gtft@XJlm2XCvEb{*H2SErLi)s2xll^eXQ&mczaWT)JKVi|Ji$r z&+j)4xL_&5?%k-v!gsN+$LZz*UxRxgl~>kh^1isWaTd>ApL1vABNpG-W|3r(zVpmZ z?#i?u7C)}C#IPn8usY=)daRUUm{=Ixsc=$fCEv^Mo6Z!ueNt)FIy(K7k5=05$)Ufm zG`4l7ExH!__PmwOuBfVYzubAfc;8E&opoX6srOs&mfz4h{-^EejHkOq=Wm^Mmhra5 zZl&LR?VQI=)9b_^GcR2CG;cAxq1Hy7;Up zy|MH#_d_?q=St%JFWi40VL3jj@0g5tk9DbyuH9FcUni%u>^SmbNkhu<;5N;m<&u8q z=kJ^!HBD@0-n@g84a>J#es-A_ye)>$>UrwBuX`>(xA`>neDM7G*b6le&$zyK>Q!2{ zXs7qxqpqqKm-eOZK7I3aeTdEKoYh|I%XaA$Rjyq2+Ur>8_o$h-uI~E%m6eyVH_Erf zSNQs?b;nJkw?2rP7WMw_iQS#~!8==beO+R^I{AO@tlPEaLRMd`PnKKn?kj!$rD5K@ zdr$06SLb|>`xbuJ-e$q)hJOc7w|}jlTaofV;?2kJ2hT0M?4Q%Vv;Dqpu7su0s_#AT zZf<_QRKMxC$?=uP=lh22>#0cnGwbo!ZAob_JfUhS-RGcCX0D-X*ot9^H{ zeNX=n|E&3vcJ(vl|6SUD;eTn)#62lHY96xRJ%1|nyXj@#`)g&4B!As!IHSO)T(0OI zV1Che#_teq6RR!HU##3Pk>~!*M-dF!OkeCL7I%2hvYz!^?Y)lu)P^Mw>|`8YEGd|I z!uFzMp%$m7XYk5^moYQVZe~`xv6i|vU5b3_H`O&X(6st%Nbl`g^S5Sx`|x_jt9O@+ zFRDwaNIjE|HQkqNlw!5D{AACmIj5aY1!eD_IdyaCgtLOTRd&n#HfqoA`|I~UW&*oQ zOz)jNcm3sbKEC)e=Zn&Bj)!MC7w&uhx9abHb}n{Hxln#r()-q<*jEqb(T=kt$#gHuhw0ex@F>* zTRl%U=griLys_ryn{{)#cP_D+U0n3@#-E>``?;j_QsR1aO0iaddcsq-L=4S>wkT<%Ojqjy4xN*eOIULuf1>f7T0cnm-?mpez@!c=@~T_ zei=O0Kcu|(_@d?<=M@W=s;_TnpSP_?q*u+3yDIOyQ?ZXg)&JK=Zk(PM-n*Xr{u19~ zdwJ)6s(o&jYo7e^UdgqJa}S#Dxi9vAHvjFjyZc#mkJO!wS@ZMSR+Ei;J~cmoK2P-g z)g$p+v;D7!o3U>Da)RylzvrxS3&a<;WjMT2N)HgfSka?5)x=bu*Ibu>uEAc7uxXBM zfm1rCX3ni_TFU6g%)2fA%~}~1Ki6~XcT4T;xbx{wx6Ro-fi<`OaQt&;`q^~Pg7wa> z3(60L1ShTNoY8P&Q^j_dNlVr}nHAD)66ogktT|`vocVip{F&p_n>1n4q)Yry%cctN z_6>a*>VB2$>RwY7Q!&%qTOMuo{ciAn=7p74R9~%pt^7q^a*p{CX-z5S$BvV|mo2RB z{l4-2?}W1BHs>ErSo*Q<-rxIc#D zV(J^Sm-k9HoKe1LeBtz^=&SAG{Riq5Y`(1hX#MoP>;icW2@k%i>J`>Ibe@QO6zI`@ z)z0b>vZVEcxS;LC(m+=CNsIW8R~(xq8*0^NaZP-B#T^wn(fg%J|CSs(xwK`M%YT)J zORk?}UH&F`Mv&ZmKl|i)Uh}PHOq-fFeWUi{t2a0KT-VvQX8)$iMLb20dF64JEH~F& z`*ZR$FY8BfzL*fr6ulT7sl8X?Vge^cN`;F>y^Bo@UCA?lga6g`x_VTMBJHDr2A%9^k&cQB<=UStE9Wlu@JmD@&1Iw9snK*_U1`H1ta84+(V%TWLD)6Z8f&ae*=1m7!Dw;AT@Mayf zHQ=mMydl`d;q4-z#2VQ9!u^cm%L$)6*q<0aNtH+q&$;Pmg>CJ$)?jvd*5nE&$OM{+^0Ny^7PGF(?6|~)2m)rekai8i_OzL zQG1kY4*tpbr^Kk*_`4~tDSO9fr`@e?t;#MpT=P11b>(%%3Ym+{pX@Pt%5<4YT~nS- zdpF_Z1lCPYi;fj-{*=kJiL1G5qt~%he@^WWiF=b5rW;_r>fQRp)tO6{E?&FI-Phg! zddzw5v>io<-H&+)`(A!r&3-20Y_9Gm9rv|6*4E~{%H95Et?Vh8@HuB=wfJ&&S?;=C z9Z*?Sb@xl+A$H-azgPb5X69{XYkKRf=EQtB%=4tdyinPj!nQKfB|M_xQtNAzv>y6Q zD*AMLN_M)@-T}i2YuZS-)&jbN!}8Ri>jaPHRR zwUbvzuLxgyKg%G)BDu#<&~)pa>Xi7cH@CDlEIt2^Yjvcw;yE_%}PIKi~|8I5pwqQ-dv_AO@;OX=gSfotQ!(qQpQfG-xf1Fc zb8T1C&RfCl`3`1r`_iuWy=w6jzK82FuD8!yU3;W%=I?m#}!GU(J4@FZZEV6zZ|mp|WO_oDvG&yp|2k7_=NUpjPf{i|-DZvA~zbu9Ib z^~!6?fByUIe(QX!y>^&NcvslWFyZk1e>eTUy6M zO|`V*?`nz0<(tckE4?dDS8126&U$_FnpI>|j(eZ-^$G5p|L(7xuJM!kf@CXO`=o+t zZW|8#tj|?EIB`SUt-LiK#J#_4+|*{vTF=qFVd0ggIUl09`!|_4+8XP$&-lyad$ulF z=HTrcOi6Ypw2!e#L^}4g-ni7ClErSgrMZCfliBvh8G?@#;ukIcn{Q{OQ?dKl(i2PC zTqS~@>{QVE#B2Uj`LdAog9m@2x6c>Je9o~^V~V7$NS5QoVy`_)c#3-!7_OGH2WI z#{bUVd_Qt;ci*~Z$&$9vuOmHyiSyR2jlUTlC_d*+{+{o)G3?{wN5|%0{ML2w_UeBZ zH#98%pZ4#~giX8W&UA2S_`%=*|8Q^^-_Cd9p#oBipNceyxoa;Dz1Wr^Dt@;*0Vf1ZEt|K90yH-G&3TTb^u);@)z-!2{XoBwBr3UKUC%(?#V z!xTo*8ndoHnk#lcm0S9Iz1Tx(-q%$OJx+&{JR1Ko3R*D#czP&YEZyzM>C=yDsX ztY^5rIljDd3i}cU1_sUokH}&M1~F9-X7mhF`M|)Sz~JfP7*fIbrj|2d%F&pva59=0H?@tTw1MJ}xc zW)%!lQ@jstWE3iLU{ZNndN_F)3SJT=CJvp*ibktmcPlpwS~DB;GDdCY2zYK-Mm7!IqIzY#qqJegr~ z!;H=at5pxIf3dN2@49K9d0%j|Fx`1-pFg4ZZjm;pLC&j5?+T77ANhIUdP~J>kLd*$ zx;w25PFOZs)W7WblEhi*c3IMF=f3$e9w{3mayA@!C|G~;`tuWyf4!=w$klpo zLW_3?`=Ro4mtV6!TgH@ddnrFVk3nYU(Mva5)yi* z(!z7~)nC7VFK%uKejz)B&98J8+vyv;LJ2pX7%hCflU-MC>X|fS1x`(0UtbR%-q+G% zat}Anl2{l$vBAT`@WcsLmkW+@ad9uCTo%}F%)Gny#HV%7Qh(2m(ae*Z_klC#(DJzT z$2$sAS$nR%^*WGX@SvROE~CezdNY~1rMp!kcdnbta9C~nN%8YmOmejh!ghv225b^$ zJAL+*yK(FnwlP~6{Nup)>2p_=-S%lrcv^RRSHjbSB8>?Tx8?j>XI8!0!Jw!<^R}yV zlve6y-PvFPL3%RLownqgX}s z)D@FWYMYyOYn=V{O+e9loBYM1>8_EIElZBHZr#j~bm5Mk^O`$nRSs-;nI`n=OYOh% z8TEGz8GgiP)|Aa+IDMm4=)%jAKU@0Vi^uIPU8kRyq@@`DEKKQa$*0YxDwZ>4ew~*z z)%$w0`rD+XCj*lfox3}quhmPz!}I=(wac=mTX_;op+2Yx}hCN83r5 z?Oe9}=lpnfn~#^R>I`-)V{&_XPKCiEtJTZTOIUSn$LtwyA@&B1NUo~geNdYaOAK7P@hPvO$nR+Lqox0z6yusZGRpA)9+b8nc4 z$=}>m_fzO@Q?li8yMVQ`jNkSi-ZA^H->W~NxAsO_S{^UU3_n}>IzcllMs(ViRVi+1 zVQKrDyQi&*j}KX{EF1bf#PNLJw#Cc7yyRN3x9NQUc_)4}VMMHVB zee5Eo)!uP4d&SokMwhScoL9W%N2S&B=(#_y8BcaddA)A&#bUp(eUpSzN^HWofp7-FnyvlRZq&IezrLHe#n!3#VdGhpRrjtwhH}RdE z?4a=ba&PXc-**=W+^h0UsG9tGx737|hUN3?wV(Xrk~kVYoq^wnLHP?e(|>0sBfk$z zBq8{>Th4XT&895 zaeKdSdY-X+l3z9zHY_@jc=_^)RaY!uPhGv-G2BSXtE0%d_2P<)FG@^Z*^P{zYt?!h zSgu(0Ofy6KGsjFri3yKHa=vq1oF-OWzExh&!}{BWdy}N*UR`y2mX8UW-u73^x&E0h zcqz54bNz47Ex-cjN6D}A@kW$DPPrMkTvg{S(J}j2 zDHW{N-?`|1S7JqZyFs-VlilxrKebig_ni#X7J0J#yST6KU+$x__KTwSRn>32w&Yx0 z_9v-LkL2QhFFd+qYSGn6SJ}J2?%17qQ)-h*oTCO4ugo2Noq(8%g40SbQmPg&`k$~z zwC4BY$5DH$?ypj<-nr>*`0=~1ROR<({HhYK5;@Qk^+P_T=F|SGAQu4g!+SJ*qPC6r=x7{jzm#y8o4JW_GzNvU8m{>LW_0#HTk;%5j$wrx^=5t{z@ zmi+p4^99$|lZECVXKpXa)ZVIAsBktvYFCu{bdmqxv+mbgWs5v3dUaU2na}n6!7sjd zwpp=j?^V3yHDm9>ljSRWZ44fM*1LLq)y{=1b4-^>r|miE8=0VSZC(`XMkRwqd$%ea zRxHYJTO6^bBcra=y}OAcpo2S!by>%U4OS0{B>x*?;dY8{hN&ds9wcJ_L?5FH3chR^uDNpRk$Nwu%c>XTAzp{8I zXEgs6o5_#%WRz|`Wc$tTuv&PT?*9eNN=oaNoX*(k#AGJ3seWhElitjZWHno<;>SAQ zc5k}yRdU4fSqKWw<>1 zmT32G^=rbDOny2(ec|buymS9W!wqjU*4ceszf?11epSN5>B|e7rbuv=|NnNfH9Iru z)Iy=%Tg8Ik?LNQs{f`H|t|6ai{rosFxZOS zckS6Fw#n$VR*~M+=2J`eYS-_sy8G*S#jlUjTl)e4*q;{B%sBlt!Zf?e&4_~L5YJZ;h%P9M9{)yMc zlg+|>?ru$g|6u*~JzM=tgRL(5#`{!d?E4B_91YmQ&PYSDQiq`vaHwW^1~ z)p&~^_lgc5o;m;Rt*YGTllH$q&pZFepTj#0^DoQK+wuOwhyV6S?^2D}AhwU)b4q;OkHB-T!9UC|%L znFfs^Ju@tHf;N|(UHE+4bQ=?~=+;O7|Gm5TyZ&qG*+qqpe0-5Do(+kU+wGWpTlRcO zJ*)3#^1eCq#MDOx)6cN+cKwL-a^j!(=>G|UJDHLOsv#A@re5cxjgQOtoRa-EpxXrHp8pml-_pE9?ht0;P4C3pWLW zouj||M1(eKW`8d(e(tv~uZYP$Jxcbfj;vL(+|Seh|LotBwRhpKE8nhPpAacBOUv*5 zzh5k|hteB88H5U|R?V=nac7F){w}orjrIH^*Z2Qp3DbAsQSnq0ry z7JmBwY|oaG7i(Plj(yoWfBoF{nJI5)UOl}f`rKt#4Y3(49Sym?r6+?M7BAV*ap>lf zyr!FfjvaHW__B8O>fI$TFX`8P>~>c7dN=L8Pq6b`zc-5~Sbcb4HoM%|ifyf%|B`=P z38!+|otv+@sMy(U6Ymgp58Gc;^lO{=@%v^6%ecd)#m_e~d$hj(Z+1>jj)Mckxob)% zo)+cj=UZHKDX>t=-)`akMvwE(OXWMUHJhufCp6qR{=Y1&{#L+lN!gW$-uoqVuJ-5R zDP8rWs`G#T{2j+N8(pinvPhVHef6$<^|Agrn~$vhk$9$LJ`evgrNV~i%_U8@ zmb_k;-CXydd1d{c8=n~FWoIW`shR+?XvVoKX|)ID&lA1jcmCcRpY_WM?!Wf$+akZi zmPe;(&Xrv4Dc;r7_wLi4?O%RGzjkwluonCb0<-`ZxycU0V zKPgSA(0%!J@6NVEbBz~Id%9EZ-yF+?!t>J@4y&DiXV3n*-DVx2I0t*sNXt z^vZw6zB^BR^54k^U$T?i_UE&*>+Sn<_trjrlK*hkiMpWcj@JY)UYD^6?pG!>j+D7l?B|SZ!Y`Q+_`M=K- zo?WcIIIZv87a^g4cfK*N@A2mpewp3YBg3;=HR>+!_D5{ON%m<>{S#f1u3bK?raJxe z7w1X!rHe8YW42nhGWN^-`0(=LDGgWWxtVuLiWZ#I;FY&5V$zhFY-17O)|9^g@BEv7 zHzTKbE&#>x)@dE?apq5C&#S6m^O4(q?A*UE>IoNLwxw4w*Ut7^#y^j%=ArXz=BjUB zw%z~Ztjtya;jq2_+~2>qyw#ql`qqE5d=3CEg)vhgn zbmi^gZFO}^m?ZDba$RQ{T&xj))>G%0%7ri{p4qof9T5&bBs5P|{{O4o(4Bn}MceI{ z*1Y;Jleg2vSNiFkB%>t7sLJyvCMNzn_W1pJyMyyL6rZ~o#FL~yX?t3E+}wSS?zrpM z`~G5_rB`pKt@`P6v8mukVWD=diF+eC%`-okz56)PvsuY`wSWDVH^#H(Ut6!HuB9Jl zGQ;QT@qe3><6Vzm-MVH@>{mBXXJ2x!-oEn6gI$rYpZ9$Y=9B(q7WwPpeQ}SIz30CC zI%2meX_{8;qMC{+_m@3t)NDyfogPq9?!3u_ovqH z*YC)-Q;%2w|FQr2&1$RN2X2%{b8gtYFE_QwS~IWcn)vc`UYAGd_O{iRr(L+bEorBJ zx+~i$tiHV2eC<=Q&yN{4ByYX#7JcR8!uw_UolCxzZkTO!+~`Xl=LXBz_wVYj zRjDzSgF5TwZzaV)q#8+lVPlRiC~MS^?A)!-*ydXv|7?3evh%xT5B+m?g?`WFRXtw5 zrorFJ^HD9o&$=h(rj{~u8sro;`|V)l{-9Iv=32nhQ|8*o{bc6L zetmu3|H_v7x_iHuS52Pup4l4?s65aVO1N<)*Y@hS1v$45Z}*FCyCw6q z_5B?)_gvni*1`2VpS@K+wzc@z```C9JDVr}+ou2c$Uph?nyH^xm0jFC=caJ+&yVHN zyZ-0ipZLD`^uMir-@pHM3w!tQtA7yx-qYr9+VsVp4ezin-+x;6X{-4IoqNdzvk&h* zGG+I_onLJK-}N}pY(HUB-StA_i*-AdQs2hSu4g^F^KAFL+b>#XymFp>DSd0fx7)}5 zzCX)nP##^rsVi2G@dkJL!*i+!q`BLBKg^mnYtp1ifByWryxhP3``z;Yzpn4Ukh(#< zZr_btkNl^0D(7hLXx`+nczjRK=T=M24x8VMrxsL9#_f_EEA6;bE|L(KgpV|CnwKG3ja0otq794gpT$q! zjjW#Gb@<0O8>hPB1B%o5;}_?)Y`%Zqj%D?eo&4T*Pb{9?`JdOiKDTXonqpPwk7^Iq%*_x0f8;T!{57(^N ze_y}v&!?a4>YW~cxb@d*ZkOfs`*%6}JkO*_j`gSheAs+4-D}#>?Ur{=YuD<(xn)&b zqTpGfnEG_u>8#vOTaKorzB)N+`ttVG+up0Jmy=1JzR&FY;=P*E+;URV&AbbC-}|cl zUGrqd>wo3>Km%Tb)xHu5?>x-EL~y`Hm;h)92Qn_aU0~byLb8<{Ftz z;uJoVc*7;!vFK~tDJ7>S(Ler^EM6`A`8mn?LHu_$zD9QSqs6;bQxD$hD|n@6QI{t2 zzTM$X^Jk6gT0ItbW^c6N;Qo+2bz}BEwGTn92V~8jX&FlkF4yJye{;3)iFWs*>`nV^ z9K(D%H&(|Pgg$vPsn9v6`gFVP51*nvJ$~P#cKp9vyLRDT<}ef5_39O*LKs-$H_}O${+mOF6z5a;P;zAPyu3l_vW_+YZlx+ zyxr{GEz484FMM0E)+9y5GGyWOFLS-@{(b(o=hLJ0;r@}6y&vuU^li%RGJ>(qF(Y|`8OeeI8rw0%09{Y>v%R!83TzxmpW zc$P+SE;$~v>Fct0FTLI^$Z`ASJh6VsSMB(_o6WSQt(mb^qCLORw(MTe8l}e{-a2#s zc^LgpBj5MUosAJv?p(H~UW>1}{b#qB$e|;Nlb=ug!h3&iROFYSx-V-su9l1YcyRUk zf1khJU!HjI$7kV_;rs1<>dZ24hVPzcGvQQpRn^1!mXCiOKYsUu;)c)4O`bDjOTF~& zEb#dwy2G>X^@CR&8=2axpYK`m=ZEW(B@YYUm&v@FYc7~I@owXW%LkL?p9=3+WcSbY z=vuO6^|>|w?)TT({{7cd=*<=O7EhC8MoW-I%y- zU76mjS)X0?>D#$q+iZEOA0OVH+y80XvI_-&wjVwg|NHE^@6*ok6j@EW9Z>h@?Z(I3 z{cn_fSzKa&>(RF5WfLz&wjbc#DScdT;=CVPbFXBk{yV$8CffM&!VK+l8-Zzimn6Jx zj`)@*yMm?T&hh1vLOZ9Vec!*9`_7wLbHDDL*>dMg-Dlwk%Xq$JY`ZnDZSTj2x3`r? z2Y-;<{x9U(wEHT)QaoR^-hQ0VJ9*-(JKwh*u(^C#+sIF6-oxa{>9>P-n-@QMeMfMa z)g*0G=giEP&O1zv&$+%SJo~a&I8EDXI&d*zX$>rUKvv$n$e|_+tEc-04cgFbzFZ1*7 zh+6)8c<@j5zG&^UMcTX-d}QX?{pa!I%Q@D9d6QYRuUV@c z*s${UFU!}<<@fz4ao-+#Us${DUF%fAiOf|=r>l}@OPG~LuUGHgDPDg!%y#t*&jWi^ z4}3G%Ep2~1|nf25J_op8(aJM?uluc<|df%7x zL+wKcrEB`-!9TW#iyvNgd-CmGFH1ItW6d5%BscF3EGv7T=fND>cn=4HDTKU%MA zo*TI{Sr@1O@I9(-@4s(r7vZ~I zgR#wbyT*puspShMMd%z$`0()~qt@S=V<%=$P5!<+fawKOe0)6L+#HUl3@i24Or5yT znA0F7y9$(&%eL#bEi(7TF`p!#*G!voq~gf?<|_>qqgHq(?K6~ zsdo~#*lA zr^sTa#zT_=IszHLJp8Kc!r<^lJzD3OMWYn!3MU3L#U1u$jxU*?H#RovO%9nZSX9EO z!auLF;!%3py?gg;%pOj2E_M2+_qbJXUoa?^f;p|GKX2rmU-8S(KxRj?_ZpML5Qa$= zOFP+hQW$J3g9{E@xS1ZS3=nvK_ztgRPTI*vUjYk#{~s>y3I)F=^GxTcF<&S#fB#OK z?wylCGfQjCKP+I*{?OTYaPcJO@*gfd{5l4VQ!AEoR{nSZj*focd5g>)+5Y4+S1~fK z=VewSNX&nj+}0~=1VI+aW~u(?lNuH$fhl8r*E|B(s?6-Czh zHYy)i37>j&$?+hsazjW@daKjJwmp`cSu7t<-vvQjd#kucAo;>%qyqs8Q z4$4#0OIhX>E#R@&au5+bAW*l$Fv>upBDQm#L8ML}=iJk;-g!AitY`c`@6)`#={EPd z|ESMkSFsG>6kKAhutr<;c*gySED~mSC;o^MJ?4CVd4i2XQzC=PBX^GV<{zbm?I!l| zs?tjIOe*=9wMylflCN;~#?q z6C9NI-5RvydKQ>lW|h`gJPNhX@aLO%*X)r_y@y=Qr%%V1D=YLD7u?=va7@B%=MTvP z#pi>curn-RU)*$k(ub4Ef+ZSH3hP52Ni*eL6kB7pGa@L~?c7Dy6^w-^oi2Ukj=TsgD zZhN}rb{bcZ*}Sa0mH)2zG$s^p+h+N+EViWu3uY<3W zWuNCf=j*7hD$tOfcW*-3u6EU(8(D0aW_LJVj%x8Rknmj_od0vzr^#Di2WFi7ecXCk z>aF!M>;L%MZTedM<^9afYDA7JaIG*;1@Sb-XF;{uhIAHpKV<;wZ5stdT(ZRS?=5&zHI&NZFvh5mTmsz+F|$o^wU*ae51oBe4QOq zrg|o%vgYZTiCg}hXx;5U_1U|ajS?!;)YsmbyZWSc)r%zFbv{#<-+Sdf{_)264d;0j?kTN7_m z`8CmWrHw^uMpoS?y->erKmMqm(yU*rawMWQ@$@Ix(@P73{=n7(oO~63=l1=bkLzx2 z?a=vgbTjv}WfS-Au3sYH?D28chL71N{;XlTdhMh2GnK#lmo0G@Q?Sf^`=)c^tkc$U zdqYk?^^9`;ERvEFpd%%}(>OdkXU)BhsXzbxKfy0^I%f8^@^ixPZ*S~d{OY7U&up8W z-)&}=|54dhdm+b5?WFXkSwF9=yu=YXJ9P49(H$EVoI{hgNO^}G4{6dg^gpxa;ps+?sIb?+Ug-MsIuhqv3UJKq>5^&DP?#n&@ zzQ{@6E_pgN?LFcWtvvHP|J=afg{SU_ZcjbAXsy=bg)JK9Arie(y?)`rB?`*L>o$pM ze5_smKkanUr$1q#eO!v_+4)kITfWYYaVmW3WE#6`M*yo@};S?Y{AqrtzgUYrSVbT^FX@VoENarPjU9)vEKO~kE+=S~duz&+DOZ$d z9g=$JDfD5<^~1kTUHas8Yt-SA=am zwqq~Loc7tfjkURZJF?o{BV9sXr$i=XxL8|S&s7OFc`OsY;;m=+MkNEMhm2}ltnWVK zGfs-PsLQq9b2iU_v!s{BCVB75>|5tnlzB1b>|Gh0lr%F&m$A)v-L#DU#m6_SJYKpo z-J~ONa{8BG^P-a*R!Xir2-ju9`kUGcqcI!$TpvKWeS3wnE>Qtyd0ln$;yg-)_e3#uDPT zx+_XYVRqj~F}9puyKRb+zxUc(Oq)D;r)c@gmCU|k`&ZTkyQLjd^GeF@yZkTjcI;F3 znKPrOFVaywpMT=aomM5UEH%f?jGEkLE4jG%F2ue$xgm7H*+Y7tzZ&=_Y)%X)X!yj) z=WX)#O5WBY-6|2?qLyp9IsMMQVr5J7FGXr!3tBeq)9h!mBJT`7{rml%U)JgiU+0EL zK1|!S82KZ(uTPsBJkcbzWVd^np~z2xISzZa-28q0z@d}&aeh3iozfwdz132_NBTqF z|IGfi>Z!Gv>}pT>=UbwK=I>2Ax$x>t(F?~oI`w}%aCmb|e#`m$+(p_(UYF8c1cEbe zJ<^@!CYzt$5axV$@r0{0@1L73lEqbt5rTY%KY_PkkKIyPyValpWTV}~T zT(_TJ_LtQ@lkb`nSwGJ)xi%-ZWolKYP0-E`0ef~8%a57ccU*FO>t|`*Q+D9ty|2~* zOK!RCIDBb)O>^R9-R>UIf>stAhS?oQtS3z<|28KxZ@pRe(Lbu`AHS^*UEp!?)*()X z+|{czigQ1GI=TO_wC!_;MzsTNzN*jb6iz)%{4@2gkmZ7PdoKt*e)IayvPbKWpN}`S zS9W*ymr2%J`S9UtTP~Behi_SHJ(zQEmUF?bkkExuUfVRn-{zm4UwkmS-#BMi>CBBn zdJ`Jd6DI5Y>zB7#A7yG;`}v^P+PK)7n$%lAoK(FP)-e5x;mZ}89~}!P zauq(^ceR^O@X~_ZZlSVnZP_d9_7@d=eU+Pg{g7<#mg{$(MOzx^nIxt@i`r!Ob?!9o zf4Q6PMKNvYyqUktbmGQ4>n1e#W*4xo)LSBGpYOcvTJ@(#E2Dobm3VsT%p%iHt|0%{ zUp^O_C>31V*R%EFO3&BNFH1}F<@5@M|8`u@*rFly-~U+Giz_Rw=U+YB{qTA+)BL*= ze>y*TlJQe$mUV9KL3y=A`5+a=pw3>UYh6)UQ9{pmueddP_O_43=8=EC@Mfm?>1e5( zJik6-L5#8Kr@7i%PC^=$zyIhJoLMivLTvdx?X#z{mX{^1I$ihmsxANjcQYCHZJA2M1?5Z!s#lwBD|w?&qH++b^$Ke`CUJzen5l&%9T1dr>m$dl#m8Dax%ct}ZpT zQkvM_%4YRo#oS}tHx^v-oA*p5B5tLjP-Vms-b}OS`wP!3S+~ZZ)AF#U+TLp_VOtE= zBx%1+DLlG$>-`zqZ}0j2@woi@h>eRjOvvj@X!Lxr&hvp=@}G5v7jJf@Gztp(>EE)_ zx_0c4r@Q3Nl8CsS%GFxBo!zt7Zth5xjqESlwBymOThX5$Ez(|QzSCnu&zZHJ2ZXQ9 z&RgrMv%OpOz#H?O5es@^o`VKDii=(y-8tjlm2T_(*0axTSZTfVy@7N`2R_S8?)kaOy z?CT!8(!y>DGpG#@0)Nl8x~|fHg0)&OZL{QIx%?M*=OlKzJbM0|z3uKy|HTu3Iez{0 zsmbH+O#fri&s84;{yt=VUuXOIm0_#(V=UgkULEj5^GMP+?m~B2wgjuHFDtHi|GMDJ zUs+v!Ur;yfMlQ$?)w`7R_5a__-)~v;#G^9Ra`~i^&+BbNyR6b2AEa4L-m1EKht!4o z19Oh2oqqaBGk95vfB&YaSY5_%-EXrx%lhJ6T<-7Lv**s9Znec1b(blc&x@Ru-x4!7 zd*kaO#;&L&;RAbDt_7pv3i z8-K$+7+9}KH(!qxivE4IplkWn3_~tgS=;kpZ%-1PZ@c!^Z=Q6KMWT{3PFPk|K4>{| zZvHp3mE4>4CNDWMBkb!zX@NO;H%_YO+irV2vrzCu)8p+88Rzy@tQM^>4hRhX}uSG_amw98j~e3+%a>{RXRoOKP;a;?uq3kN@c=kLGpNYEwowAGqU&)&t&+?OZ) z=l_{I6{pTkI9|W~lBexH+j+McxHtaz^{Y?L((38HCxVCDe*gS2^?Jx0yW(F57Bc_* z`SX`r^Ma>Z+-^#~2m4R+vOno%Wjd3+vxGTIWLCf_tqlq7hkLuN@8_zyrZ=1`&$GPe z^J-f6y)_N%-ks>%TV4L9RetWzqt-#s&_SO%N^-7PKd#_q=)44x!&#wa;&rHr%J74+e?=1OC)AB0*U6^!isej*OYpsy! za>^+;YcKY(MEt7$__uk-m9)c54}Q6_ho`5>TK~QFV~hH+gu3#?$H^5{2e zucl4zRAOq??lRL2(XHN9tR$eJVQ?X7+m)=>8G_bw9GVK8i~$}la_o+AK2w_J&RQ$> zZ&I^i_faW1v9QHq(g%Bj{hn7{UUg;28rpi9q_Pd|Fy8exAKLl=uZct;L7ASmeUEIFp6>`b0sS6x-O;nA$WFWp2VV?UkB z(fNHm_wH7;s&f|~-RE7hY`J;nJ^%Nf-cj2>9KNw~U;50vSSE>GN)ul^=Ra5TX5;Y< z&-T2Yd{=+{ule!&zswF@zxLO^3*Q|b9ryownv{CTW1`CmexF(K3O@5D{W)_eUCyt% z;@Dr~n!UBHN(+y8D~WY#2yk>nXiV!U=wwke^M5pX+My`JONE*uvwWYe)C_i4SLIs6 zpv<^|p)+i=YSn`Sj?C!K$AdC?*+d;6NU?3mCX?;vb8|I(_?sp@(HTx>49JJeswb)P)6ohhfm z=&S-uAZM1#k(t`_W~S-=e9dQf`(se@qSpae3XHeQnW~5RJ@;-p5$a*8z*(m>Pxk0d zlPB+*8Q!P1-z#pBu3~0t{i$qm6rd05#e|J6UfEm1mu z*?H!e*m_(tn6$!L-A zC%yN+_i257%)S!OC#uJoeywN;yvV$0)m76-b$_p?nJ+uq%?v97Q3lwu)FZDxNi36!()E6&6$sWbWW^Q-gJJxx8FP=DXCxYbN{bf zx6W+lnSFNqgw=h%eE)o2|Ac+*w>KXie*F9Ut9VBX+g`=b?LHz~B6Mq=e;woR{QvDi z5d-m3Lb#=X)Z6mq+$wBAjWaU*KK7O4!YtEv}uN~fASsDCP^l9?(UVdKAuphtY zo;r2PuDs9b_S@ELaakIooh%<%?gYwdSlUGXv*%n(wSg+33o%Z90 zBICiv=jZ3|pD_FL=Facus*4WpQ5Vyh^FJiU=gva;eXCcj@bK{9;9T0hlVe85(WA%2 z;`DU(#x?B>n0!t^SlGJu)t5!uM^6cIc79i3QoAJQxq8jPY4cl7e)rSc8D>;_>&t`* z6DBIVtM>WrnNeMM>@WWUj#E;zcrG@xovTSn+q>;wr=|aw?ib6it?2GvZ}LiNe%ud} zusLqMQd5moB{djqSxe{t1~N z?xAkK+WM6H*ZIyne@^Y%QGK~1>+!q!K3uKe4ym6yx$^$BtySXgo)_MHsgG>kEI)U4 zCG#THw+CO`?(3hw@2|VY$-cAl^PQ$HZQq_y_Ve|V9o)CukNMpWQsnoYVe)k!>z11T z7f-r;y=QKj)!Ot2G9L7DL+rO#HeY7H^v%0iD6t}F<(E@awF8QSmY?_V^ZYjTx0#7a z&cEZ&E~ooD_j2*^e4AM5JoAxyM2Rg&ux8$|6t!sw3k#=r>Cd(JD!i;fxvhW2+O^sm zIw$OwOIavH3Y=luk!E6f<@<(Iy>c_$UnHRzQ^A+ zlvQuF_UiT1r#r4cc;#Ky&(hpxvBEW64};aFva_>Qo?J2`{NxfNog2>8R%L%U#GVMd zX>OJB4J{Qd5N47!OgfVO`T@&$V*{p6iR0$tQfp<+;NZCAT)>pX z6cDL1ots--tykJ49rfT+mZFq^Z&t z=j!Fw1q+?rt<@xVoWoM^-7W(pMS@L-`4UZ3vTS9}C zRp)3cYzfj=)USQ*% zeLp6go%;Lt+1bh>FVlazt~y|TUMl=$C(piv$CgHye)h`#QskPT@Vwh;;)g|3Kg;pg ziEzFQ%eH!|leR5zxpC*wJ?4h9oSJijennqf9=`Px+ZDUk4$t?|rS-WlAFDsR7~V5W zTx*L}=bYlJ%##E)tJmy;jUG-}pLgtZb;Rr(WG?+*nxH+&|Z1Tk&;wW&M~RzYdrO%zfwS#l^#AQ~fQ+H<#CbqF|TH^ltt6 z7KKUQ*35Ty)!G~P>+nQ*_Txv+&9)U^u=(}o*rbIni?1f!cv-T`Z7!cK%L|D@t7AD{ z9o^9u<&16?eWzVq+-B>zlQ~^_lhiM@-Kj|L=8G8x`!|K6GCfv$yKYiHY;i&q*~f zX|xD2(3z3_s-dyeUi!argKWsW_xu0neJt*tU;9gZ`T2P#^))Jjhg2c-2T14!DB}Jjxzcc^x7S$UB@(F}j+S{kQgSb5rxLukXdh#OD1>R-5*SWzp@}{H*2Y zkBZFrp%Coia;GLzlJ%Cn&D<|+F0ZqWpYDqglvr4>BFU^xY0;t|Gad(DdvpHy#A}z8 z-mJ<0{zYS1aQ%<@)9ZhH+;B2uqfmGM_VQo)mzFR0*&Q)s`{%{{`p@EzlyK``Kh`VB zuEEK}ap%juXUy$y;Jo1xvXmp%~I!{VRB>mDzdLGZ8ayiRnSTu3l)i96L;;BYH@ZxT*BL1 z$~)`Bg@PL%2R@lOu)J?IxZ0GZHoe;Xig`j+>V?;dZi)&T4#CmOuU>0!Yn7bM!!YHT z+uV&SIX}C!It4}scFr-_-mod+VcXiNYPJv7buMRHs;Qvhu=pZ_(!xr{ss+-EIzpa3 zRsD8omN?fVy^0AZQ@{VsF%tV~Y|QWP>v_@a+W!5IYkhQoo?CoK;o46Bb8p2B6W-lX z-?iL5a_zcl4!AqQl?D);TDO92NYDUnO_T5byZk# zIqQR$+-37W+Pb=qf@eN6#O>&wn)bqIsj8~P{XetUZ`$-aWTPO*>C>lo?E0Y9&!iNz zfW7d&K<3+k`wr{kRzHJYf|3CDzW@KKb(Ss`*?T^bw|@Gw?bDaOEZfw_G5>5>i`Z6HulwhmR-gGY z&33u5^tVM{Zd>x7&3WFq>G0?Cg@@9u3qP^kGf0vb`?CI68=J?OnIhfaZ9r41)9sGl z(A!m1`Fj8MxBq{w-uJN9K)*REFsf+prd@|}wlG9jxEaV5%;ABgyTH!-W7+xgYWEboz zn~`-4lm1lt@>vEw3ACpK2MmM z&@FIo*F#nDX-yi=49W{Re)AV5@Luy;V43()N}2zL%C|#S-50uoL~1x}HQ4uhCkP4( zmf3bSIyzX(1TALca%f=^+rZ)NbHL%<6q&mpQx4nBND;i8Bl0~@e71#6!7m1vf}X%< zI}R|i_udpZGVMC2r$Ffxr;X3*&6xg(FMXwvy+3(H6J1TD(3{mZ^p z)zFYL|K>(fX&HyFj5Q8V4>B}w6zS3tS-e2>p@Gh~j~BMbdNA-j+$!6u@27sK_QJ#X zb&2N%%UfAqxQS#rw7l|VvdR#26uhv|}H#va- z5ozTBF@r{9O%bMrl8@|JRugRI@|=Exnzabsn@nd&G2=;pd|ti!3c` zoO-(0ey*@t@nwSK{KCS*Tf3@UB3?*B+|03|BI(@YyTRrBYekRO+Wr4?TJF}4dpC4e zUD|v=1q2`DfmR>o*&h0_vzGJDr72&&txi;Z-vwH~AZobTYX-{vX-}`H_FfVs*mL_(NryyOx$S}NbAO+lUibv$*e7*=OP*kxxEPQiSXDUZ((ZrBPPai*j`uw@P&k*}bA$P_y%-s99W?x> zIeAgi;|;zi&(1n{BT;AvbaBhB9e?S6v@8r3sj_xrm@?k0u zWP0;)Z}*{nnV}m3cUJ3bo>e}ja@yG6BvxB+YTTqbw!Z(~TM5ZHofDn3DN9JgV$;~?byl-IkRWpyLazKT%Y&exPB3fhJ&g(+Y}y% zUAk+$!JPHoP5tf1MM3MpqOVV}DsG(fV_t^zT7EzAU%zKRvAd<{{8#U(SN)%JIumC# z{odu)E@;5>L)Cp03WmzGo9xXD>Oh!iX~fRG7|wejv&4{q1~R zUGWpnYbO3(yQ+B6oIks6Xgoe4*d?{rZpHdSk2Qb3@1Mvoqw)J`e&@qoRyVE-2+B!a zY(K7M5q9zQm*VH=c)7WqCugn7`uFj?E|>lOS6!t+7)`R;PX@u>C9 zX9$0`e&458N9T0U{=f6*#`*TsrcT{j@X%?(t$mOGGXDKlzwiBL@#%Xwo@?0u`|TQx%-W`JNgVS39BC1a5A>)>Z)~D>*_<|*M5_;^D6na zM!~|xz|8Q^yuhdYK5MhDocvoOBFQeoHhIT}88!6{FG{D^?5Sx##?HcWv3SoMCl>k1 zH8Rr+zAU-?DlY1qkjVUg`+pTVmn6=V%T+!RoFVuB{XZUu8ygoNXGq`hlXv~J9W57c zKR({?{Ie-}$MShqS#NJ`b?=io=(0ZFKm zd9&x8W8v-I!nnL4mJU*M${4CzMk1w3b zuyA8RFdsY1J0;U&?&raKCtluO_9|=f`a^fhC!~E4xRD|hzenTSck$mpI#P@(M8#k4 zWf4Bcc|JZPYQN`-i?8-HooP-|Vt2EQJH{(vz_8kBe$6k>m>iiab2fhOY0R2Db0(+q zti^8qpFU3ft^KFbE}(T!Z7riiK_wG&&@{ErSF^(t-TxeF<@UG#Yf@J7?%$Ki`TPEE zTeRrYL3a73+B}As`*pP&%j|M*ZISPnVaz#spnvzRS82Zw-F=!_#wx$)dR+Bc(GrPX z>!}SFPJ4@qsJ*@&9ubyyGAQ!geB)=LCb8OA!^0#O{4=>Cy+Pyc^YGvEbAMIkW*%X9 zIJy65pS=FmTYnT7%OCj5L@FS@Jvv((c$U7 zS>ey#?7sB6*TYAgs~>;AQ+$4j=j08a8M-cA%?_8F@$bNkBNwlRhFV(gY<|pkIQ++j zht3NVWA|2xzK+!Bd-ZP1!F785*Sjk#e=c_GEip}WTVJhm;LqjK{yWxdu3kvdTb-e$ zWfZex#r~Sm@UX-y<`Jzb7IQzyUwY2_pDBkeqe~b<-d2k#miJS zilk`iTzmffwO(8k-_q4&RY2}|4fGchRFLDN}fg~$2t05eEJ|Wxb{!X28G^GEf#Yz#^kl%K?`f2 zf7!df|M~{SAH|Gnm41u!JA=3B|Cx5=>9d)4^IR{VeR}jpvQUE14r`%=8ztpW&SZhk zJlSCiS_x@dx$zF@G?a38Q04gU#Ll@<7WUaC+ZW^>SNQI_cim0db%k;_G8`iW4|s9q zJ?Ph4Y4LQ)_MaEDChp#H-?{VJ^}cAmzAcfT7XJGnv(RY7ots6Z0A?+eJ8OeirZVhZ-xjpx5s29xX^sktC#D1Rf9NCACT=TDlsyMVAmQ3G1 zvBpoNbV`xbClmWQk+(j5h}WIC>gZbQJsE+9rEfjw7Ts!I95vD5h^5@N`w#Y2sxL4( zmHBzk>{73T`_519Z|2Cjb*GzY(GLstEn-h@w6=RUBnEFUT@Z08^5N&Y?A^T=^VUjO ziM)UOV_6J`)Wg@)Tjwb^p5yDEcR7hahckqk|H&;=o$vRi?RKk^^J!h%T3ztm@Y+n4 zstuq8&=1a~`X&o~NZ{OHId^xt+?st4<0oJ2xY;}3iIIKQyK{z*`#lecg4!Wmnq`u_ zKln8E*6m%i$}4uQnG|pH<423w-42(S$K5-q(&6)N-?AyYd{lZ0@+UIPzPz*4KRhHv zR77lAtp3`SYfqlm|M6(Qid1-k_z5`QLwa5ueY@0H!Zjo$B)x;bav>y+x- zQ_iM2_jbJK2)C#)UwPH^>#ep03Y#z9P!aQ9wMx6u{l-U@Et4ubb8j!U++Sp{pL_T8 z8}@hgH_7|N-z#~}XcQhAb};(j*45V!9XedqP`UH=Gz;w)Z9)lElW&)HU5&V0@H090 zqqy4MUGe)p>|6CGXsCa0I+?L%{rdjCLsgR_GBUr2U8_8)!pG1Q_I3LHKTr35zjyoR z!E@T->ln&6gth)Lc+%amZQs24e;Kboc)&38;+v?_x8d>it-JsKd2a9JQTS+t4i1`G4UfPDqpSq>sLXJhx* z*;-pmpW{eSkV$u}SkF?q^XG>!hMXdWxxYJG3$MHeZHLUe_B4$*^9*laz?JEp>tpvW z$q>=_BYOGW{IIgUFfrDr_6@^^Ya%RdZEAetFVaXlGdhub*bUaB6hW` zPP?RqxjngBlMXhqMqK6lz<mj ztSmp6=Q0ExJlMD){L$(UUxlhq?n!lQbX3}?p`pQ1DZpO0@u-@4m579P#gduteab6& z&RAW3>fbX}YxB;NOs5r;7P{zhb53Lb#eKNhvtzrJOVo354MDDs$omN^1E){TI?G%q zXZuC&09U_nz(fQ0W-bw9jb;Ax?Pgp)cz)^r{q;URJ@XIgTNqT_*pSG)m_4ai=5>Jb zROQ1?&JW#W`V9Uu{|RK-edeyK$o8Y`pXXLaCl%j!I#a%E_m^JRTF2jyv%Hfh3fw#J zw}v%nWxylV20s-cZWn`PYL`M*u?lTmzx_%`e71((xxGsKGyh#*@nhnd-7@!ELHcb@ z={;&b`!Yu5gtc0-=}exq`^(%qS9q=t&pwj0&_heiLq%z(PYdVt>C(D^JSq zd~Y{zgZQG~TIr^{L8C1(Iv3U{sEc@iQ2+RCa;r-@>t8wN$&RJ{FTG4!-g3Y9+z`$d=jeBtR4|4k!%lNxtiKbO()X2ZS(7q77YU=8-%ctIJosO0u8L9Gc9 zDn^W52J1Hm?RD1>h-Ces>gUMzp;?f9|81LknV7)%+YN@=+d6|w4%OdVxIMH(rSSdM zVyA_j47YAy)Y!eYJo0F{4rpty&Y|0?3JmXVxC{3N-q?7ckxR$KbHi=v?HhzxMII$| z@Y&tq+7Q+AOYIdKmm!nQ;gr5-J7dMFLM*k^#lXh}l*Xr9DX^Yk`FwxQKa&OV|2rS6 zv#_#r|6C~>+qLMkIfGz{T50av>-XzoSFhaaaB`7;Wa|vBOENo-Gfj3lKZ)V+vUl(O zH3II$^m4c~P5C{k-mW;Tp*|sd+m53u68F}IuHOIi9Yc@c1yfDNxmOrx?O3YD=D#-e z*gD%NCZ5^5_W%B2n&ZG7=EKG(qcZtquR*EP^vOFMwkk31;Wsfc`||Sk^7<ncl+<6Uy;vGmD!~~f3Y#fhv_ZoWCUxcm(x^s?a@`);J?!N#fC*k_EtTT z5EPhvaK*a7!;99V)o@X)fvd_W^ ztGmToW~sS&oxb%#bbAkf!`7?b;)h=JY_9$G2_di>f+$zO8%!A8e8p_3mT9&Yg3u#2;J z)`nf3Yx(&KoLbaR*DqSoZ@%Y1MSE-Osl9s-wl%9AXE?0&y~^pmk-1O)uG38W14|{k zBLY`lzm~m4%3?!R`sPariG)PO@wq;GwRQEwhYt$`W7c2&*8fKQntINm8=Om1 zQzzE`nsr9)&R+Y}TUWKiA8?*Je}4UkOR6*8UA>Z7)8J9`UhuHH%eP*ZqO^ZAG^d|h zZvWwc{|%!o)8D@|^kTI*I5=7o@9$}1YL5G#@XC4lxfI`jH&gUGx9r;0b*T5IjF1f1 z0j(V&9J{A1T(~ge&HAwG3)cNucvzvkW8Xxz&4R|)9%&y4qYO6MuYB5Z`ees!9=#J}A4_UwG|Oz!@4Fs{4H+e`l|>h%Lu2akY%1{GU&?UGLe6bZ%IA%KpOs4GT8J z@2@ME!chH0u=dwA^DEA|hn{$=h#dU-b3@|c?CdL@izhcVHx+8@+w&Lobjy`|dm|aa z$hLK(;o}F~{J~ciHn%&x-(B)ksLbQU(@%AOe;?=Xw7-%fG1K7FnpZj+*RNeo>O8x^ z+{N8JJS^m%@h`cGc!OEJMe_N*%if*Zx_ZS%{%%w!Xm$O`=RUX8&{p;y3^UwBO@WZ zHv7s&-#K%ZH9ivmtpDrBFEf*C{nEx^S`!(9A8fT*lI-1rKROWYLL&?20_)Os?XGt7cbnnXA#foAcvWI{?tTB^7C-) znK6I;+I)t`p|56r>MGKRUzHP@kl+yDAaF-RB!1_jfFFG8VLdU<*ODk&XyI^0zt8FQ30VYi<#{`NXL5dG(6RQen?MH_f@L#@Ob2 zSM67s*0uu%>p6`rRxxobl)IRG;DDxvQGoUWw?wCQ%^5dS_JqWkqUEQ? zQZMXgn2W~mZ8BY%eSO``mrXmDh6S5vJW$y2&9?YkPRjj`)vDJk+@BO2?)>5wn|$$V zQb_yPHM^u<=xvQ?kiU@6@QTG_YUmUtzO&r=?5|%-pE`Bg+4=CECvjoMjhD~9nw1sX zoL7(&^Kj{*u2o!XxAjH;+r}`1ji;k&J@Yuy{YOlUjZHt$DQk zaX^sYoIfwU0t=ICnOT)(r_7`l~hC&ujSB%08QM zN8#cSly37dh;efCQrtR|MvZJ z?~`k-Yq{27w`b>!o@1LfeKKBU9PsfI*QbTY85uX)g@%W7pRckMFJ^4IWtHm~Z0F)2 zyJqtRZPkLs*U#(?QYc?}@xTImo&SgV-Rm0sy>HJHW;B$VB{%2egB_fY4JI=7F!X=e z#jEWeQSmH9qbK#@ySwvK=AJt=gT3bA1nvMHF`gZ}H4eNjT_h~M%I?7*?yJgct}S$K z`^EZeuI1uGNn)-RRp(l7=lkW#e@Jy;D1RYWe5d?{oQ>m!r`vQMOwPKQ&@Hz3dx0x+ zxZ>Uieisy+ij}16C&v{ZdAW|Y`syD(wqGZ&o_N0GJ=@Ahhd(=f4=Fepw*Kv^z51tk zHlC|3%G=+;Sp3}XVw~8tXO%(;Rl(c8NgmTTeZW$(s99*SjkUG(>3bh|&K+!=YtCak z%emoZn4_cJF#}ijstJ4&j+z%t)#g+&h80>gCdrgEsJL#pwCT0$QCD9!TUK#D#>cCe zS!bt;z6hRS_Gt3qrD-}3KDHXUU4CKC)E}UG<8l6jX=nYouZ#TFOpRjsza!!Ff$dkX zCEeDon(w{v=Fc;KrvJTEc647=FN=g(X>$1I<_TIHKl=TB61~<X}d>0+m7 zXqUwU27>}I&OIB>xO{BL(v|rX(6LZhKSeY_$!+?g1us7Q5@OX{b^U>~m+;?yi@n?m zi>!~mt!Qr2NZ5G6mTimI8*`_$b$K_U7J9HV?b+ta*n91e;F9NExmm(z-}Eu|I63Kj z(E(X`>>tZAh8Y?a7bGRymCSZ5WIj9X95ZLTiA2MkFy#1WrjXv&xt)mJ0O;V^4~`uFo)wT)vHtjSE2GaMKdRoEXbP@!2n_9eG|jeO`A~nI+>$xj4~_3wEIoaSDQs<8 zPTX-m{boo1ooNf*L2bJ4CCX-EZoCpROt{*gzuLLiQAYZJ=&lOisp5W99eboN-8s_t z%7ls0Z^gy$#SIGQj#+eF{92%w5H9F9<$|l~ET{OB9}QeT_MH2j5Xst>?a1QB_rRg? znIns%>+$wom&-m2sYh>nEo7_yI6QwFm#h%g;i1AXD?sDH7sUhZ zoaw)G!#X394xL!y?OAf7ckw|oriC(?2s`c|0CJXBa zMG20w?*1K-3R9~Z)x@s9mX_qL; z29pmrQ;bd(G@MI1=oZk?v`I(sb>X^z<;}9Jt^N8M3=<2z^K&M3sk$j24d!5vQ%JbZ z8nQNy?MUG{bwk6I)w?ENy~QfD;V)YmW2)OHH=zTG6DLg)dJ}%A%&S4f+u%ty7Se58(1q z>JzTa&|#Xv%8|6#rla`lRTXM&B$*I$)AD5Pp`YzwgJR+@QpxRV!E|%qq){AF7jX z&{R@Ny1%dX-o1Nr*JoV0a>d{7=aY@c|{!y=CJiw)R*N zztta(Q-yq8@Y)q3x8fBm1wS5lOg&#IJ~uv7E1!D6BLR;64=LLwqM>fD#f7qxhP6pybF z%r0B7yj`wJBUo|bY1@TT6Lw}gUA2ttoNH4lbYx4xL#L3;HD`UpwrQSOzGaKZ`=al6 z%bVwEX=w$`m^`PXEyLm2G9E^+pfl&r`SrSOPB}SgZ}s;ioKc{o?)Tob~%H zQERiWuXBC>^55_G{`;9usm@a2J#ojxv&-&(PC<;mSwzyUA3vYZci(IKpXIU{>zbPn zg{PIizV^`c`uh0!+n!G0o)*M=;?9(yuYM7a-23HR%Q6iZN8GH)o_8KbbQ`u*PTH`C|umFVbHh}@jUTjg*6=OO>cQwl424tVN4 zYRPhVwv010olD5N=EsNf{l8=9=xwO|{Y^w={x#2}Aep`DJg*IQ9Oem$njWfm$0gh0 z*|N@SFItv;-+lk@yFTl8H#Q_TpG=u`p~YCu@Qc{RY9`a>c@CkH!Ff9uJYUN=bN0FD zR!#2(TephdFAfO{v-^4_So5?Bv(UAdB{c=@cl{*;l6H0oFJzoKTg|Ck(_`_@oj-ry z|Nn2AZgkzZ&GVNk{N(W#y8Li~dd$V@Lnf7NQ{(jBS!OysTUHzt-6dc3cI)-9bul|j zUxzgxobYIkky_;$tBa>(mmT}~H1^n(XuTIZLB1=#8gpvi@3;B&-Nw$_a&LcovABPk z&g32+iOqg5Y!f@$?+J%YnfP8o+$s|kzFStQxn4-yocLD8`2LKvSyOn7btbdRRWN*M z;Vi1DZ0C?lm`+I;H4laG=HY~?dV?r+bR zciSiVN3H0h`_+aszKd6-3n>R)Hn{%#PVxDZ^B?rD{QBur(U*A_4(4QK9eSvheCjmQ z%oU6?XJ2C4dhD26&GlOsE-2L7O;eG(@tL*i&@9;(oZPcK?Nqx{C$OdD&8pf^u!6xa z_;BdGUp9IM2A^1M6VLJ`C+4t7U*Ei`;1?*GG>>uAs?K@Xe|Uz0)67SUQWC!L+yAMa zbNwT1Er7ub&g`-ud&P1VoIhYbp?gjMvyr)K$XOMaH+Oaxe|~n>!k3qw$H%EmJVors zM-87|=f)q7?0;5VVg1=B{@nZI9h1}@*RNi+{rBVXr<`{`nH&C!y|7L6W_-bU-*tX{ zQxVt81&lLiFJo&>pI5nT*RCkJPM;~?F8*Z!si|Ae|NNv+$fhEzV341eIs638nA+Vx zYIa&wJIu%Nn|Q{wew$AmFF5Tx7^)62E);(e9p|!MwfJ&M^WP_v{jXiS_UQY;!cX5* zp4TpX{{2RBf8)Fjk3GZQvodTw<2#w_k$?TK%d*yGH{O1W&fA$9WV|oKX!WX9Oty)~ zgD>2ke9``l?ShUM{%^EN07D`)(TPp<60!qCUl`p?myonLOx$79m&Zl}s$u49}zJE%k8R_>nyvozbN zsHlA(d-InVs9U~dk*avqss8WR_5IVPOlg?+By%5&m)GTlnX`jfc~-ITi5{?cch>xV z%!UNVRhuSWmi1<~a1`lfu}eRwb!7Ygzi&4ldHSQ|qQkEu;i|_=RNi$~&(`abiR?Rg z&{5{tmuu1ai5lg9zg}-%?sm-oY3!Tz`9U5zKV~dd$ymg&X!#?yzL^PKEIn?@0tcV# z%&3mqRg&3NH1j~pwnt?I(h+w}If&d+nN^mRB8sNnymbjtDNDqU6n z5_cNsiRs7LsHRHfFALIn&_0P%D)UFhilTi_Qd5#+kgHonVY)9chyYoe&oW}U3mY%$I_dxr0+KJx=#OWkaz#i=bz8# z&$ldQV|p<;SmDn`xp_`j75_d>-=7eA?(xSrcXyZn`tnk~{!gLRl&(__(|Gq^X}-^T z;@r7;mc?q@D>7#MPUh~9DC%fR7wHj@{{2Iw&F0GmXARvKFQ@PSvovb$yhD?E=9w-u z_UmD)*3OH%{Xotya;@p?x_vLdH9eegvG(JtColY$Xq0W(f4MYBBQE5?8SN{{=?*V_ z&grec|NecE>C1?1ZG8fgi9e)1Rm$+4KVhKvp!lY&Tzr#<-ceh|>uZ|=o`3qtuz_D@ zm&A+e!*gw`zn!oDx7kVY?X`_YC-p?78s^#md@{MQk@3q9kN*rz1qCHL*dG>5XjFNU z+7ra+e#fLSFh5_vr0-aN0+WDH&!4YSj=341N=g>QeyO!!-Cd_oyl}{AmU`abOdwy>xdG8~?SieOfiPzu%scik_o&vo7JdTW)H%!iueJZF7&Q z?p(3%FMF2!^{~X0rDhTHR>#$E4wA^Z9UZ)F+b!J{U%%e&6+Io&Ja=oV|D4#El0}F3D*vuDk*W!GkXdwVme!|{g0_dMs+$hp1&uh;M{tDgRZujF0-qV9STner8@ zKV+5X>|qFtT0Q!R*83ZY+d=@6-;YyzOwik|6sFKN$DK5nq^D2ZQ1qaS<#VA z=|}4(oP5fCI=hE2eYGdI=H~j06S;2NeX@%yZO*B+NXpnc9~AtnwyE@-oVs=E>O-T&@0V^}!0jA*?^TKQ?4FLb z<-e_GMcg&NJx7myF-Pv+>J#sUf`g_UR+~4fNjpw1a$I@m(c!Fii*H;zULWvnTp-PAcH{7rL~U{7 zz5?Ep+q*tF9?OoJUVq|s*^Sr<{6A~u7E7HfEOHePc%YUcX&ZWlOKI7^fBzmI?|(cu zHLojuwXmdHS^v9xFE1}&ST@6sSEgfLg`bSFpO4-A^Ka9HWsKZnyfr@+^w|CVa`}du z%b6?rf}M;7JiCje7v1S;?+J-*j`i)>TKd&^)`iqz@u z_GRn&AKUNHvu@MnEo~1BXAQZU6=J{RP4>tt19<7>b&K|x)d%dnmOS8O@=QEM6 zHTGL2(iZGWi{H6tmFo=CSV69@JmHn8FR#VE{$KZ?BRXTHj#%*AussLa3~jn^*?l%r zwQ=0U{c+aPIY%#v{$0KPw3z(K)ov#uS&lB`{un9NKC|`BpQTN^i~OG}csIs8_@Ve^ z;9zE5O0`9GlJqi@)Z_%jVwsOR5vZ0!OP1@0Q!pAvq&<7Mzy1&O33 zio)B+ZpxE+xP^bwKA~I8ujCn77pZTm*0SSoWS>;<;(6b%G-mc}^Y91S&jr^l zO1jp{}L`- zf4X7&KZmnwVwL487jElvY>$_Jm&5T^-*(f&yt?e^;+tQr@h-JuD%^35U+z|D^#bFP zl?qeLE1e{q*qY<|FaLW|uEgmQ?l^G@%S5v)ee)JX@a^AyHE!+P^WJjTne&3~ge4wM zc)Kg~HedPohktkTzu)H>+a`E-Z}*{_fv+Au5B+>Cqvh0E-nos9@1DtSzryiZB2cYF zv2kkYy|35LoD3{6GoO;!mYd*GwIn`frQHHwg`}pJ>ONCkd1QW^>|#}wmbxp|d@{%E z6>IciwzXBRxy4)Z+`unU zE7GS-drecXpN*(oq3>mooY!dG!DiL|$$CILWgiRulbuoU^IWjLxT3=aiDgWT!dLm2It;p8xeh%lSn>4nfd_Z;vsk`!udn_U zs`c>1yiHG4?b)?`=QqCV*toMgVZ;B5zt5x`&o5hbvQ-Yf zSi$=n^(g^Mx%PaY^lREAbGy!!;a@na-w5X?Oep1eSd(X#dUWowgw(}uXC`+SyX6&5 zIPq+D*DIz)TLS02aylO1e%PVI^5}C;CoWIXBKM zGxT{{r{n1a)hk?QOcM7opT4x*Z*JB9zu)7l-F55=24F+2;GDnLB zA5fVjaq`)$PV+lyyw7F}yeL&Nc(X-~{Z(|#E{?Jdo`z>Ox9{}4;&I_N^W@h;?D0ts zf4nc;OerntxO~@H(M((~O(xz({OQBjEWTXGiOE|OY1_MU>T~U?ny_ZS^ex7AoTXQ%7uQ^kP!weSBPPq0 zV$|lXBC)otTQSEZYwryS7TW{SYcGFZe)@IvVHQ#Qvx@V%%_Iw>7He-hy5@N2#o`;8 zyw?)hM?j>%_>@462+0$2sgzGWTq#^Od-`#Nv3ylCs6`0~o9K-19gpJpI}0yAtVN zTe6>e{G1?v>B_2&iV-_@ZSs24t)gfrkhHRoM`~uknb-^WCm#`hA;n@iRr2$f8;m(| z^1`3QR~u%2@ScsAX1?iDTW0xe%hzoN&Kp_z_G|mZRCV8O7L8F` zvb}VHXV?6+6NjIe9t+!kJTuwal!Z6?nnR(&ov6p;xc(v^GGwPG5Ozj(ZxRCpOL$pW@tXbT9Ui+{@oP&a7GPR2!aIu|wz4H-WjTLE9GU z<;)g1ZhGaqaY<*9+(fIjYqWdnrb%mVTGLs)HBBmjztt*2d%?=@YF@@K(rn*;Qai*@ z9o6%-FJZf02IkUNX`s8f8j!FAkSZ&zykU2JL z*_*;00q(1L=NI-o?p!I*JNJOnZ^^H#PDBRns`Grg!sxk3rxkk1t{eDcxR;{0_LPB;D^ zdd79#aQWI+T?@YcewT|ortiGJhq2lvX)#mnUPi~IR)?2;$k*Curd06sPUXY3B9FB4 zJ@-jWJZ@*sD-x$ImOnu>)9ndkZl~Iwl`(+@%L8MtEAgm#1zWy;{es18&AB{*EmnU| zU48vUw0nxv|K&N7YuvWKTWn)^wn3U(VAh9h_oB{U{H>EaA6K1Jo$hkAi`_49|3LMG`kQ-V8ybYkkU!zT}`vSC;z*kchW>X z?#-MXnUA^+7yWko%5uHsXUch(+V#~Bx9;=xjxY^-w*LO6R!;tV7h;;@x{fS#>$)oc zTW-pubKIVDE^NzIy*;b(=(gMD_x{&^j-EDMX0n_52W|b?oinyQj$7EFpQo^3eI8#~ z?u;tiN82V!s7Z(f&o=$MsbE#)4gN>z+L9AP{iYaPi#0126RQ^8QX{Q?_Kxq_g`#Km zjUnE#4DZIWwnP*W;Q4H!!rJEb@yxX zs=XR5$^vq$R05d_^Gtt!E-qd=OG;7rVgt{G7YvS>0T!0We3Z-?TLn+;*^sxPUBT1* zM(v*uAM>s$ZNIu|x#ZkJxx<+(mzT}F{j2rhzirOBe?w#+pHSsdx~$&YzpVV)!ULx= zzJ6n#dua>b+dERr?TvK=Ll^v0{;iPr#q|BHT}v00++RCyxH?D zbZ#16xE<5~Hs#i@+j`>H6L#>-?k5us;p+D2_XT9!SB57YQVJpJd zCUy6nBJ=T9MR|M6%ojZ>B~sJ+y?og`RvkAmcl>{VL-50g*Bm)7tAiXp4^ks#eD3bFZ)&RtH13WD%WZL{lE7Am#r48!RLPOy!-KPWrni9 z*!`e0*%2})D;$?(ADQq~nBgN!h)`h&QY^hTW`8NDS!Q=c?FABx%%HU5WKRZ zz>`a_wDZN(u%P4`*ZV}OxExCR8;PL_mX?L%=@D*vA3h&n{XZaGxO%E z*`-xE@sZne>(k@&Z#UlBGwIYZDJP`h?6IODTx;ESmkEFa!&ZGf+FaB<$Ep1s;t?_{KoUlGd9J2XfBS(4%Hc1!y+=ahCI z$#!r)IM0LgFjvrQS-shgvh&WT&E=4NyJ3N4TJaALG5hGxLgsfX=8D-dg-oCAvt>?t z(XONE8yyci&wKIL*C$=J%=pAa>o<2Ez5c#%-nA1(GTqmsUs`9`hkgCYrg6(cY~Fk^ z^R^8uYfmn*TPkzU`;bD{?6eanzxQ?W&&ZJr+p%y#Nq)-$(~EOC)oEy@>Ad&dx&F1ru)Ysmt`<;7;qgyD#?5L7Z)%pn^%Po~e!?L#}=T6_L z$NsyBk565oVvp>eq+PXllR|6nuem(qO{~hD=JU@_>F$-k@x}kvFB{*7>|c5Hr)2Zw zY@A{F=CO0H--b0#O2TESZ&T(JGqvsFS#&B!Hjg`+>ymtS`2siR&UJG8SFiIh*sH9! zboI^la~g)fH6rg{e7{SymgTzUcG=fAvuYOCyo%j+`;=aukwEIH#phZMZGND3crTHg0LvroJ`=o_(F+TOf( zUUAVzaa)Ig%P;P^VDlux#_*3agQD23~L{*dX@US z(Im&7Hz>jSQBPk3_v@>raVIMobR{?*1jhxo1k1%GgRwGv9R}<;W?9-leHES332do0QF7UEvzoccD6Mp@Pg| zXZai3o6G-6s%vu|+P`I%er<6^-IAnd9JvBB^fdBf(#2kFlYbjuzqz2Kx;vrvAKSw- zg)XV9KfRCmSlY2BB1qxP7LKc_@4w|nEwk9Q*>%I4BSN23EN10**{U-X8?`yD`h059 z^6xpiL0z9WK73laF{O)1Hf+cLzb70XNZiYMJ?qiKPhH)Q9<3_;XRGG>_}t;f1Jx65 z#&E4YTDYj_aZ7xOV`QX-TfR*3@s;5M?QPXT^V6lCPpD%kOr85tR(tm3-pkCNJ{Ybs zQ1<4Kv3zlDjpj17yl-b`m*wt_wTv-5e14@^Er0RkZ{@##@%?A#oAHPJReZ<9KQ;`h z54n04ecM^}`(A60qw$}&vgd77RIn?x!vYw|BtRV=f2vze?!dEu-Vg}YrDx!6S7;C@G#b1Xw|>7Ni+MmM+I8Es#!CG z@fAZT^R8oQRf_Ez-DSRk;jUM#X5D|d_{h?K5jr08=1-_pY*wn>zLL4)!2<(NZr1+^ z-?P21hs}O7Z+jkV@fO|FbtWn)f7kzX@-DB?-MK&a|7Z7gx4t-UYgH|3<5(KlaPM$X z_tP$ixz`>!=0E9PvE*j%JFU&jcKmB)3YAs!5$+XvWK&+}_+Xyn5&=u~1od;A7w*Uf zo&CKmYQ>-L;$95R>T05BzFhZ=E_NcINA|zR<8Z_Jl7f-+y$eHlOp8ef{^6p`4W4#s!s^EFBLt zc4!$M+W9!p$Sp=x^OJ|+qhIaq>E;q&4*uWzvr^0Teq&b1qsVwRk^j%{m>uw9PN~bO;vx&Em;gT0ld(OBbgllWr;s8#`g)cSt zRhc-MiJCuHHfOfkYwgorn=c59oabDzPRst!g^kQ*m$#}OEzOQxme#)1VdCeXZgZ=h zPx@Yt?LFN6Wv90J>s6 zvcGWf{KE$`3M_t1>=se@BJ@G^>Z{jj3NgWX7glCZd;azdZ>YIsU#57>$*v{WcFXfwWoY-$J-LF_O4(|^gr;6UyW^Jm7ESf|DS~J2AN-K9 zN#^%O?I)%e?u$!=JUMeNkfXWL!9Y6Xq!Tko=+h?}%1;k2+T?Wdy_>#r-xUFmZ$H+h zzN-EHbN2P)=iVuCiZGmZh~PhzB`emvA))=NLXAd?fBi;_UVZO}?T4c@i`sd@R3H3^ z>%YjYc)W;LVD^DE7x|C&2dAc{9=xW%_e;=+)8YGnUA=SXj`q48O#4|}6+4=EWLiFQ z7%({$FmPxvaQ6w$y?&6dL{OGbwqL&k1k;~?IAtDVcwC3ag^O2-nz4`ffn)ALT{|mQi4{C6L=9>$2>Z-`Bgdoa>HMv4 z8RH{03ByR^9yz}KYnkpc6>cgDvRhXmBbd2}qeYo9xV_`dER88i&zo3R7cHve2wyW}v51q9 ztL((aZ-2k*MC1yevej1apApdI(eDwop!17XnvPE8fnAwL?|S}OrgoK`kAIawwuMW3 z6pL^>Lx7{j4$d_y!j~&1D)G8csp9OByT*T4iKR^cmQD6XPo7Tq9=kdGtGSd6A95Ko zafGWh&C@9q;4J7#NwQ+^Sx~=XdV^Umdu$aveR43OxJVS2Vw2WNqJuDHe4`bDOBxl|8~&Mp{ZwHm5)oP z$^DiHCAFJhCI=Tpa7n3sYd2aLXH+|D=K`9D{{SPKD~(OJG{wUCxSlp0U#jUaDT}Xz(?Oxj=|bb9 zxoQb6=TCi^q7t;I@35}P7f$xg?TaVMDza`>o|B;TQ$_f^#m1G-)n1549Tt7nX6pQY z$2(PP8wLhuQBN1gkf+ytcugNP9$kF7WtIaUQ;gcF`EV?s%9Ul4(zD~+q%R(ZNl!!;sxNTn%W79P zj5(<~vm&k2*VcUEz6D7Y9rGSMG~?aPZlj=PF~fR3YdgcvGeO@)rkN!jORQp=?Qr`@ zz=qNS;dMJy7d;g7-x07;(6yI+-Gt``in0kU>4B9UGZ=VN9_%kP_wIUU|m9dnYAX@|z*< z#viR--2T$}p^9_(Jd3=Gat`y_8N@FLC$=oNaQF~#x=~wvn(fK#hGZ80aD5XW1Hm8> z*GVUr&xxFrdC)hYaLV1uml%0$7@9W=&9u&2n7S)%+OFjrw%qC4nHMPWV%i${Mg_GX zi&cy^9j*(u94PVb7jA8wSI|AJc?ahUkIv2mi&mS+-kk5j9K?IrUqe8qWU5ebOpnmg zIh_w5=7(Kc_`)EmXhXh*NN4$Ufj)sQSBvjUoHrV;;0e0yzH#SEWf?brMUEu}EQeh8 z%4W`c@IXS)XTp+#K0cek{?pq}W;B@ipJEp);pX4U&LekGQM1cS?X1rfPvyL(Ungdr z+#zZ2surx-vMxqP_^R#GRJCq*!v~G6mvv`a+?_O^<E%)13k$C7IQdA^rRuDU>+;Zq5?jN-kEj3xR=P9dxjqKom0JJpg^!vM8yR)*G4;*?fD<;;% z!q6h1>`_+DTd2n#Q+VYu1LK7T-UPv_fHwG!)8kE8^7v1{dY5- z^q`4BA!Q-M?*Dw(mM6@YedBP@UFne00v`s}$IN>;1>~C}raehWXDQ@8((})HM{iSY z*#`zz_lJKqcO^3fY!u>bbYWQWT=AOfkG97TO;Tf-6lLU@3dI;a?oOBxkTL%!=M&YB zi7G2j@8R00@iZoZf42CZklzbrU)Jxqki#%*q3yb*^%k7T3>MQB{eSas&)HrZ#&K?8 zfxT#ImubTRDW-->XEpt9=h>DFIcbwmzJ8kWDUFq3ML0tV>tkilz}uSwq&`YC{LkJ~ ze15-azy(VYcJD?V7QTypJx(_l_!`^`sl2j2llR4~jk9>}`kXr>AF=qxHj5;S^qpsR za#yDPu=sJ6C5AP*fYmAY&|{?(!^FbiPKA>?EBRi2-*l$P?UPEY*3s#we6-SbPY(Tk zrLnCuZPB&Zx96>Nc12aK`{mB-#rt0J?5qnjPrcuIxBQ0A@jq=xXFS~{I)Cf5vy8Vb zb}RknYv(*}nqDXVn0ev4r+JIn4dr&*a>m`fch}CFB{AN8zt8`D4QCbJI)6Mk*TrW= z>5Zj_xgWX-K35X&f8qZ72+Q$FeaB?Hd#p=sbnU*n{5mqBf-=dAWxU$#r9sB-19*Ivg$zemlyb#>S8udKX`y-~g; zzQWgEtvhZSz4bxVw5a!YPwei@58m0j>+2HR)ye;JXWgzX7qa?leX`tocVFr2FAekN z-Fsqpx;p23+_&(%_BIPXH~c$zy8UbY+=`U{5pOu&_iAUon`!y|UU^t%S?#-n z?R)xv_-DC$;!x;rW<#I*$ z0P~B!Gk%9?n^f;hOtsM}^s({#Vc~CcoAZ{iw7R&^Jrz5@EN?x_sk4NNZvE?tdbRG#)GZUg z-0FFjR{y>p4p?Bb%IH~#$m+|MPYmlD^bQ=)COOC|VBWRp&$#$1ip z`ugiRR$f_|v~JeAyuEYc9+$d))jE9j`_{Ro;;%h<#d?!^pDg>B?R!0V_D5Z*wKuM9 zH;>Ajm-l(c(o23AN~@f9-vCYGmlJHa|2=1wTOhu$EyLlJQhI>+#fl!isV1iKyym+6a}D-tgiUj7 z3!Kt9HFIud(^5t^X5MY_Z`R7F__>~2zguc&$DL1ix^2$x39PyGhvT0+)6b@R7OZ!6 zT~K}~BsghB=ZuCMn<}=uOj@$;$*hoWlR!7OXU#cV=gi-;kf4!qSg*_x|2rD;F_;bK!Q;jdQo}PMrTB;kCwt9WSmtp7UO)>cExI z6I0)qy}Vbt;f(S{;|r%RMPF?f?>|tlVDn||N9(8WWf#b6NOh&( zTyp&+>+(0jGlJyi``IVY^O|opW7^cb=^M2lU%k1>=eo|eHTySBF5)S2%qx$(WVyNK z+Mko3d09V-^TmW{rs&1!NbS867ZW%sQYu_5>RoJN=t`dX8~m?+*PDJ-X8)tg(Dh>B z?W=xA*x$HtC*sbOBHcH;qBnbXCuzUuT_xRZ9>4YO?yDE#?p!RbUM5^PeYf}0+xyg) zZD002cK?^ZKN^3wC-$$9zc0H=CQmZ5QqK6@uT?*C-&L=D+(VYp2X{Sju*Q zb%x-agt`(J<_ULM8d%Q6%fvC+7w%^iUrzYs!T!YXNvcF@fJSJDz$z}&W--^_i(g+jEs^VE zl-AMJuhp??u9SD}gk7C%&X3(LyLdal_PyAbJHx#uwOoI7%JjF*YMiDxoL=?1@;iYxUu>T4 ziQ1!FbMQ~bKP5)h#@|hGP1!p>JMC_DYgKl+;hNX6t1GW7R>)jr{$!8IQ>M#I>YDOw z+PeuKC$MgMT6C;v^QTO%O#_Rqxg(uFhPtbn)6v?!NB+ z*JI9er|l>@?0(Ec*!S||YW6b`XLEHo>A0`mv9>nnRqpmTYh_Q#gwHt}tHqbI%W~KC z>VV3ss=Hqj53vhZ{k`&cH#2WDThm)-H7Dl7VV)-q=7q}M6tIE*~;}V-&jSX7RPpYMl>CKm2A-bh^gASKm zzVUUrZmoIMt#{k*@49>K=B?7b%Qvpy_y5&_sqLx#T5R3(MC|vP%=%@Ms*}Fx-POzH z@ymBC54|US?(N?dKRRvhZ+!5r^wsR6L0>;T;$J!cnYP{PBk_#c=U!(?pOMZt)82kA z|2V&n0AqCnvqFO!Q$-d|a9Rp+YKg>$zi zubsR)dPVrs`&kAV7Rfz^f~H&VRHwvmy}6~eVd?pQT&p9cC2t=tE0+=Id**lZoG^P! zY-gVCJ88LN^Ipa&+uf;%cbY4|`hTm#w*_kwrcL+~aBRb7m7IzymE4dtlWL!bffJK; zkAHpa?$@Sjq#kSkbjGHlWhQ5>Y9Hs+P7CMrfA?YMm(OA18^q;BpNd&e{WSG#$dypn zm}|S5cHRnZ&v!73+n08|Cns}{;0?91>{W}O@I73YalL)s>e?f9Gk?d+U-{Eof5!gD z7tdS4ezTrU=S)m>kJH!W1O(vQfuvpYzE@j{?_U z*!3cdNBfydn&iHxm#@sblAp0BV_C-EOz{^Y<2Hw9PV(-o9Z5TNE00v1*rWgR)=zI1Ar|I>ZBDxm6)F8$q?07EG4x}; zki4q;(m3z^6C|g~PLrNgzsg{d#p0f@i8uE8f1MCDt7`GF1~-6${FuW9v)?|<8nPozF+3O zrq`8bl|~)xWzU`Y)@*y^`<}aJUzfdm`fBzIeYp>{8b7apKQ8N>d00;Q(BjJTnelTZ z(`Recss7rPH0gWptt;CzPtWvzzx??QyBGCeewKVGepK^G{L-O=>tA*IbnEY%s$;2d ztXE!B{`22w_gm*psge^*O1F5g^UTX*Q_F&a@_lruTOB-{C9ulbd8_P7bIKR+9wrE zbK7v>XML{X!HFB%Zso1{AnyHTMZmY!JB z<|+~NWT%4OCtmZP%9n+tA3XRIy?wq&=5vmX8dD@~MY0?xE?=|N>x1dPz2+*jByv(Y zD|e);R424Zrv85;;LRNTfY;-I{0}C}1kRoZv$uZkZnoj;bAGr+pQF9V_;ykKk~!Os zH~x3_=KGO*yZhEPOO~{SejVuvOq{oFZT!vfK=C%c|A&La_;$V%4;7GF{8Xet%w2nN=*6}SSqW(qM!vJ1 z&lrnd+|A(K!WhNBmiM^{`}6#B|MyOxyZPhK-*UPSvi2zy{dVc7-~2y2RDffDV$St< zAEq#h)|hqu(Oj|nsoc`v>%|^Q^S-WP=y5un}>MO4)E zU_Ha_&GF@xQ`naywFr#OX$_EAp1qM$S$B+ufH?`aeAxC%qfAj9< zckT7QPE0C$gbf%SSzN9-$Op+U487u&@idVNw!(>LF2QOTKfHuFH-feE^Si%!2M@`#?I^e1 zpZ44E`K9{$kLMI}4;S&~T>1Ac*j_hJ>4@d8>_{3bJkM_jl0`%l&sJ^26)t@6Rda z+i(5zG${JstMFe3q}SZeE8o}?wLZMj?D)K2*H(Q$d1uk1=fAG+IZ?%0J9o3}ndip& zRv8PYo7^z_>{&URkL&uQe1DM)_cZYXr?TXJ2)J{cIN>}XLH1*S#le$~KE?gET{_yFpIWa%aX;&Ia-s))G z&pUN_cCMY1$zpZij&Roe4JHCpy9%SFU*-5Yd$H|3dTaG+og(Kh%_;mh?_N7)C9U|W z<%@~!{~H^2CEMI`J8*S&_xss`?@O<|z4PtOFQv_uf1fpHKhv&M(lQlD=3Rc?RMIVd zS?lDb(T8?%1{(5g3=7}Q5vX3Gk&?e+O}UWUI!}M&QuouB<@3z9Uo8Fmt^fMHs``Qp z5!cRc;yKoHL;LjWPDRVZSIqw1y)RUC@cQ!oxv$Tiu`>F#Yh~`$#S^C{@a{Y|A+3vF zRVZn_-uiOGo`Vw-y7H@8>TfS#QeGJT_k6n{({{3At z^-1oneUU4A$Oe` zOI6k{SkSw&xLdQbN#(%X4}qNfZTYPD52!fwAoNZs$17pg@)t=r4znK9)FvGqRo z6J7ss_nmXEzZk7oII`>Z=?j0~ao!G78?9>=7v65cbi+NyneOv`p>#T70K1J6HcGbPws7ctGCXn zLSt5ZghY<|mxsamoGFaWPoAx>JT3Mn%}#apT9Yg1n*yePHoIuPr8?_Nm#)=F0B< zS9#ZO@BQ>@yWhff!M9l#MpT^2iVF`2h}e*(KlNiMQ#^;&Ap9K-Tt!YsEK0z#gG>{S-Djo@;;xOBqXI9IaSB;M9k^% z@ICKMLN-hkJL4ps`|2iu&>rqf}RFzH2CPR~* zizVN-m#r1&60w~VE25S4@A10e@^xnf*YPfVqOD|mXO~j`ah7YjTW@hL?%F<8CFS#; zS>YSr-E&R3-?jDa*%uK@#KZ3fDIc=3I#JrsZ(OIiWxwyQD?D*W#P|RGe)-G1zZdRb zyF6Xt|FH+ziXt!mndeP1DAuhhcx!y#=KG!V>%7BOhMeNOo>o3%W_i3_+dGy1b0$ku zQ&N0R>|l};JmOdp|I00+G2`*4u%;>J*T(TgNliVL;>Cmmu>%#2Z z6K~GDK0mVZ{)`Ds7sBpc6XX0l_4UuIosaI$4-eiMS-YU+zky(?$AY#^-z=TJN{5U8 zsFL7&terP|Hj|IQinjHS&u!Sbl0okFnLT||x6gbPm|L8FXVc8>th1-jmY+3y-R;w_ zQ*Bp-8?FY4|QbDB`ubKAs{i&S$e3_$x!5%H9HEgmk=1DodSNbFRWLL}tF|SLGHV;--{faUy z|FLPT>NvD@4s)&|MzT_{j0(x(f`Lp;z#^Wo7Vr`(ZA-fpDO#Tt@Z4YQr!ON z@S0aMS@*;pd*1nT{)Tg97sco8a1`45oMq*DuZY^&0m5FdpB8O;&{^JfUG#yb>QUDc zog(h?@I8jcKH^*E|BksJF1IJQYK38Danpq7@%EOIK4%usSUgky+#b{0_iJ*}G>kti z($3dBT%~yAE87;mx~JQkvwxh-Ei{ykD)?~xyv~K^cQ((RFCe})e)mVGgR`7wG0*Q# z&NF%`?N}K8$xi>k%iy1@z8c4C-i|%7f1gw6l7z!6A5Bdxs1?7mV5u^n&>msIv}Lcw z&88W=deUR^@NUP31Ow^Uc`Mc*X3^Mj@5=5&%9iEw9H(zdztZ)K@6YzUJMqnpX-{|Z zi!*ZG+-S6W;jVcrzAkK?Czn?mEC#JkrPnWw(^t=ugsT5>Zl`@i_Ui|mJt zs)FY~@s*gWDRgMYB@MC5mR|~17l%EZWtf^0b5iQ#vUfYCUVOcK@-(e8<-6)U_6J*^ z@%VFEj?U2 z@w)Yd#plJD{M(DaP1USj7o&5dlj&iMTvxp0%Mh<8U;S8KepRioI&#g)=8sXx+yd{$)79Ybf_P3ROW++e{}7N{}R>!Hw8W!C+Q`}pnjOrnyOY!_kB z{{6R3Kz7gTvfYLZ26YUP`~Q6MF0g63n-{+N<*Dk-%$42z5>bY#QCB!F?p(N#amxBt zs}5--=oly^)b{W>{g}~JWc%aX_iz0UE{(GuRJb_Ae=twsd{VW-%)s13e;Eghq(YX7 znc1V$k#TYJCQVYBe6qq(Uo@p=M}~N%?U8AFyE$U|;ti~rBxLtTtrd&EbT3rpSsxqg zx3{;=OJ9W;SRFP{EOTcmZNCvaXZE+bmjvEEC}nB9sJQ>&yV~`BIyd>bd}bQ4-s+ZN zbIxVFBtw7xx9`BH^PB)g*^i`)8@D`(o*+dcD~cunb9w;XF!bo62MWj_ui#RTj%2s%{k z68BztFRN11GL8$0EUau2-apc}^oMpIt@32_sa)z<91q~l!OReTIEq*+`F1K>0T-<7~a@Uv%GCx>- zSugS}WD-~)9@-JP*oDzySN@)lZGOv{r?*S|^}49{sY?E(tWv7Q`gl$6UlF?_)=U?X zFwdKF;Kc;%CWb@#%dK4E-n&fb&|`Ibf8^Z)Bbzjrkhn7lO-%uC%Ojmww{H`=kU z<`Hav$@+8A6j6&akB)Zdnn|-cNpL&zls>AMc>TBQdjVg^qz4A-{_{i%XVeL9@o!zY zmm?#&<6@w%x|@5~iPyD@^x{1hq;=dC6l|@!zw&1Pqyvd@l}|+z_m^b^tXty`w(a#4 zf!*JCEs0R@5|Oa4v&j;Yu(c72+Y1Vv4imXWnai1u_shSZq7=s`&(*OIp_lN(8$?KnA%3`s4e&H62h~?+?uNMS$mic`8uBN6hl|4bA zv;XOavr_|4JTc1L<7R2=*~~Fx-bAmIy`SG+EY@#39V^%_IcXvT-{#WSVUDLBOuqdz zT%4EtlU2%wtB?OL*|v4h#q7k?=)0?yg|Y6ulh9SX-zwbb<^h{6%MU%}`cqYRYRXAZ z``N}%)vx<++_pn^?Ym!LzmHCv#@`=0FK?Uawq19GR_MySNC z_r3p|by=zSwNY&Aqw>1bDQ$oAmPxHv4O+ES*#5L9v(Wl8t2qR=%U_bt=kc?gn%F%* zaH;(K1-laGoP3-ZZ5ub^;R=yWTC?B2II`sN)@$8izh}DLKAQY&u9uO%@8XmvC!SO-?Uge}M9-Z!*AAdculMme3 z@>$rl`KQ`O7M`N3-_tdN3*RxQ&9|6x{q#Jm+X(@lOTCs#rQ2&hDN<{wRQGxy{ZJwA zOu)ugMsY?rCH{)JcI!P??kRmWBl_6#2-}?Q%e5=s99liU*6ibhldqTgRF(hqUA)C` z+xLCmy#YrOm6A`tcrH{h!~X9}e_LkeJ^RiT^7`5>@>B8C|5$h_joWk#d$!co;QcJHNJIPaYY{Alk zo+-+C({H~lpVT1p^+Zb1tJ$58OHMV+nfz2ua-FeP|5Q06>pS^p=l;6U^W}wb!i8*+ z!WoY0l^+`S9!z}jK4h`l%Eg|wt_@!!Rz*LJTxmDA%R;6lP++g!1+P0sOQn+LDC%wh z|6`_A^ycIF-(z=O2)O(}%QAAg=@G-uV`n;--FfrH{dxBB7k^B@_D5y$v~m}}T`TUBb?K49oc9MQwT9ch*EM6!SNo(_JsP^UsU4HX{t;AO>`=t8sKXv&vNt2jP`}M53nZ|y<|KuDM zRgK5_IeB`kHwv`hU4M1^j$PKuo4VuvzE*j-n`f`Q*-hmgr*CZPNPV_qL-i619>y!W zk2wVLdnZ-gU2{8r?|!d+1&h`%o62%WWx?ldo7$ywo{F#9w7jQ$hei95&x@ySHl8dz zd)C~oyk+gj%U2%FFWjsbHgo1GiRH=sGAm1V+aw=fvZ}XG%1tftNkHZfhHtlbGj28C zZenI3tGlM(Lt>HdgOrW!HhfHc%5OyMYJL=CWxeW1`Mzt{E=l9G1+xPme)aHBdGWf% zp~k_{GeFSK&qnY6%U?a2i}iYpS@leW&ULSqn|AHm`F%fP)WgGmPMI&iZ^<Z`9xcL+c3)!NFKy?hK9ILt7)@knMz z{2{X&`g`*GCT~vhVM<%g@{M8Lvsd1s>F4Kcj*O1A+kg0UXw=)|r&ph!m;dXH%VFvH zQ{QW>{qd%R*Ljao>!pOA>Dm%X-+!yjVQN?uqNM86pkd(owR(^5**@;+uU}_NcN`O# zZuZK0@~yw7-`CD>j`uo}$Tt6(t&O2mwZy#Zs&j%~F5k0m(xf{fMqd6)ii$3s`g>I; z(Uwct(C>0wy6w}F8>^&WJz=a*Ybt#9Bjk+9+p=rY6IiGCbYBg<{bpU>*GgL##blvJ zU$wSMec0U{W0qJMW@JTeH(zvr=bgSZ7x!VK@VaS=x* zh*%~rby=@u?ythtx4QV(-Q}D7|2xYrpP(tRy}yvM_AH)=#-w-Ih+&wuuuvmK0W9oVs@FwuP+j zCsutu#wt8%M%=s)CPC~zZ^G*}1UUJGuUwzZFy%)KOIoMS6v-P51up99!aS#Zdc)Kk za~FwwFEH{vHp6i9@}60<=Pvu?{iLofaOK;$&YgQ67H$5VvRK>Up!2$wC!?-kSQ7j? zk1-aT*8lhAlL=Ga=EbpA&rrRR{NqBVR{_{!O zuSc#~I(2JHpqFrvuv`D3C8bAL3ga&c@TD%X;F0)!%;d3%f@)b^I(y45f2T*i2Dbbf zLT^r4u&vAZYvd;Pe7fZ7SF-W*R_(lTBPug@SI)+|qD5}v>t{@#J3(@J+Rld4nd?`s zy`+7`Xpd%4-$YH*tQl^8X zs3LW|f2N^Upk!Ig{S8X-@>0r=3~CjkLb_Z!4hP6G1!eindG_4APuWiYnlERGU`~3H z>XD2u2CLQ!Ewg$ui)F7?eciF|VoOzDr?Rb8Q&!A-xh5o{Qd1&xk6(7c$%Rj*goe$t zs*6%ho+7nY{EYs@%+Og3jR(1(e>|PL?b@wlZRh=_3%7>J+H2)ss#u)$M8V+Dj7|%m zkc#cwr+#5-7hH8rGqJ7V^s_QS)dhzbCRS-GJpT6M%46+Z$yw7rou0mGpV9RCqJw8W zYvbq7o0)d$-v8c}*V3lDXoh-3e%@K^-aluGP<>1g(-iroEt47T!xMxKoMeide*XHc zr0kN78#ENW7RM}}nRH3@l4hfX3zthH)7}G#4SoIo0smjjQfcb-(P1fUs5rP($3&8U z@xPomzSBbspFTfb{{G*SCl`gMrG-zP`}N143#B|(tlzF|-D06PXYYaljY+{mTfKPW zqUE>X zk9LNwI`(5>Eqh0^Dwk^Ds+eC}`i=7QzOm1mrQbK{%Cai$o3|#LPS@LUw@%(HgGFW9 zv$ULd7glZI>Zmv{{l<32{fswu9bv86VEEy%(2cnK%%7j`xGG)Fdh}?&ndRSenTwMq z#@TL(Jd#+YaL(a=mq@$dt;Sy0%fY?=PmT%tYk&OtP?cH6D`9iDY0b(rGtC|^K6!sj zmXMyBirlwf{|o>46rMc3ynlYf%<2A*ye~`-?svPN!;!hv5QjT6ZY#>?04@tToRyS!WFqHY~hxWsz)L& zhXv%FW&D_y$b>~RzH|*ecl73Up+%}^Z=~I-sr|fg*4Q^#SRs}tNh4wpPA z-5RsaqWa1leeG}8OeUDj@b&Jv?fb?rDPXdecIE4iFV)4&U(Y_-bocf5_oruMhs7C% zY}fJLa`gD?<9(9rFTIGC(zVF-UpZyvmZ+`A7-qyhdORnuy7%tSqd(bJ>S*d#AG*HD zZPqs-smBi+4o}(t{f+;1J;h50jJMMAy@A7Qt zKRz}8RII-3-oFiLpEmiPzau4VwDP(|&xQ24L1ov!Tv@-$&w8%aqMpNMs+X?##KaZt zal3kH)s!F6leW4nJ(47_a?7nbi_MM|YMSzzTgeJ7J+$EBk@Qt}<@6IuD;&5s)UDaD zi@EXIvuSLr7f&^mn0#rUb?q71VE1^>`}HeD-k3FMH0}S^_+snkX9@sRX{|#77x*HXnStxj;L}kfLmUGjzo6ViiB<8PJQ=asDshaKCE7MNwx~sD| z$Z*ZxUH4?QZvVc<7uTuxCa@>#=VEg|Dc?IwR(3JCbAH$-(Hmtx@upwwl_d66evUG0 zmuzi)kuoRfa!FLEUD>-OFE^K-Tut*3M9eAfz5je(^}A0`PhZS^vty04*qO);3FqeQ zmj9jW`cW#X^5g9JrW-_6qd$HAEWY;tlwT)`rtjZUQ{`0k>`3R#moHCdoji2?TYTk< zvctFibq!V0{mz^@9lJnH|mx@-ffcoGgy0nqKE(f?dDEPHBa7DR_}5z@Nw`B`o90mg;h#b1@VrF3-^{} zZ`_&U`Y`@eznz%QvHv&!|Jmz(eY(P|_<(|iD^BFxs|x=0LhGHR(~39d;%nvk*#C1{ z_@w+xJY;?Rcw)M>?b#o9HBa6?>zlWJ+KHe9Rc9r*8uT`hLQvI(Te95XH zHKTHAkJl-mYb#TQwqDc-nKnOZkx##?>Z`pWTzY#SDZb_G7Sp}8zrOx=X^P>8u#T@E zr5_3J@1f8F=p_g$^{-t_eFgr8q}>Wr?!5)R3y zxifP+cC1aQa!jl`m%G2_(K*iL_x*I@cFmi?AG2ZmbES95`>Q7zRUI_@{F?vCj{2GQ z>5qbpBY!`9d3E!xtf=ss4;S}%{+i%*Wt!cL`rl25TW+;4T`JQ2>tyRq-E+>?e%Cke z3Y@~QGV8&+y6yYFJ?387t#<86ALpF)%6{{0{49?y31is8$^FB^A-~b&A#5!GU%ToT zk-MAI`S}cA>#_e}n9C^}tLbv6exl+ZBb$3qbrl73y0WZO52#9fKXv4Tm7u%8td{!$ z4odeJJO20`o!BSR^3F~AmbfW}MIp_GTI(A{g_MhqH=VU(p%$6^dSjhe3 z=z?Bj$$1eaXO})}c7OHC<`m1TPkNF5bL93P4i1i5ID2B=>B*b;zJ!BR!IFZIu<5^r(R5fGvC!YHcw;s9vX5H?0PNrT7Z)8r>0kCa^l7ZM-aHwOt66tHtv%De^2#~gnD5P*>ugtF3;v?k zbJ5w-^WQ7e%~y^r?duM{boJ=T#A!Dw%-iN%zj$Ha1B17JAMagq{*1@1Z8_&I|F`&d z@uS;rwN8mtm&HnJv>rUn`K>P)th^&WdCFbEd;_mtOM)tDmDTT=%dpAxH0*45=+NKy zYKHjhpZw?g)So-?7sTIi zmzhB-c5vOd?3Z`ySyrgfoHt9yoY7?nd zC#FoN%Nj&KI0rKiwfSC zQ|l!RtQd~F%T==Mzr4)1yGq;pnx0>rbX@kochlcSnT)b(}moz5nP z8grXJ5w(rnWN806qs}qd(0;P&Pj>le$yK|2XLG9Z__EB8bYyrK-Vt-NPtV}E-^>MP zdi*c_FA2Q1IbQnrh0<5IjcYyc&8k>`ROGp@f699K=XDijivp{smM;sQyRq)3zYN$`6%JDWaq3-lWJ2!y|f-iO) ze*6FVN-Y_U$xDJ&UWQI$*qPVFnOy&Mx>}R_5wB_QzIEE=`9^o|PJ`nEuuL#+-EhYkxmJUL4dZFLQ?Vz{U@(ZrA^mdhv$I6h@imq%c`% zyD1e`+i2~0I@K`FUi+w~)R!JrmKp3GPk0`G-T1|If#1X#@9#~SJhjpGW|ri)?QZMm zH^&EmXnp@9LF4t_P3kh*ZsTq{dlw4UpniQs9*bmogr!M zH;hHZm43J$h^^9WX5?u%cj0hSn#3$L-|KJv|LHq39-7zhc`~gh@MLD;tsBq2C-C3? z-|>6WtxUrmh8(2_H!XgCeB0^Lj(6SDrkO_H|9iap{mxgbROSR9T&>2W*2#PM&`!66 zRD%ry%a^BeXmN=?cCsp+tgd1F<=~&}1L6-Q`WG+#b0c2+)c3kyng3+(S3TMnZTzTI zx#w;&U;E3MmPt?ZS}c4fTtB$dRJYH*rr^Qe@_PkWV?$0zDlw`Dr!8G1>9zAh{y+Y$ zaViN3vo!W_o;c#ZBCcP&<=G;^f2Q}F_wa=Zf%yC}SBq^7)A=%2%&`$4M#+B^EEl;=)SgzFneru)oyB)rY;Yo)l1x%av zyx?2UyY&8bbEetO++b1C_D}r}%jXCF3Mc*s)fnx0H|tcfxPJISi=rbfac{k)4EM^Z z$#zP#Kim1?fm+W2ivP<@}3`^ zrM3L{#aEd}H!fv#Q+#S6)1`9w;aj7VTQn!z-Pz5*f>*_M)ko)UM!C)%EOLRW6MlXO z?9FGbkX1|lw(Qt-JFUHWuUbT$-&l4D7S2dK^vKD$s{QZ-flFc4++UkinwgwiH#uo- zwv;))|Ie(SCmyzPKeOHO#_rtny65k$Ww(WO+ABQ0v1ChN@}%G;LNl*s?G32pZ0CH? zV?F(R?^~{unx2xLi)|R?Rkkm^xv1ATWmykXfM)1v|9M)?YprX=_sDI(Z0ED)$s(g7 zB|c$Mqi+i*-Fs+Y^rL^8N8vTWoE=TV{u;6et}@%rUixw||G$}2X3VI6y|(`U?{m^= z=V#eke{a42|KqjU&(6=D$GqdN{zRM2|6J#|^6HA6tMy$REFZnm=B~itFP{ z*3UGzEx-G?zpn1din|YQ1cV)|TyXXPuK~M){BqB43-b?e>*zSlbMnF$zV?MVZ;#&# zShdo5Rj_IcSNWf%dpK6chlb9bG~<9~Vc+88&%f@peK%MB&A;2b>!qjW{MvrJ&c@1g z=bc+EsVcorg^#yhKE71V_S@yR0CTbuNC_wKU7y7_Y^?*I4ge!raQ4!1t_`a}3}R)tTdTB_e_l6*z4 z?QRf%=$01t&h&bm@zE8*vxT-4oanx(^K4$#UbE^$Kh~V-wEubW@E=2?l#(K@xW%7N zd5deE`}{fhRmt3afdxXH${&7gUp4=)%%4ZL4-9PI9F+c3*5%K$++o7?g=N|*GZLG= ze(+aQ=oQMi!6r%U48!#pK-W? zc7^H}D_)$sY z3J1q{^($u&9&}w~$S1cZx$qAgWBb88=8XTw>F0V}f4SU9D>2ZjepTImI78%9=4AC) zi)kF1`@$5a*6yt*O( z_rbx-Pet?pz5OfJep;AA#;WShtt&-4KRudV|ND3|>;2<7<^LZF$IIAV3yH7)aHCM{ zl;GXHA~6ZQ-d;Zs=6;@>eABpexnQpzU$V&~nWtTTd|_ zbx0PKx$)5U!CM}cpo)J^o4TB1ZTt=f{*LSW<^HHC%F6FXvWV8>mh5SFYp?si|GUdm zyjpu1Q}n05ubZ4V>T8x2&X^uwCpmkHdHy|~&Ks`xlk7D+4lhvd@v+K2wBrBIlbg<3 z8}rFZ)c?A{n3T`P*Bl+;(YijaYbL|$#u>}pcQh~7^bYQ2v9FPflWh;omXS6K9D;Le7T`?CX7+zun2O zT_JA4BgffhxatZJBXN-lP$+v@+!;pY_|7%*S| zp_koe(QfQjvG(U-`F{e%d+u4ws9mWqurWKmRQ1*TUHO3;fjurxjV~S39eNL@ z-rr>(vQ%kHyI^JQ3bqUh+wb4^|F>!J#ULIuTB#+ zZqYd4ALSJOc4EYl#4~B1KR!ObdGqG<^YeP=9a#BlW$^L`*+s8HWVV|uYSOsA*ldpB zE`83)7qi#z{kHkMT{Bag=J9>Czt#Nb@!anSTzq;#hzKX2@~5i!wxlBu3_kpei;L?E zR(SmQ@kR-rT3bs?$sdm!nb~*!F8kUV#~kB!ATcUBy1K6K#B1Bj%f-u+1=|^y{W~U| z&*7$NaQE;L5m`T9-`clZuj|F`y3&1)Kl2(#p+sPO|1*uFGJM8)cXkB)SG>*|=k8Ti zRi#n;!`($D?MMH`4_ONr9OhYX=6YwAM}b6Od*_TfiITf7rzYR>&-ZBOeEp)Mt80(k z)`vZTGHO@;7s#qjkx`#Yv)`Z_vW0h@{zHHF{mQ2YGF0PUJ)aVMc;j4& zq!uPaTl2R^_bsvGVUPHI+HLyfD74#c(EP z)YXpP6<-<-A9=TL$&IUtN>A?HJ5jn{UQX_*5Sx2$%s1Ak+DYzwSFT-s?7{SM(~(~y zN%>8$4c^@SU@p+t`dPdp^w!-=n^Nxed=Y%2vw(fmu`l~nzG#<~N|@LQ$*2XztuOzz zPiOaxbGKq!ig(wFzs=izy?VQUl7GOdrI&d4($5BLXZo<#uT(PU68DJ%Uq7yMlYO3R z{bUEbUFXJVWzlxdwX=_1tN2nFA5=bfOXbbYrDqrOR>-1&0kpyI&?_NrYLJSIxZFI&!t zZMd(x`z~Mh2FGfRIdw;m9{u{iFz`U44dc0kMVwrjxvRf#I=uK>u~u8+g5?KX8EkBW zSoI%#s#ZL{+~=%al3BE_*<7*Zw=)$l)G{QjFt=IR^7ZN!^OMX%>+Kgj{`0>6(b>KK zxBV;6Pr2UEzv*O(kXZv?nt$S{-`(+lk}k~S$ZN{qykbLjeW8R*&65q553Zkk`f+uH zS$@{CICgb|g8IhGzP1+IulUypi4{uT32|N#9(p}1+N9IXa^Wtkn5+Y-LeIGi3i=){ zeg5~?1e;l#`K2`3-#Ie(9(GvNe34(?j_32O#@9zLTCl9s!kunV!y-}EB7(RJG`1}lv=d;=&KD|4IHjL zJaLO(f4Q8PdK;_7Os08jA6hdXur6P8(CpdI^2@z#|D$X^&k|`4ycx`_^zy)mlftDk zY`4|i4Az&c>;E!aP;%=HVecgGb<4EE!pI$}%8}2g44i}ZpUw@VR#~uC2 zM%UAOv$sjFIeRv4`SxuKza>>}E`Kv)%aIg|-$l$RU!3!Tmn$Vy*dM=DC|Pj$>_K>s_DVuxO4(=Wfde&w%c)N1m=~{Wh(?zUKK7mcJ7& zul~>5Q7W_Szlg*tsb3w3Z|u$KJ#DV5_#!k!D^U9Jmt^wtJo!S2txnUs;$Bt`FWB~0X+dBr>SN0CnAfPc_ zwzG2Y6dK)=GN=CfdsL;tz=GfInp64bRS{qKg|oN3udd$xz<5r^mAM%|}%#RHyBef{(RABv^Aj^+c zB8B%(X5QLt$|z&(mcXhRetK7R#C>bi2db_7vCEIU$hN->*-SA@On7U0uHA=U;!cm?O6P>b0iJYh%S` z-+jGh%Z{k0T&{Zz{Z@B2o1`zDbf)3)&OrJ9jz)#omsZT#rReE-Ei;L~J#(>d`~HAy zp;}W{Y${hcwIJq;V7udO9-us>o;?z;lDP^;<_?^7ecC!c#oW>jLEe9JsN!A!f+|*+e<#w@iOpcq>-ETr8jE?J#@7f@@l~am$6= zzZ)6NdHwpUXU#4{Ikr{ZQOjP~F!NotnWNnF&umWgkM-BK?fc!naCwTuI`594#f^&M zeWpx49V{F*>knVPaDgRA$^GimSKOl0=bY`e%UX6sxig{i(Km*`FN|sIx7iPTVC$Xs zwSt3(XT{YSF%KuzWCjY)_cK*|yWIR~&yv8-%>M?;nF_n!c<+8DTUWhho?uzmtH(T6 zOD{d<_pqGV^SOGdk@*{@S$&1TGFKYIvUH-Z_xhP5Nk-@_|Mlz3Tk0f6B z!ZP(wg>!bF=k$y#t3%wvyImF2_gYL7Ic;yZ>?murtKZsyr*Y-YccX466`S17Sr?W* zSu~8PSA5|X_CHp0zx}#dEaJu57o7A&D#N5|tKG_1%+1R;hOW;1)H`*>lfq*^3J#=O zOju)|D^NJ&U%-0%)ZcxFAFRA^wf4%n))&1WAFK6kmEV|7Bg;CNAO>n z_(f#0x#`3oOY7|4utqFD|9r#k!h+p*Z#FIV7v-}2!@a?7#xVmsvjZMaH?Z2`gJa1oh>)^peslL76e@tq&9rZilK%2sL$T{fW8(Cwbv! z|K6+Yt12!hzdX)EdOV#Y?SZG?%Q$_vcCuR$&`+0D48c%C|()LgYwEK?X zyV{bYtAD()>%YLjzJBYc!s^n>z1@jCZ7jhx?BCMg@`ipjJG3JB(&Y{BB^Zr2o;w;@ zotnD$wELCLlakB$j<(Km{wl5H`kd{B^uK3;cPst{HLtySa6;Iz>rX!3T9{iMdE2*bImXPI-3k?&MUpK$i^GR7!H-DC5^3J07>hhXf zEa=gy!X2F-}Threg?)mYz#olhtuj}%?mCx@V+xva;nMd;JV$Z$*�~}{njbJ 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/ReplacingAnActivity.png b/docs/html/images/activity_task_design/ReplacingAnActivity.png new file mode 100644 index 0000000000000000000000000000000000000000..03b4d929a7471a504a6c17bb526ef04177b83995 GIT binary patch literal 45079 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

        =YrzB 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 Q0|Nttr>mdKI;Vst0PkH)L;wH) literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/ReusingAnActivity1.png b/docs/html/images/activity_task_design/ReusingAnActivity1.png new file mode 100644 index 0000000000000000000000000000000000000000..01c1729bcbc86e1252a5ed3d5242c879407dad2c GIT binary patch literal 30077 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 DoKO~= literal 0 HcmV?d00001 diff --git a/docs/html/images/activity_task_design/ReusingAnActivity2.png b/docs/html/images/activity_task_design/ReusingAnActivity2.png new file mode 100644 index 0000000000000000000000000000000000000000..288d2da757d0c06a03cca6134c3d7bb50191af66 GIT binary patch literal 27762 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/dialog_icon.png b/docs/html/images/icon_design/dialog_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9f924223db05398e45a7b651f9e68025312f7c20 GIT binary patch literal 64323 zcmeAS@N?(olHy`uVBq!ia0y~yVEn?s!1#%SiGhJ((%aPs7#J8h3p^r=85p>QL70(Y z)*J~21_t&LPhVH|o2(+@64po9bIKVQ6c{{R978JN-t2u{q;0uv?eRSmr)<#+y}El> zb+xsOx}U`#vpT{3v+f_;FU$Aevaqjzdv$qv=-RC+MxOooJ}E|;K}xEDk9Y-K)08Ie z@L^yU78Vvh`v2Sh|LYeAZq(_zctF&3JoGp6KC%-a1c^tZ^7bxTG3E1%i7NAXXX zv|;^(JNA26qo&uLKFogpXTNu?vBingiH~I`^_`eJzj<=TJ2S^6fBsf+xt#8LpQv;3 z*>AOL<|piY_PVPZEp`g_Z9evT^UV8aL~i&pnm^{Vn$M~CgT--XDbt?3*V+YFySdHt z&U-PhuC95;y4%BBSEiudS-tJ4#=9Si39sy>3jg%YToS0c&W81k(xUDQ;W88ar+3Al z)(d_RD$;Pe;>gaDk2wmvqwZvh2t40ssj}pocYB2C`3K=~Q+NLfT6Tb2V}rd))5b0L z4?J-cVq6z{*-!A8f6eQq2{k>(9=_lZI`O5PyU_TZ4CmF~=C(W@WtYG6@$1*Fu$#Me z2K&y_(`PcRU*^#CTJcW#_5SCbw-4@3zIu1l;;+qLZl-e8@UT`z)Yw@n%u1X2Lu!BO zl&e$iq~DzD+UV|~*>H?iOIyxXce>C4ab?a6k3C)FHmrT$_@Q=Zj^{0=%J$kfO57>$ zK2ENgula$AYsFul*%v;a&3vnA^xb#)u~kpiu60by`gpNOIC+z##qSg@nQ2Vb{z8la zjoE8zF0uDqiMq#tc1U${AiX$xnQlZ1Xzk z2H!hPk%PS-_Q<|sxm*3yJotgE=7#m#cw#&PLoRtOoT+9JdYQfFCBwygjODc=lNuGm zX0}|Z%kkiI-LQlG;nC|W4xT?cTl)RiWWBiyE}jkfQlv7MCE(5i{jXAXNmv zo0}IJ^0?^E72nwF3(xF!X}*{twa4d$)iSY|E1|K|rtTDdTyWi9Mq+x6gy^)*Ki~ZB z&p%dMD{$mEhl6|3hfNK|*L$yMJU{(2r|!Pqvo1!z6F)mFlph@|-FHT$f|WHRv}$es zy;sUv75s~yMxOF*kU(0{djk5*0J8Zd*6yyo?D;7WwVGOx4&)s zWP{R+cdnE_cKc!X%_ek(?E0C#j(ePBvi`mkVfudTL7wUHBm0eYRekP!?-c9)-TwQc z)2{sxu6q8P`{cdbS%%Z=FA8mEHId!%{b9M78v6;6ib+gcY-X9PwfLwP zvvTIy^t@f4cs|5;C$YX;XyK>PzWH0@6%k|YO-$vSuWegeoX);m^hPVIuI{Qx zgv!MoQ6iIXU5OFz7ON4v&-dIOOCtls;ny^TsB!UmH#=Hx&Pr_ ze4LMlJuTfUb9^-hM??msOl8Im367)MIZYo=t&tqvhvh2P1%R~EE$~Bg;tzM{c z>FV}nydB>>r(geNQ8q>0{+!4SFUDf!jb2aK-mop@_UF0Ez2?oK=F;u8j;1ctp8c!5 zn)KaI_(37hPrKj;6GS-TQtTbBs4f1vVut9_3K7$H87q4DPP=9cgf)wcueD2f>b9d= z;d*o9(~o;UH!NV+m1WJ4pZa#i6(-Fb>+SDcYNA~<*Jnk(jQiM8-CuG2QM976FL5Z)Kd8Kf?ajBRE3+)jpS$bqIcR%p-7MX+c9(izaJ-M$bXufBo3-uiiM2V0 zm4j~V-pP8)&1B`xvYH+n)U@ReAQ{Y*LlOIOs39zThh{6Kkb#3 z(2}b@xJkfQUQK%E_KHlY0`5hpkLT>3|N8bLvAdg2y;^sm`N&k|^odQ2pREdV3gC(B z(47`kkuIblJMYSTj=rR7j=L|N&hS0itn* ziVTJJF8NYDS(AMa1J?zSOwBy?n1xf0wr_j;p7&qE?uchh856q;YPdMg-r+gf867`= zsmcq3G%JQ1E0_Ocs{dZ>bRq1Q=C2D6dKZ37Y6{G2>K2=lb#d#X>d44>>kb?|Xc7Ct zc0zn$W^YLLhTN53gPtBey*R}ydo`B}7mujUoW3Rb2ewZOlH__3&-mD_bg%2aFSDv< z9+y0?s`E6^pqGX5eagjSjkcdsrfU``aHSO33n&(wL~A7UunIbUbNJO8pq(Ob=cTY$ z@Yh85;V^>P)d&bFCa;d{X zFXA<0%hA+B4z3Li&N>^!jC;?Yw>E3nd;QeINZ@Tis)7_SA6L4Z8$5BOH`%X(XCCQ|aX-AvA3l{gA+~>XMB5-nM zX#BaxYOZGWpFw|e%8P#f(fw@Er@Pyyu{lto`S(GOnaa2P7?rPatrF(8;o(-3&T4dv zkG`?@HmA_T8LZn+e#-Yc{+?;xE(gBzAH5V-->6<_@*z**Yq^TZ%9)DOlP`Bveq?ye zvABZg?73Mjx^E_L+9JDidCH4jZkOk}IGsomQFrP)8mU;$V27p8>0Z_J)fbC-Jhy#4#Tf5$ z^JT6?Ucrq&+sxLAtu6o5X&!FHdF68U#4RC;6IUBEc)U0#rCGC^!6v3lds~FA*rV4E zF9pt2`S&qt$qUhlGF4T_?LKkhuF*XPehJSL4?1(1uemU(XJ>8ft5|;Ko2gtfO-zz^ z_#KbR9JgX^Y3*;gy+dt!it22Z%_-8l;v%sR%C8sH8{63FbZ%P085NzU^q}XX(vEK> zz7FTvekfF`8@mPT&C$R6JN1!a_xT+O(i}BOd#9y_Hr&swG;^q|aI~?>-ta3TB0qo8 zm8r)#SUr;}wHIb?w%8=q-7Ydc_`?3M*1u_GGnv{KIk0_q4m3Kxc`j30Rc~HWGxNTN zO9^+ZTSXIBng(xp%__pJTCN;xxJtEfdg1z0lYTK|9G6ZiOx8KDQsSuc^si3a*e}dH zDBsXmdd`FMK&jiwcDt!6@1kOlKACqTbCYnz+M1}dMK?8aH?5l4d`13wsG+vIv6+AG zlxZSG9Ljz&tQT6>te!OOOr^ljBE5-ztKGvorF8Ki#TY6lgM!>vw>bj@smxZ+~2lxBGv4$1Iz^oX7k0 zX5W657UO^HtV>3Z8qXPnMN=NMDHk;x&5v@+*r1l9D?aJnjBh2}JE|=L5>w9neR%w@ z`RU8b3dvLAU3wllZ1l69rJKh8w!gma|LwnTW-H7-dU1)z;)LS8i&f)49r$!0>Dsw} zJN`fKzq#FB?w{h`3Kh!~7YY3-=O6GjZnhQyCAO|f*Jb#9%>OgiE2KN+3bRH`*}OJ( z$%8`fbITJPb{||nq43-6k9X(W|Gl02IaA${_3GnI6W6*ww4PMeY+Y1z(oMoaiHYCf zM9>$BnfyK_4V&k?yD6)u@QAp*UzVG``B|L*O%zPopz`l68s$IIv4H*0^_2HoS> z6g|_~;lAw_6<481_YDHaQ!=K1{=M^&OW*(6f3wdPRR8AusqFH^qCTBVrUjG&osMbu z9a$j$=@H-R@GB1zEgoud=oRp9x#Id_2}4$n&Zn{qyQEIL{N8U;|Ig;%uF1=!^jqFk zEnRtR+5w4Kw#plXdX*V0Telt1c+73k9m4w6mEB-d({{}!R<_2##+53TGmEdN9No;I zzVkp*Q*rC5Cx`pLRqtK1KfL}7>$?j|hq!-E)Ssw4N$>gMcKN5<+keY{KUzL5+p+9+ zgSx!osg#=cC+5`O_i5yLm#>!C$H2ugTaIyZ;>O}??s~Uh_MyB}pojv%cH#NhNoodkUwUolx1l#?UPfWVuB8v>Od~obFg) zyWyOV!2`Z?2~269H(%iNDP7CTaPt3Gj+d6}Ez{bSEDyxKKYuz>Lc^_InCWG|rTdfm z^ohj{K8=4hCmgJ;k9s=ccd){QOBu5q&V0(zo_->d=aS?8nYSH$xE(J@UUz!p_gq5M zz#`R5VWu?y%pEri-IG?R+JBsz;>fVxX0CM15_Pe=r#gCA%z__Gk6OL0B5z^39^+^J z4YEJf5@%1_=yJla@lD^g2XC9K=bSUUJZYoSwL@zkUAAiex5jGblc=yIC-s6K2#B0` zP{*MaS1J>9ep*K*TiHS@p#W(S!=~o!!U?Sl3LbtAJbUIA^G>;;b7Q zIt*&no@fP1^*r_Za7NnZ?1w}5wPr}%-pQwXC|E$eL9>xXZ^GW)4_f&==AUF$5?RCd z!Rj&dZnv}Z$}L{F@XR$#Qdws!B;$7H@G_g;IgE>I*C{nO>oi^yI&_0)$)pQRYjk=W zKe-%m|M`G1+$t&5qfgG-f67tI+beyh*h#)GZEBh5Iz`RaS;1-sJ~!3EqsnES9i@cxrGuz2P;AgcC29ZTvMz6ondV9(jLpOZ$@|0<1|{Gd(A2e#qit$zr#@ zx!7;PgvTw3sy@>l3g#bv($gk*tYO>o+xljRA{h_J7Mk44?os4-Pm4yaJzlo zeVz(`N!zb2#}__2RJiO!_5O0*OKxJDkM9gpD1P@ms#twe{(|a$u;#& zbdaId=ZTG1KQT;atPy>8@b;{b12a~CR25QLi2Aqms5`OmNhIr?HQr7w|LEJ@4L~b+k}o3{}MM~YdSnd>V}Ys zB%5PdJwy4-%#R;SJXZg-nVVKsbcZoP@2!O8=8I2UjwZfK?0Mfc$7>;DKYviE+rFh% zb6MVPigT9yn|3DFX=eNPt*u+Ty}YLNU7X?_UO0chG3&gg4s74kPfnJ9w}|2QPgU0o zepNY|Ty;!q8g;X6t4gnK+pJOH6v)Ngtdcz|`oqv5$Xg#!L+AjXS$ajS*&+q!J zI9^fUbRB*%@SZL&tz1pVZ6!v_SuEW+*^{B z1r8sU`eQqHx^1(q>_O>y0W5ZgCk@(O3qAG!$JF<6$(oJs*E;xn1L|L1w0$t&@swES zROO?rJJgLV>)PGUJQZnAJ}m7uA%1TGS4zSD4_tNcA2o&>C204$E3n7SJsP^a%aGxu zxSUF^ruNNmQkk3=tLIjnb8fblFaG|C{dVA*BVS*9PvK;lo%3q@-|6bidv7x@@pw?+ zuuI8i;v^+l7n%*tJAFZ zO^juXewTVGX$#-FIJO6@??kO`SKD7HwD`fjSuJno{p6K6r)%|J z>2m)~e$Le*Yi%rxy3CE%$*(RSCC&7vmR=vhaOdHXcC zC4`z>PW$yd{@<_p|Gw7G+)}=^Z|#9UN)Py2G}rvR@3rkv6pO|7$-6U)KRn0e!nfZkx~_Zv$hv>-#XV*XMmgpe*DRTt!H~Vx{pz~=@vlNt-^Q(4y-jF~{^_6c zZ{Ht{2z$MM+EtT}f9~CXx_QnP6UCwgk4;l8Jv}#0`&|F;WB>c__tV}sr@3!d{XCE7 z?fSJFR#)eji|?|U^n_{u9HxQ?9?h&T3f@hd65_C3!Rz;DaibZg6UBcSJIt)O_u!`R z^eh$^g^d>y-4-94^z&{K`=ZU8xD2)Z+PFU-ns({M@7Rxf^)@iBeCe6ucw(*1>{$MZ zRyozWhCQ0fu?pEomFI8@_P#Z?n7xdR)nTq1yQ|@wlZR%w9Tz+4(|S;D^(ALvucwiq zOubuU!ogbc)=!`BiU>@IR2I0lU;ab~)Z%@Tq!==JCovP$e38wQ|QHiA?4NJt5IY85K-&HXS*f zuw_U1-vy%0r@9@*y$y>yyJpXPv--eQ3Vk3HA%d(O*O}H+<}#yY4?{Aol(TS=P@kZ}IIZ-|(4jhr`Le3s0}iZ;2B=;lelf4x?=L@*-udfcA|qrJ)^_)S%bs2)`3(t{tGpLFuzmMld9r!h z;Tb9aqWba!ZhEBkn9XWiZ+_}^Szeki)_m%DtPLgW9D0q9* zWShg{n=*EWZuDH4c6>#Vr^=bsN?BH;9sB$8u741Fk?UZ{RVWz$Yug>=8m70t{X3p) ztzgf)%D-#AUPwjReN7*mH*vB2Mf=J-VlK4@8mL)_Oi~P1ZQu5%n&a!<{{^uU8fV$3 zR!02Z@zwigDwmCKBhNek%g?&zm-tk$+b`gj(0OO%AbX1;@Zns6Q`OJko)uh_=K0sJ z{VkuE$25ksZ!{LMHAjBmrmuH=;ivbKUEUH5a!-4e*3T%gs5VQ>eBz=#sWh#wsV?cw z!|$cX^%~V<+>d?v5&N}u-U+8~cA}t;{?u6(D{CaC1>U>t&;I&bv}1MuTa5;fP}y}t zviu)drV4}!Ufm_2Q5+?#RohVERF%Lx!#kKc#r)4yt3;E9e>^Wf=AFqn&vFg3tUHVT z44%izzFwcd)HqMwQrY>Jsq;sb(C*0G?4HEXD348-l)d;@CE8{;KAY}#*nGnOS@CBd z)Scb>-{+?AE4J$rIy)3wy&o6ENZgcUo1nD7?DFSF$4VD(zvwM-T-wlyrLMBjbdI<< zr*5N7Sg78~l{2i`I4@`Bym7i|s3De|uGBO2!CvpH@|HioDP&f;9ufYO{q#`PV#kx- zi-Pq|F9fxzE{N=1@uO;v?<(20QtxJ7ea@E?mDecDOs|@-!(HHB*85KLtJQV(Z0z~J z75zFV{oGtt-u^?}(Q~R-m7ZEd_gpvYGW(6`+6_@#8tnu`(qa{t{yOnMBglcb@b9y0 zk!4#KW#ovz$k^k!;=z6MJ)4i0f<_WbuYN!6Egf*zlZm0y_~rq>_CuV_O~1pq9_kCc zaz65Um+QI1ulZPJ{Jd1y#{F;W?%gf%!OVLXC_dCV;w04EbJTb~qo9JcNB$y}n)mBu z!`;OiE2NzD8v}OourG69`_3%KF#n$w@ZQ45c*}zL=q+4g!A;%^mt+`fbG@|>s(gO>s83ekQ>LVf z==E=wcJ|CWN zEnX|av9TxTPLiT_Mc(^;6Tg+__FUTPa)u-MK&h;Ch>5S}XXeuUs}~-~-Qe?3EtqaN zZPCiFTa%t_PkV63##Uk1mJQE0b(*bI-+oqiljzB016u{5j2M^Ad#^D1e|X$GZN<{B z`ny5}E?;R1(6c^bZLaj>Pn`v;(T;kHljqePojnh9x-xE|JxeZZ%dWh;+e{`Kth6YjVTujCXo?N6UuYWY1Wr zm=^3jcsIM@*1}ch-RsNu|10^vS|PedTS+=hOp<>`4SgsQua@{LJLW_(CBT$!(acI_0mmiJ8MA7uV8HM2e7Q#!hFwU}GHfQ{;0 z1r-CS?P`lVul#&1Rq5Se{aQqc?ZnxV<5m-{=6v~3YdFuuJk&I8p2{WF)4a1d)�A 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≻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 Y7107uohYM71_lNOPgg&ebxsLQ0D=GlmjD0& literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/dialog_light.png b/docs/html/images/icon_design/dialog_light.png new file mode 100644 index 0000000000000000000000000000000000000000..85056a9ff7a3761500ee496d99ac627c5f36bc35 GIT binary patch literal 16440 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_alarmclock.png b/docs/html/images/icon_design/ic_launcher_alarmclock.png new file mode 100644 index 0000000000000000000000000000000000000000..30ff2671a2f6d50c2742b8b099e315397deb2f1f GIT binary patch literal 2988 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_browser.png b/docs/html/images/icon_design/ic_launcher_browser.png new file mode 100644 index 0000000000000000000000000000000000000000..f58b84a0bc132d90af162c665014ee0f4ecd0b07 GIT binary patch literal 3426 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_camera.png b/docs/html/images/icon_design/ic_launcher_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..c2d760642613089d2815012d4abe9e1fee53d30d GIT binary patch literal 3137 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_contacts.png b/docs/html/images/icon_design/ic_launcher_contacts.png new file mode 100644 index 0000000000000000000000000000000000000000..826656ffb528ec69a68580673a5bb9351829e2f9 GIT binary patch literal 2995 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_email.png b/docs/html/images/icon_design/ic_launcher_email.png new file mode 100644 index 0000000000000000000000000000000000000000..2fb263787ee25144b99c90db8ba14b7bfd26f070 GIT binary patch literal 2882 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FG!$TJKBNuWozuKcDf&SE1IK?I$LG3;dxeBDYF$o#u>!nb$WhN!Aq7 zc=W^2`;N2X=e^V0`AU5c>WMnMI2rvfA-pK)*27Pm-l_iPmU?y-0#v?nv zOMUyddgTpO#)|N@f0y34__Nq?!D-f_UX2CEvoiDFy;!mS<=fIZC1sXcyXNM;pJN-F zol&}8QR(1GwiORWg7w(S0vX=d@;~F46mn=18zTo#LnDveWjoWUNh%LkxX*sGGCwE3 zd+q_pS8-havZr?W5*tzW5-A9ru)|Y?3Y96VRd-Upanf24=u6Uv=!+A!U z$>hM{v&jwd>th5C7{8xa<5hGy;m{qsg90*IW^9*U@8{JJ%uEg_{mRh1YQ?1kyLRuk zo)foo@1dt_wBEidnNwtW+kC!lZ2E@&^9;u(y<1ukR1&n~#!hY~o;#K0ysA0!UKUIZ zAMdpI%=q_Xx3|9Ht|*=}2On59oYLAdG3xo9KtiWpwv$dbjfa^~G9wOsmwB z=SBVhId5%h?A-Jj>y{T-quZ&E#q(+++==pJxx4tKED zo~imgs(y1CK7Iesb?NNF>CwRzudC;CZsQAfY|+d&oG_2gHE_#&6;G$CGP84bn?!=^ zK37c$+Ew&Qeg2{CU*#uG?n)3na&+>c$cC$2Pd`jl&`?z6jO%7)@9GcvcAENV*3P$1nY-}Xbh+A!4PUp~&h75)bv?9wf9K_trE6?io3FQ3nxE)Xe0n{tbw*~p zg{8Euak|6I8JxG{?=_xOX4h0rNqO+3zU#q@_xcYR{w6YX={)C7DiC_(xMmSYu)1^N zJ^3kG3=`)~YkSl_ec|dK7D6jmaX7Bk;o(-jW5Ranisp;ilY0G_CaCqe8{O5u^|ERE z29Mq6R!lK5lU4nHuQhAM)IDGCK4j?n)UiOL(Q}f)6YtEYiyOn1U&vc?-tk4ml278B zbH)F~1@}IkBpJ9!BF+A9gojUq$=kFa%Y9w{&bU|*Wa@oVra#bRdRJfHvY3@kfB)%T zo8aihsT_P^wblx&%1w)TR+#!|xBYTpUR1m?{KnU%(+)(twnTFKg8U*eKh+}(f4n{0 zQ9S2()8XF}o$Abj+eLQHdh<^w@qfCBUC8y8oBj$*S8c21`t?j=zTcNZQKr-_Ocy&# z%y=G_>#+KE3dwM!v zdlPxXb82htJiA0Dw|==^iD&s*yRTiZ>)j^5x8t1ozZOA%d(mslYyRI^$SARTzCo3U z-}Grs*Tk#7zI@7MpuJM6A!kFspp&Mq^Z6~7Qz~p8#s5%L{olg2P<`E}X~GpkIXNdz zow}qI%ro_dWBul9OJ2KOaIn}=tG=u5t5(vx{pJhg-UsiK-MwJT*7lq3OSD3RxA3nG zSj`ihWghQ*U<A92&%tR6E%RBA$!PIxvD?f))$izQ-c@xAm=>t0FW$CG>dD-sc@_P6@^6od zWlnm1vE8&vhg(Q+8SDL{9m=j7?B?;?M;>_oIrHK7-&-%v_{zQQdc%$MZSv1Ff>-LhJ{E!)1Qzxn68e1~U~+fsxsj{ldp9QAdO( z$Xsg3k+-cBdS#Y>s4^J8%X6@-*GhO zY+_p-TdLXuiz*4`%OQ&xmp^@5zA#{Fg7%Ubx6=;0-RECf@-krGmoFXPI@N!hh=^S{ z5^sBE?c&?&FP>g|5Ypt(clq6pIvqk1I`-8flB;&VSP=HJ=cIQ|m+$wyRcl=(uL%9qT6+CM(Cbt8{DiO6 ztUG7J<}&d_h|$H2?Br>S+uZ~uf=^z)vr3e$HAmx8%rU28Wj2vDlNvsMe}1rfl@W(R zTU7k6WV5pTdm+Drf5v zT7kB6-Zy7m|7WtGFZi4()SnbX6^Sa5G^SvkR_k8sK%iAE$V9v1a^*4J)Hiq(O XiLM#Uj29Rf7#KWV{an^LB{Ts5e*=D- literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_email_generic.png b/docs/html/images/icon_design/ic_launcher_email_generic.png new file mode 100644 index 0000000000000000000000000000000000000000..590ed705d3d3dffe21d7234f38a82aebaee692df GIT binary patch literal 3458 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 HN@xNAe(ID! literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_gallery.png b/docs/html/images/icon_design/ic_launcher_gallery.png new file mode 100644 index 0000000000000000000000000000000000000000..965fb714309c98cc6bdfc2eabfe972561c93525e GIT binary patch literal 3040 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 gA7mdKI;Vst0B7pLPXGV_ literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_generic_application.png b/docs/html/images/icon_design/ic_launcher_generic_application.png new file mode 100644 index 0000000000000000000000000000000000000000..75024841d327c4fbaefef7c8e9c8d0e892895f93 GIT binary patch literal 3180 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_maps.png b/docs/html/images/icon_design/ic_launcher_maps.png new file mode 100644 index 0000000000000000000000000000000000000000..f436b56d0a615c1fed1fe8d6888a069aaf0a17c9 GIT binary patch literal 3618 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 Xsk&`du;*k31_lOCS3j3^P6e| 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�PV*|l=S%D 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_phone_dialer.png b/docs/html/images/icon_design/ic_launcher_phone_dialer.png new file mode 100644 index 0000000000000000000000000000000000000000..4e613ecce9e9f1f2274f6c2767eb1ee566835443 GIT binary patch literal 3621 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 Z%#TfX&-bKWU|?Wi@O1TaS?83{1OU?13s?XE literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_settings.png b/docs/html/images/icon_design/ic_launcher_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..16db056f788ea81a1c52a89dab5c92fd836b6e1c GIT binary patch literal 3285 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_video_camera.png b/docs/html/images/icon_design/ic_launcher_video_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..e80255a5d6f9b09e34740f431fa2d7c7bd282c56 GIT binary patch literal 3428 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FJ6?W3gp$6JMOCLHM# zPEzR9TC;7z5+@~rP}WsJ!cmU1i&llSb_A~ym|&)QfyqfjvsFrIp^7N4XzMY?A_p1k zZId6c-Hwc}uHM`JeU9y~d;9<2n0&W1%Ua-9wEt$~?DIA6_r8z)A2H2G&2d+Xkz~!} z*PZI~Gefne+J~+TQJWgYTVbOy{WSlb?SJDwJH1oiJ&DU^+vAUBtwB58*Crik)MnTi zapv*Y3c0FZE02Fa_kCW`4yV@(+w1R&aj<-=P_undVx=g+V~{*?0n;%Ll}*p@#pmSz z-v8ymw%zsj)?9wMD?2;;V8$7C)2Mx)Q`B$dlx5^(G3|6>e8(xiBS!C&%h`W_-&a1X z%71E}`f;D}^I2P?dJQFbwr$(K|MP)gywVGfh47{>T{>a@e0KYNkIQ~Mne3nVy?gh< zv`pDbMixf{x5a^<4$1EqWv!|@FY$2$cWSqjqIuGWrn`CVrrGP$4sdgE9hi{Jur!GE zV+GT?sEtgww&gZYFMr>*>sM6=CsT{_!q@vnSuK9#iA-kFTzD}GcFMGj1se(k zpFDlm#J2w8B8eF@W++^8s&r+&*siJIvN+tX!}7;rmN>oXiWR2J?+bP*i10WD1`0}i z{_ME?GSf1j0}ZX7JZaj;4xBi_@wwyvYgMj=>5ts^_3F56$y~;=AZY0U_r**Rx?wEw z9ajvS?k!+nBvN?y_2PVl9?5T?2Mux?wZ|q<_!*TEVXD1DjL;I8O?R?%TJDTDZ8AbW~W}bXmE3P zM=U%XvieZ))+dHvBD)tomf);lncA^f=p<{pV&;XoGu2z{o)s+(YFzMi!GZTLq(Y&7p2J)zr03T#g)O<`I$CFfvfh}4#ud%}x8a4nPI zZ1hqQ?$Oe_&e9~WwyNRa1ZLjT(~ZyXxGStSQsppp}^eotxILkwAYxYh{8}#^uWO zA%!2fer{n(3EfnqA#yB7I3@I2^IE2*;pS|cPrqb%6Lj-^m)ztvEbOm$eqOh`>w0W4 zFYBhcLD^RSpFd&TQa4*-OJwDGkB@QZ+JzVK721gOG4L7a#8&OG6Fb3D$E5q-HTB5v zz&$6@L=;xHugl8}wEc5J+5gGYr`HqAKF_oL{&aS9{?4EODuX!=PQLp6O#AmMuUl3+ zu%7(HcI5$HxAQV0eG{{j=o_E#Gql zAME^K*K~z5iQVf#?Tp41zl>ff6ioYn(fZ~A@##}C>Oa3oE)NS0HNE)v*v1E6zs+r2 z62tt-rN(jX5jmFJMf>E`wZ(R@MCpYu(OEyI_q(E-?Ed@bS12_tw~RPd{b|mMADdE7 zpL$>ap;0zUM(#v4Gjp?nRUT{Y)2xDOCWW4QLwnYJZ|v`f1qE$!U4Pjys-x2CtK^Ie z9~yNTcD6BkeYER&(A@Jq?#bS0o~R{!rE@PoP~DRsx0!8S)V`XjG0PH8ef##UQ6bp* z;wotcz3Wa#E;3&XsCdUEPg#}{PW%^RzH8bMO@#+C%um;?1Ns6fpdMm{S@;p4m&eVU0N)TwEo!ga06HH)-Vqv z(b}0O0v6a=PF-bW82$4>kY8V#2Dra@A~)O=)>2CwXyvVNaO!^mljV`ePM~ z9QSS7#I^opq27i=Gxx=5tc&5go_mMq#BzV|%ZDCTK9zV-T(pmE4B8NrH zjJBQ+o*qp6lWZ$;@7pP#dE7q_-YS)-x>w1WGgtP)j=$d*=&w)ZQklGR+unuy=7ruV zetzy;!|^wv!MjC-oA{XTu#25B;tMH=ea*ihDN=daJ&7aA#%GspNqYGurDDaxloO&H zA7&n$7}z=S@iU8Mx{`mNTx$xC<8*dTGjk2Jo4)#Mz|Mba5kFT?cj%3I`|mKbKtYdk zf3nGh;?9GwmZ{}TExkOmt#qjbcUg||uHCy7`W&lY-~H}*ca`ZRU(<~*C#Ei*FweZi zt4<~LiKLu{fz(;QCx)e+Q@Aw$3W{cghKC0~ZoM3)ctlj|Le3sun~azL%;!6|&PzWi zQGCNOGU$+2nX4;njD%Fu)`NW|3nMNl^-4vrYnI-AuTeO%C(>?l{N#_aPU{4}zqvEp z^2yswpXRgc|GYG{DBB`0y^(3nhQbam!5e!jW&gbRCco*HfOB@W^giy7hu0hH_q?fK zTh-pSu;jH^!Ji!IYPGA}vZsRr-DJ0}5||ah80ofJbN1HfPvj=7TcRN;;`DF!h9*rqi;+baFwnD6X_w^v^~u8rlX{&$PjI=-UWG)wJ`(cy~x{BubhR%-*E6*#i; zeR#DwJ@TNi`lgp%r#H`fBUHO-iruD}M<$&;cXG{LjZb$~I1DW=UF;UoI39DCMLXQo zA+b<0V+*Us&JXMR*&oc8mq~r#<=u5~W!#Y+^S3_^YW56(Xm zuwcuUBRLyyEGQ|oydh&}QMX9`be&#Ba~6-qk|v$2{5Rh)vQ059FR}@{wpl^-=}abx zijO9zJE#6#w6^AD*}f-_XFirclyQE)Cae6LcQ!NEHAHk8CokX;J@9W|a;!J=wnK^% zlA90DILcSIo_n?_lkSHPp37!gute?s6{T>?u#;2MF*T!HN%_+brkCp#mn?VZ|I0h) zd4D^L;;%fZ3MRRytvxDM(dNIttc~7(z3S0tM~Urj4q~4lGdt_dRedCAq`D?1@+h0+ zRvk{>?DfeDWigY8^7Od{_apKYZmP!A!Im-qpt6fgk*Dk-u{_ek1V+68*QVy@#Xm`RhKUm zf0(H)GNNy%jvWia~7U<-mWN7A{S-%(-#lgpQv>=9R^^ z=K?HL7Wy`YCcWHg@kSt{HRYF-Re$d0Oi5;Yn-B68$v%7jzPx95@8uvrz z*1mljo8e=1=lrSz%SDXvo}ht%TV6ocE&>49mbNj*H zzwfmjelPE^itYB<=4N+Gk6Zr>3kpAHbKjra$8~6;ik3n6g`fvP`aaqR&il*$p5k_C z!Qs5>!b2}*4tP(#bE}Nc=0M|d{nvjP*d8*nY{|B3Sl+tMo5{?;w3LH??a7enKT{8< zRZAY6ZMog`L7m@Xmu$!Sd&cesk)rc3x*^%c9gDNiQd-BHOLe__AWpPyH+&kpPioAUZ)#~d@YNz?1zo!GGRZ}Wcnn!e(i zqHVV4TGyTa72o;1{M{nma-pjH3Ho^qpNpgJojdPuGXK}3&zydO4_~wRzuwQp!%*8k W?W@k3mv#&c3=E#GelF{r5}E+A%x?Yw literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_voicedial.png b/docs/html/images/icon_design/ic_launcher_voicedial.png new file mode 100644 index 0000000000000000000000000000000000000000..0c84fbac8dc3ff8d3cdfeffacbc73844dfdb92ff GIT binary patch literal 5794 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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

        Gv{8T3=hcg%a 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_launcher_youtube.png b/docs/html/images/icon_design/ic_launcher_youtube.png new file mode 100644 index 0000000000000000000000000000000000000000..48d268da5d1bbcd7c2195f87972a751f74f08775 GIT binary patch literal 3041 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_add.png b/docs/html/images/icon_design/ic_menu_add.png new file mode 100644 index 0000000000000000000000000000000000000000..6752bfd1007293ca6340f91501f86c71b76684ce GIT binary patch literal 2017 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_archive.png b/docs/html/images/icon_design/ic_menu_archive.png new file mode 100644 index 0000000000000000000000000000000000000000..a4599e37a063394c74fd83c3d255918431941641 GIT binary patch literal 1354 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FO+j(uBA>&fJDO+I2bC z@NibV+%|R2)bLv4s!QiiN!8vs*%r`ibLRHMv@dnV zzx`!bW$%HPCeIk3o=oYvyS(s^5o3nQ`3>_A)=B-AIlKCn;)lt0VWvd%#J z+k@%s+;`XSE|0k%tF>t&quc(?cXn?3`0?1@$Sg;1P1PMo&VF6}+J2Fv&Q|eT2WIIM z3!ndfpz=+_^UA-s%k$82-C$vW!7IkNbe{2ZoiwM-I*rxfrAzy^QUM znBauAgnjqx7Vo`Uxq7qrx0SZfS4cdatoC%F^QTtk(7KD<$F*3JZf{HYcTIeInBk*6 zpBE+VF38dU_cMI;)m_z}PtPvDyk$bBQuvD`Om$2fZ#JHs zv%zkbxPD3w*DjrtD=qh`%r*M-+k-ze)otwrXT^ro@8jQ^GCLY z%Eg=q4%^G=aaB(>_s`N^xbsQe%FmJ6I}@aGqC+1%RWk~DZ=fIiJnhRK!(?5zgA2B> z2}$#3D*rz5Y~OTSr*kv5_OWz?emu9a#^H+b4$igYpBKOSgSpv4`Jd_F}G9whcaUM;3(K;r}uveNsA$ef3`JqQs|nr@F5a zj?&ft_kQ>9J5$;MYx7?{3t2fQ((E_ui$4qoQaCv(bw~1{&!q=ajFXO zD}33p`M`Bu`^u^$ov7&P4NOEB$2oEU1y(Qe0{- z_xO2;Nu$8|!(VK!9R3?}Nq<_W@8tOhf+mO0(mW~DYdY06{ms$&$-bpR!7~FC#9kPL zK01~DASlq?HT`FkN&l>VyGS-y#t*FL176iG&Xl=2RnKtpo0BgVX}?G@@w&;L8~^3n z>$Uec*@eF1`t$Bo>(uOw-}fJ$Ty6Q;|D15a{dIL4e%a2QeB9Muw`lE^qn1iy593yO;ei&({4|8QXkw`^GPY-jc0bUj08J+Q8+&x`64!ezp(u8JHQG Y*Bkzdc)PHOfq{X+)78&qol`;+0Kt2Vi~s-t literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_attachment.png b/docs/html/images/icon_design/ic_menu_attachment.png new file mode 100644 index 0000000000000000000000000000000000000000..89d626f6cd6844fa176a844b47d0c73b169d9473 GIT binary patch literal 2247 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FDq?ixzVb(zJITtXYIXi&9DBLU5TyE>7MGf`}RNo z{rhvwtW!@n{fMtK$>q2qut6~)meu6p4sY3#I`-qaUt|7l;#PRzYhfa@OX#C!Uw`45 z#~QUWSt~v){IdJydcOTue~u@u+!4$F>V3}~sh@Un|M~m;wd}O7tXfl%dd>L&)1T_h z=RYodoTB%o<7!rCQ?!6z_vbg4&)dxnS?#!5DByys>MP;Y&8dy7*M;jUGAvqGxX;P$ zGvINyaBQzDG`?qk?7md~-VfWk?T_5oIbd>D`~2TmJNG}R;d2k<)Ty7S{Xz0a(gum0 z^|$}>KU=gwhLHI17~P=pI*xeyn+Z(yT9-cfa=`@jNjr-spYnT20~@s}xSQT0ieP^IP)aF1^kdU3J>C z{@Ms;iv~pI&UvhVx+V2I^F0%bLv>HMTb-8YGT*t-BKzoh_<3exY$dVKIG%$wLD z7uU%@Wv zVznB#T$@UL)3Yse`E1>f9Xrmq(k)`L=>>z^402@&4l1g*)84GzSn=<0&2rgowiyfC zOICUPmF+L-3A^$)+HZAnZF+{x$U(XMe`TS#EOiuWk z^0d4*+4I+D{JPfFwtbmfnD9KMezhatKG@Vhdo#15OzZTAvTj{RjZcb;_rGo2c2c>$ zZ^?tN95(uV-(+fvpFBBnK6DaWaQ>1=QPiPeGj6<8rzdCmw$M2ZI#1m&Ba$g9A}WfqExn8cdcMreDRau#hPu)JAyxL zRb-4&tg3h7p=Fi_G9*kKlA^bm@PCf=ktqq?x|ny?bl)yvEgiN z_?HplCYS8Q5++c!`Q2Kc!^{0vhZ-*_Snn)7ZKKYQDki2Z^;EfvPY2{bh!!@f=SL-G zGtRTI56zXflenS+tyD%qSNroWYU@T z@6+bhSeMnkIk-C0#V+U91D?bie`V*&3TsR~-kn$ag!A6c^DkxXqZ!w?Syjm&?|Lv@ z=s{&Y_nx03;esU*t27vPG`=WZ{8ij2c&416$*Ql*qy!UY_w8-?|8gSBtiU-+yCmd< zUzeT#TsL{~`weeI4__B;(74;a>Z8J+7yWx8I$0jrCpE6n*rPPN7jKvdwe*9nH+!RS(mr7)UJAX z+Y34P#TmOk|9J3Vc4+K(!x zcT8J+10S(3;<+Ce&MfY)xxyv9;9H8>{MyS!YtzIcAN^Ahp7!8=bi?vb-XFp^&Ym%n zW{TJE^gI%_iS2!Ow`(KI-k`$h31N@Kv@YG>e0>vta)osR<6CR5H@rET@%H8aWTr>n zW!SRt7eiXjf&C5dz08>Q#mQ$R-G3~9_fx>+#L9~Yg_UgnG4@R__!oWk&$cgnZ*1pJ zz4qN^YS6tGEn7Gb%+C_}^W1;2qhz-Ei)&TeV>U`Lmfq?8_&|E*mL`75e{Y)itM8ik zqKa$2rU}=+c?|X6j+IS(e{)6cOWW>ZSJS;`SD1YJaPndE&YC>?Q2qTvD^Fmgkq<=g7#=N`u=-Z#OE7y65PG0fm zUc>u;p4-{~fAo4+z3$sHz1#(7)9XH-(NL09|1ZwPI&t^R$3*hnJ@-JeXgy+r{;^w53dp@>d5%Rj#rAQDpwLv8zaOMWOVwb4rTw9AA#rZ_eYmA@HGI<-vX? b9){X^>WAx8oVPGAFfe$!`njxgN@xNAw;fDV literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_back.png b/docs/html/images/icon_design/ic_menu_back.png new file mode 100644 index 0000000000000000000000000000000000000000..5ce50ebf179f40d28760da5c5cfb1ff43e636851 GIT binary patch literal 1237 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_close_clear_cancel.png b/docs/html/images/icon_design/ic_menu_close_clear_cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..619858c2bacea47b25846f18306c60498d0ae1fb GIT binary patch literal 2499 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_compass.png b/docs/html/images/icon_design/ic_menu_compass.png new file mode 100644 index 0000000000000000000000000000000000000000..7717dde51db12424875f4b99e6476c3dfbf1b738 GIT binary patch literal 3943 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_delete.png b/docs/html/images/icon_design/ic_menu_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..7d954943d5daf3ebb8e19e1f4adb79e1c533658b GIT binary patch literal 1747 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FOe z-CCo{b>cO9e$jX(C5GPXTNLj=cnmk&M-Mq=NGx@ z{N+X_cCH*_O=}Cm8SDz_6@FeX49$`%&x<-NWLM;O4Es4_wx)nX9mmb*-(Od+beP6n zpYdw*O7m6atMY}tdd^y{=z0~gt+e*jfA&h*Cdpnj!F^p#(bK=L?!KC` zEW_pc*K?PhI169veXQvh=@(a5v!A=?+*FQlS*#oWZ+N{+{>C!jH%-1gcNJExdgNo= z7|Ffk7gvOjtjLGhpuM50-RB;;2YlvD$u}3}V6;4N)|E{ou3dY7c;Cv(uY!k-I+kT^ zKOQet&pt0)xaH7QsU08h_U6A`{4Kd*+Qrt{+{d~6#cJ%roDX?&d@FsqQ{8;l(+6jq z-EPZuKMhPjYWQc@`Lvq4#Cwbn<<%;r9u_{+{(M^QYsdCS3oRecSj_oY>d#!~yD4{g zm?ilxO#JlplWY0O+NtN0r1=h{_$~OUb1yQ6wRq>--*z8Y%CqYKxzO|A*NVS8Y~NV$ zF&@ot^khAfFKv9`_!s$Q_Vf3hGTd}6Q`9V&!Bl?U&!T5XZ^ozZXaAhQz=xv$xJ-dtb$8bJbr!|KGF5zHg6OQ&dItJ_I~XdwSxF z_~rTxmT6HRIpQV@Ra6CDe;Jq8tu#%4+I$V$&|SxWUbGUQ^DWD1p=4`wOF~wIrQ!R7 z8x%RGs>Cc8$?tCDy|(pWYkaTkv)sakZb!5=S2Z+Rbf)kj&9e$^dct>NWe>6)Y`@4Aqu;~2@cN+zEl-s`Jl&dV_PX@Fz$9x1 z-9pjr>RB_ZyieAcYBh%6TEf%n^zhHk=jZov3YId@j|@1>kugj7@%kQnZj;~s4@(v1 z*8Tbtec`#xV(BS4-NMW73%7rn@jG|HB^HCi`!-ot-QGRihD)>ZdPTU8T1IsKU+_nN z3HOXFZ_}jt8{RX|{UQD%^o7;!701_U3MgjE+)GfZ5dYD4Ux-bw@4bS8?XmK(in+(D zgEpNz_4x7IU7UrVC&aTYGQ4m!U1)>Ssf(`{+^n=*=E(e; zhG)kfXQRN0 zx`=jtP*wKScgrO&SWTYjabLPo&YZ84({hiCNWJE@x0Yz61lMDFXg8A}*SMrx=^ zuE>#Tbuqlk&wA)?=$$<0qZ?xQG8Xw>$WorNbnU)e;S1|UJJg>AE-CwThO2n;nQlv# zzP0~kax?>{bLyXWIWWuNM$*@r91EJuHf`UXH$_eEgVv$_+eK2JD&|jGmdy~k_KeH# zf3*%X+D})US16D@y3*S6Vbtp$t0y-uCf_~V$|!J~xn8Pe4(lqxPR75+ic&WZPs)yu z-OVEXF|^|U1P%62X2qq?Z1y~qS18txSa$T3?5hc%o_=BpcqwyA+UT~+64`UtJnlOiS#&SCM*bVy4t|FRQI*{1YvP=bepHB<#&qi1 z?zv7m<*a52YSVS^-nzh3mUj70Sd+}W>o#11?gq2m)*KGoJjYbUH(I{&*%gJfgh?Ch z^Sb8DIeg6T_gaOuOd=KknQ!#eaO_@NzOY-{_T? zo%&Kk-+j#qmAYrOzI%aO37*^K!iLQE` S7{kE8z~JfX=d#Wzp$P!XNj7Bw literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_directions.png b/docs/html/images/icon_design/ic_menu_directions.png new file mode 100644 index 0000000000000000000000000000000000000000..67d3ff21fceb9cf3ad45c3853ccc77229c3e5b83 GIT binary patch literal 1675 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F81H<7{Xf&0 z@KcYUuGbUO|JS4)*ZsY}>-RU=MuQ*IPs>lS-#qn=K z+&q>Gm9-J+wblbIXYx<}>Y|l-+IXktITpFS4>Y%|T6JpE%@o^-uO#;zJ(zqb>CEX# zGI!P(@ZCxDD_G0d=F#)rPwA@Zk8GJehDikXckY~=*%kPSmuJ%4vey~)nB7DK^ zU0IX1t?GYKZW{U6Qpv9SiOckdQ(j&9G-CrxT}QL~>s|AtTR8WzdDVRV!Sy}l{GQTh z*$lr8Cq%dk{j=S*%KY$3ZlRTZhmJ9we!XzUbPEBg4H=TXnX8UX;mP>F;GjroV#e25 zv8NBo?w?!p`APZCi+6r|I87AwvwOn1=E2-aH}u$}nvb_!HR-wOq2E2v!Qq148O^Rk zdk5&sg@IqH|Niv+qV5$V%nNi?e7o%HEUik^|x4ecyEj4#+=XFoOA8fqXaW} z>vm-Rj5xGNJ>}=~)6@0(4_}pERGRjvf1UBXUFTcn9^SK>Q1SR4|93kUp~ZHIG7ogq zW{QdKz8!z(-b9zx0kd2K)t)W zJM&}pL4%OymyvVTznOBW$3A$OZ_aLDz~&Y1C8`xvWwz?GZiw22syx;EK@mqC%5HQY zn%%`vRP*xUrEFnyHM^C!zY0(J@$j$BJntF84|;7RHY)MC2klnhB(gIyiS>=v*2ZOD zex4Fket5LbKDcW8mx(`jSGJ~vO{I zan-+fUeea(Tbnp`hwNs#a5Z~pOrG4eCVq>g!udWsv|Kr5jN?p2?q_fK$K_r2>h#LX z-1d4g>;)|IgzQ=r7|ypGT4}WE=AI9)(snDhe5)z@x_5PIZoukAk1n*uZSm#E-ansR zQSian@Q}pQn*!w4>)(mr;rO7GF)nT6x8`rtVm>jn1Z}NY86lRQwLX?f+R1gzqt-_( zFRG^UseSqu^=7xd%?GK&%&FnmznTar8Y-O5mf3SBE4adYYA93vyFZp8irx=yW=wZ* z-odl&jJLSr78U|Fje*WLsR6J*0iA;m~V#5uF-e3tLM)wn+@@*&dXyVZI&u zh@){K`VPFm;&sHv@u7-G zi|$(szSY+QzuhdHp?^?jmHpb~j;ED>Zd`kvrNZMz-+}G7{oJ)azq#{9xmZ$}tQLe}Bj{H1YGspL`+jP3B&z+50)-%hn@%n=P;L{#bXOSx`u?boLX*H>t0* zOXGSLtUP>K{HoxwM=Cq^6m4ZZzbK)kSnkD>0D0Aqy6TPnK26VZ=gLPg*|ImB5^U|8 z^6#UO51Xn~@#^RgbLBJ_ciJ8ko^2JZsntBCr=r4AX_vyWaQ8m~6+xQ^yYpGr5 zjQhREUvHc<<6qh=xsA!aAGC8WP4l01AWXlOhR@Xav4r!@$?}xi x-5-4a{{N+$djH{mDH$OPm4Xe&_cQS@FsQ|62rlZ`%fP_E;OXk;vd$@?2>^k6Cz1dF literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_edit.png b/docs/html/images/icon_design/ic_menu_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..41a9c2e20b247b22a443e8f3ddcc2ea07aaff793 GIT binary patch literal 1661 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F2!+Kv|Zw>K*&mk?Ncw^srL3=$DdiAb=reCu9V$!LhP;$&GngORb>Tvg?Vm5s*#sXCdGIQT{h_~ zJSV}~!~X8@jQUrKg#s)_51KC@JlJ})Rr2cEQ*!<79eEQwnmiWyFH)K5v#hOW;l_&} zFYfX%ndQ*V=<5-ez*0$y_sUW`;`RrCH)fd4ALgeLdr{ zm_sBhE+loYvwBzb!UvU)A5?a`H@a;4HZy~zG3M<3=ou45Jl|!#R$7#F(}tDTzB9sB z^-#a!3b)6BCGTdXEsA4eeQ+_Sgg+xLP@_WX=V?=wk4KakFRolQb49zu!e@7dw*Hja z{Lnjm=e#R!i^7<8K6tLX`QZaWk*jr6&-%>1veEEJnAajPrpOQ5*JL=G-amGrJMx3t zp99=l@3=iAjhve`B<2AW6asxIrEyI_hxUM_3R7Jq=qfZMUP)gzd!WS>clkR6|+qGADH$} z^W?YS$g}$PxoGcS$?D6u6=rSKvORNk_M8UJ(1z)6(-zOY$e|M!neHpz^x(PbZ=s8x z;UzWyvsT_(D8v-e;c;;G!Nv{;_{hVNP3w|6d=bE`ak{jK&;R{PzkMFGOv zZhrkg+~t~fo|sq0&+5OD``ou|d;QY$nL6zJYO|RBOBw&_k&h55(y5D?I^+D4@X7C2 ztX;(#7qt0+Vp726gDWPVv(+zMec;b0^9{`eJ!q*|UiTFF*F zXKl{jc4Kc)@=c`~pGtpN{Me+uF`)6U`E2QD(h|8PzWaOc`~R6ZEsOFru8A8 zMTHwK{1mHkaC^%$SH6nj`aIrviFr)(XC%m<%ebcL^GyDE|H3YTBU82?wvN;NQN(hg zrlrE>pIVmZq$M1;`ED|J{?h-Y$r-0r}x?yM~m{ZDc)h$#!Q%-(m*^8=GyHP^klhO^rm^j!}`9q{>F+9T0l zS6{;Ebv$mzH>J})v1Y-=h6k5qo&G=Xzx9bQ`}1#X-sD6@zGiIDcT?Eh(8&Bf!K?fC ztOUQ{$>!?p4}NJ*5RaJDzW2g-;&QYPm1LdVW*bjG1lC`qR7ue((SH^lR~q z?F*h6@GI2|NoF->?)a4WpeSJ`W5L-v>(`M{aj)Y2*Ofb-u;spB^>OXI>ozX+k;~7o z?y3?!P=7h&!%>ca&y2iM+nPEx(shK&pTGBO4L`J7 zQTJ+tY(bB6i*~I$U;4ewJ<@mgRgVu#(-ugcbzc-V>Fn*TWxX2GT|9Lk4VPUDIovg) z>4GHl?)WyJukIer^{v(CZ_L_w)**kh!>xc1OE(3UobdCR8yb2xFC=pJX+wq2(iuP1 zcYGHJYM3t>vHQb>-Rauw{7?Eh)R}%<%#EM^Uf(r1u9ZVbIZx@8Rc&K-#GMUVaE3j|DRZ^6@W_R f;*9^C1`HM5bpnA(yTuq77#KWV{an^LB{Ts5{`wS^ literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_favorite.png b/docs/html/images/icon_design/ic_menu_favorite.png new file mode 100644 index 0000000000000000000000000000000000000000..527d74ac670a64e216f5c1993e3b62ca77dcea55 GIT binary patch literal 1608 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FVHZIlH-cgOf?heg8$@R2_>B6n{9#d@{n7d+h|C+gypZ99vH{ zzMo&dMZfvmW1Zwf?4Aom3*?d>+T3%0ci)(0kxJ>dkS+WVY&$%d_;=pzW!=+%NB-}A zPL~y~uP@yAoxJ|giQ>0+j(u|F)V5gi<0Jp^kNcdTRBxPn%y|#ngo&#@HB6Hz{iG_C|IyKhHDyGXFFFuxbcJ zF<#NUZ1j6qe@S&D`?9rM1vcewx062ow3&C_scJ9t^#8j)yla*3oa=SFXWox%L3J!i zD!~h8^55H0r<^Rp8>pReocHtuM(;~o&iXMNR@UfWq@>v+yhmp@XT?{`6y;?B8VNQQ z8zzWEOyd%ufEL~kXNnc z_^}4zIYnOYT8j?&wsM}6eSAmF=!?hsYK85##}~M5+BSP~N_5$|seDIOUEdviKGQqx z{o(PA2FL4am8(7gYyyn-2smmud~hjav)if??LHmyjzGiis4fok$GVHHJz9}2dGtw+vWH-4@V z-{0cebm@=BHvMW_jvotr_qs1C&8m7;S{o?eCR(+)V0CeesQAJDd38U(JdcQCVU*t@ zr8{wI!OtTbg}0md7Mo^lwwB^OoN#I87u_HumU~s4QGV7_liux)dET_~!8N0}%z)=B zURxP|KOCbT+G@5%zQ8NvLY;Y&`SmlprS%Dn;YMOTd5;!dj8$aVH~)*S>Z>3!ZasU(oz$ZLv9rMe4Sy@LbmW zPtCXXG92^SVJ)yCHb=IVuQ4!)OS#nJ-2W}#cABm;niMoA{Qbe=*Doe6cKrMQ+xP9& z8UMdFSSCF17fU(w`t!?>s*(p=8=pTp{AtA3(y8M!pBq=M z`njxJaL?UVQKuA^KYzPx?Ed#fn*81%bMPq7i4$M{lnJyjFhzy-Y3#b9W*Ea=u0GeV zp5cJJzyq<9x>s+@r)Irp?_6`JypFX}xT7YhBBFv{q>zh4;>vgFPu#uRxsOlW=(A<7 zQ(Vldz~*~>aZNe*WfY26r!3YEuoY=>Xt~wf9g?|i-uzyt%DB(z*VG!-8f*O?*fX** ZY)ZE7(yQ!T%)r3F;OXk;vd$@?2><}h`fC6H literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_forward.png b/docs/html/images/icon_design/ic_menu_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..0936fac4e49aa7fc5879b869ec189c38ac509245 GIT binary patch literal 1228 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FtKZaOx4Gq| z`AFafqrbM$o$3fJ2k)(N%d*%zCNyw$Zfj_%dK#pvpynv(;Tqg;yMFeO`P>|fWoK?N z$keg)$qwKyQ@pb0`_tk_E~Sqwbh8h7&bNDR`SVZR``>%-e}B`ab6P3-rzjT#3j-4a zV*|s1G*$s7?q=5;AGK~+o8@sbNLcWzZFsCSgK^s-hlts-4(vC+U7UDP-Rs$HY|Zr7R#fA0TWdGh1Q%MWfdZsYAqzH(~|gTW57 zdCxmnt-A85_0P>KD?_CISRb@I{CRB?M?J?<2Z2v|GmlgyM{qW;ln*ZcmHgM+LXb$Uu;{F)R%hc zF~^q7_Qw;}y}thVqs7v|O4A3{%Q7duk&g`05Sex*?(3l=KRYd#1!$kum?F)vXO=}t zjt2Y8PyTg%7ng;vWq6=9<0G&fF;Woa80` zHTu8=2D?+j+g)b3GE6+Z@XVv{X_qg*EG!T|5NEt1tXXEKn88xsv~_d#ip5E+kalnl z?6{ydA;)aC&s>jEzJ8wgD|}h?h64Gox5}4l&v#cVT#|I;@W-gM^IMN)FbnT?*%j`P z%d>3#vifgYn@br3zG_VBDwOMsJ;S#pYt7F-jjoV1R=*dgW6qvQTbIfvbuy>;R`i#G zHxIw(l`PUe*j;w^` zzgVv^>@f*G5_(i!?C2`)n~XpHzFCs-)^fT2KK;JmE&tl{9)AN(D^dM%6I^{z!u%4)0kRWEcco+z|nL(Gb-N2^NgqfYHn@fH_u z?wo!0p7HhE<>Ga*H@K7ezi0|BnZ%I4Uir+0JP9|Byr^}vPp2J?7q&6s_Wu3-?SICq z`M)1T6^Z0{zui(Re(l%+ml_=gx822W?%a64#XvAdx}ie*LS*Gc_j~^@%fI%|yr01z z@ge`tlS}-qI@?|-&Nsg&al-739n%8shJ%OYgV;9xe{5(6N?Z2!#p0_&f z3v+_#`#l#jy!EDVg>`D}&t$$O$srg0EW9@=Z9l`cuc{nOPxq*JeLneqrH`1*-+k}d zW289`Y;uiwH6`Oi*P0kl8DF2x4|w&Be%3QNaIJNy|L^o}(r(4ilRNW;U;oQ6tl06} r&_3?|r~eN)pqbpC;XpMb8^e!76@2e+%fDt|U|{fc^>bP0l+XkKP@qWc literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_gallery.png b/docs/html/images/icon_design/ic_menu_gallery.png new file mode 100644 index 0000000000000000000000000000000000000000..f61bbd8bae606d2f108f3e093fa1fbf4b61204c0 GIT binary patch literal 2379 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 L>gTe~DWM4fVuptB literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_goto.png b/docs/html/images/icon_design/ic_menu_goto.png new file mode 100644 index 0000000000000000000000000000000000000000..40183ebc2f7a3018fb837329bd39d776f523fece GIT binary patch literal 1636 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F978H@y@~YnPzjf)3%$E7TXL)D_p*&TkCZwW8+1j~_dhEnn_lUsoqLdG6fU(8x$j z#{KdNGiJ?_YFC&wd-mRE%sxLACZC+L;q~+7%a=>eojW&QF+U?XIM_2SO|7%1M?_6cjfdfpvL?qF-EEI}8Lm%x|Kf#& z!_(lPAdid;4MCR1B}sNi#a3Ec4#eK~eJC8SSPQItz&f3?#rE#a2C@(j+@YHY(k(S5*YX2WS${HCF zp%5J%&HmsKAab?Wr#UK6Xi#@XApZ?ESNtDQG-;>X$_=#o~Z!9&Ll1rFAuyJhlSYGbHVpCRLZqMBPkLmOB+qZAKnoR#tK9zmP zjT<-00}G$*^jazu{&!nP6T{?5lRBcG#|mKGK!F#*N} zp{if6+>Kz66;R@`O1gRKR2O5M&YU@OEapy`;8$2!$g-9_mA&zdZqUasUqn=+^ceaq zPB^?#?l^Mf$oa%j{(`S_wlZ=3;??RCJEA=A^40#G*$mem93orrKs?M!o=zB4dho3+DNr%%pn+IGjfq{YiDqF0!G_9Vtq4ZO4 zFK@4mNl_WALG-+)H&35Ge|=D>G=sHVS5Zx>@9}$KhLtN;Y`E|)d;Nk13&eFUHk3FO ziZZyVa;z`>&ehQ7@3wsMp+kq_&!&Cue*8Fjy9Ueu-mh#7eb4wrr<{`v(5ub*m=V7*v^?A1$`E`?9H!cwieO}k`??a{qV4!pV- zdj9aOmS?)E%6>|jH%VgqO#KHF&u+YUaOal}u?8v4s7q%ym`$GkM6TO-cG?_n?c=wc z?6vGBP5)$UY&`4k-B=$#84byzl9Dg?>>tik4q&l6sLT~}IcYz`_gM-i;ukKQ@t$|` zqTahHan_3y^lX^|f`XiW{r(;KDe%S>qf5H(_s)qed27lYD%8KKt*xy;Jw3gY;TLBU zGxz_Qvu548e&fau>9=doZmBPmcPK10JiS2az2x_gGEQ3RABEkWa-Jo*G%t%cH#h$- zdr8a2CT308L8}?+1+SldJ#fH5^v-r~#|T@t0%dvCvv#vLC&$On&%G}j5+5I*U^FxC zQ5&OH|5DD|CO7WiSAYHbHOsCY`L}M}+P8d~MfvT{xs0!x>^r5|SFc_@|3Mh<+sQ{a zwM2%k4eNG%@ZrM-7Qgxh{|n_Cvg_N2e~kJ-=0L5Ynu=#XOhcL>8ks zV~1Dr_G7bTZkI0zHTZJsXQT5v#bcExRFh`E%4nPrRB(Rw?0xnh;#dl1&6{_x`^(1b zGKNt{k01Yjc}~K|9a3Li-k5q=&3)IuV#SL27bX^NmtNV@R9uqO;kW*w++pA73HKIV zP|Xfry=v7yIT@KbO&On6EjCQcJGrMZlVpuJ_b*R9SkY zGiT`$+4{u~G^KO8ExYF&z0)kyAOA|8@y~t6Ke`7PRJ`QpCn`RaWnf@n@O1TaS?83{ F1OO;!{!9P> literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_help.png b/docs/html/images/icon_design/ic_menu_help.png new file mode 100644 index 0000000000000000000000000000000000000000..7c55dfd6936bd69671861792af2809b325c8d72a GIT binary patch literal 5304 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 XN_In>ZrmOQ1_lOCS3j3^P6Q;2+9=}KfYD4 z`Q{(ZbLu`b3>>%e`>I`b{}kD_(JQIxd-Kfm^X=!Cyt}jW@((%d>}xuLl9HMXK@3wk zI5-42IXNHQ+gshK?mthb{^KLpe?5}Mum1l1`&dxY(7-^!A*!Xdb!JMQgbm|^w+5cP z?ei>)pG|)C>XlbRZ*O?fX z-;H~~$Cz8*d*bZbyO;0Y{rmLE$;nfNJa0NUF-6_ue{XjE>Q!0C)XpcCGiR{q-@0{+ zMJn3As_K{9AHO&6-`_v^*h0<0Yr#*$CVLT4(YMEJYz?}tRos*oH1XH{{FM6S+1c6M zar^7$`kmi&?DA)Z%+|JYW{+@Z=fi>%IFu|!ZIll<_S;u{a9Ge1HBBdS6YHh!im$J( zZdZ7C+M}ejRP(vu(OZWO9b%f3u5z!(<jGnDML62WnHoRe6;QM0DX2Y9)Cr+GjQL9+{{44X$ zg*v)c*4C_52g^S{KcDYrC%e$5y1H6YvGD)D+DZF%*8Tmp#&ZDA_(VCwSwwDL zxpqzMPe)_+qvihd*M&$mu^%YA^5YJ-xSme+j}M7_ht^K|8x@aFkDn6XOa^*_ya{u}FzWw?6d1=<$>&@lmAL`t=g`z^^;^Zby zojSGt@v&Yf8|9hL9laFZHz`E7FZX=Yu&-KNKW+}^-S0*_4Q}e6p00nM>4IHLh34eG zCm|;Tx|A#9^7pj!J=i2&6v?z<*_JI^a%6r_oysTpK6XbzqS}*}MU`*0nD*@8Z&)fPTH2od z!!lNGF%$mn_7Z&zoA-%_K47!^KOuVx1H*>R%Y@f#^C_Aju;@}x=lhSl%RbDTH*em} z6-J#o3I8WB&1-)==P;A|*Yyz_A60iARy(WA6eSeqEBo!?InURQxuT294W+`?MwP~F zmI-)nIDN{LCkxN1f0CPYo$svS>^osxzBfy%b}zhWcVNL>pXk6V2YWg9oLRpQ!uXyjh zIluQ-&?;eG(}mw=#J%=O5q*)dm-pkWhSeMy{V&h2K2RAmpE+5KQS?Ya+!gua(tC5O z@29fxtV?;o*YJ>|r?X|lKg0e9uHm9bG}}*C@4b1Y+Ur1Lo5_i(%VTcrEuAFFCVOL9 z-kH+Wi+!(i_e}4$uU&r3sL9jr#mjj&f|<;G?)AFHsha8SyR#&N{nQfKsmne0J-;F> zapYIq`tZ6##y-F78vZ4^ioci3I%zZOy_@eR-+}%2^%0K1{A}>GoZw zU#CA?9PM!{_5F+R_{00Pnb^*17dGduetu=IT6y22y~*GHANWz9@|fiqXOHlY`GP;Z c8yFed6k@pd{rI+0_SsGU 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_mark.png b/docs/html/images/icon_design/ic_menu_mark.png new file mode 100644 index 0000000000000000000000000000000000000000..5e95da75a6940b3a777d2aa2b5749630192cdad7 GIT binary patch literal 2519 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FWD@6DWtd@|2w3!U9QNwfXd zO22T<^bKb(p1P9ZnyVqD@>*?@qT#HGX%YdR9ox<&3+gUS@(gp^v}sy~h>2C_w%?1h zqcVdhc+D>9a=DQqx@yr(-mvHcDa@HQNBs6Y|NCcdF<;vazY8I~*0sCl?|c9E=brPw zRkx)WowPeWdv5Kq?bcj(0u!dqp7OZbY+=qsiS5B3J$qP=vA6~GL~1)Qoj)GYpqOmY z613gPyq12(IIQ#ZQwtlZ>vEy>I2VSLaA@v8fO%tS1sx9(ZR8-6{VYkrOB z17V|iu^YcU`J=J4<T%8~m+dG_NO*bj@^_)&^Byy5 z-WNZV?5=qC(WLU-*FVk?aY7m4C97jJIL@Cvxi(JoOU%TdUuP`Kj<$*aI7hLuy8im^ zH!mhG_AcD#ap0Tp)Cr$jE$s3Z`RsdMQ`UKOtI=D}`$qTUU!K~3^}gs%naE^=3O1yKi3eSH=7Fw`=;6VMaQIS|*uWdE{@2{*`d(%;__HY0C`?vo;|M&O9lbXEBitB4m{3-9eGSOzy>0iHZPP#EI**`|b zpi*(C;AA~M_rsrG%dh^gZp$-|JFB_5x&2}5?##I2qP%%7U1c2wzXcLMGfzKVn)>1I z!QH#+@79XQX*xfA^he8AU1z^?|AV=oXMVx)a_9EV0VY?j+`4wlNA8o}=f02^qW%y5X!WPh zRDT!xSMD#ThJ?!cpSS<)ey~vVa;y1kX2!;srV?4|3ETL?ud|rXIy2qtLh;V;t@qaR z^6=T{?@nRo;tB2wcI^=Ik6*L-LTdnb!Jfu@-)k?M#{|Y*WLdFv$$q}pSph3fG`VVo zL*Iax1@V{H^yES2r$azVH6#H|Oh#?3p{}?EBa4|V{Ot6qx|0ygt^XA1*(;n#k zk=6*|=bt0-qS0MOrcmUo+YgV>w4j_7d8M+7p)(d(OP4%*+~~RBh=kWK`4z&(t^VrK zNvHmXJaJ%_VRmNzUG?qz8iCMY#Wc=`yB%iAwpes6`oJ{RG_x^ewOqtio`?UFGc)os zA1?a#?VDucic8U!CVvioD9W4{GEKtY;MUTXBRsng_H$aVdn*(yrZuNvj$Lup(<3jA z+}Cr}*JaYR<9K-GlK#|9NlRzU_Su#mmg%BC`T5C-tJa6Fy}p0V{O0Sze#?#Lo!)fH zM=?dXag%`Iy6>{@t3^NSGS;5xF;?t&IrYI$1;?D0St2p|j&mPeowCOMZ|xH<+ueK} zcR7woE@@f2dj0Lcw=Q1a*7ZYvzOVZXkba^%;}Z%OwvA*}OV~F2 z)K6G)ekpfo(_II~itDZ>3{A&nHm>>0P|3Q#ers9mTSp@yuGFs|Rz58Ir04k7XK%qi zt`DV(9~N+Js{6a^*Yw1LhnpU!Z0UN|)p~PBbhy!)g3kN()N>ky_jDc;*uA#p?wk#rjGh&8Rv#ly zF@Fq^xM=#7x#D}$*7a4~kN$A&d+c(#j^Un`a^8`Hj(}KMPHo#F)H&tD5`%m8 zEKihn^f}>N0shN@50V-1>X1ps{u2pho(;M}6{g%7=a`m58BR(t+-uF4z z%JlP(;E}wAj3;AQH7gET|JN>bZ~R}(`cL}+Ls!_J5Kpr^lNlHo7(8A5T-G@yGywoV CrNyTJ literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_more.png b/docs/html/images/icon_design/ic_menu_more.png new file mode 100644 index 0000000000000000000000000000000000000000..20915277cbf3766bd5d378fda9ba27b557c59ffb GIT binary patch literal 2459 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FbSb<^GlLQ{q?uZQaYa zSX0UnQRG#&9)k-OiqJz5M zUDubZ#~hW~=+gi5WlHv^rQfP={Xfy;v%xG)Y%-%#o#pJ)+pWq=?aZdgy;8_@?&=C# z&zaPGmz4`q1j1r51;7(fTPf3Z@*WxcEETC@ED})p}BBPt{|W z>-W~F8~)P&*8hK1rI7Ds%*Yvu-gy@US2+hW}Y_XhO=}mB!1hE@5Z-cGX&f3>wnsQe&Is? z+wb%C_g~}6W$RdO(4FGG{^Q^E@9v*-3R%rsY|6tQrWBWN#yi8$;!XV$=M#|!eU`ml zo_jtiqoq?@XF}lepV5ua`##*_dHa;B`?G|iy-}ESmu*u1Gln8(hG`*38cu9u;a~7* zM;ePte8`h(#fct&xc-LcES{q7q_eR#s^j^kS?e?SX9PH^>{U{?{gN^(LF-=quKk_H z^|@PlUM&CRzjczyA?-u^gqAK@@bBG=^2PH%$eAy^>+~-uad+!=oo>^kc8!{4?7kf{ z1fDBxuK#kqKk8{i#<;7E09ewUt7{|bHsrsDYhCS=% z>|D+5vQX+4gXGo{i`$wiaS7@=4UKgI`)>a`Q+My`9-Y;!MtAR&Ph7cC|4(}Po4y+g zi_bs3vD?A2al^X)IK$}++LkQ;HOt~bgwrP(#fq9)o8M07XwPry{UGQ$N2Mz6e23_> zVwN8HryOOTZ(J=-el*&2CFH@HRo%ZNFFt$Wp3^aBM)_yOYxj7Pr(XP)`&M6R-h8#F zS|+BwQ|y$^WjeHo8~$Nkztr~1oeDjbZ~OQ3o|)1t^i*O-8v9v}m!jT*9R=OFx6d}7 zFgTi4AQ$vk^;tU4S&g-tzrHzdHa2ND{LixfYeA6NZ5fxfM)w0Y#jLoabDSa9X65yl zi#IRn^fh!VyVt?8*-T*m%LZMJuY3`v%Yq3ZS+pPX;UWYK972r^OIr4 z*X>U08r_mR z*szzQc?IvbFLU2SANSGuo+wnn_v-fbf)Cbhj1@i>s}%q6G2GAYXur0uOn+{f<$A;K|I_~adDy#{OK#E=IP^)O+N#j~QO<*Hi&km4 zWbKpab?IlHxTqxUhS6SgyI-H(%M+i3ZDCt?PsFdt%;ckm>AE#sf8M&ytJZ$i6Z^zJ zL}Ox6sq1{vGRBMj#ytB&az!RR>02)6Bim$hsaTP9=8#MJX5Di{Iz&|6aOFrlCQkE9z3slJpCu+)ker_0qb+gM?47p2FtRIiF#soXD(# zy#ZRUZg~1X)ezP+5)JSxQ(n1uZjNu(x7K=&liZhAer|Ex(8|Q(^NL|fd|+Vw)va7}zNJ2x>RY1d znt6Z!#0T>Z$v>2wG4;{2yFxl?49l;-wi6RlliYA>gPfSEwuJS>Uy)fC*M&Zd&5`~0 z_u<}@?~^)DC#uVzKOwW|oL^R59fyFw0$-GMYT-t4tGp_>1< zud5J0IPc_=z`J`}D*pGzy_>c-&OPNO-}5_jW-}<)yjI(CNYG12e~It5`1jX$XIgwN zbXoKN=GR|M_5}=lCXv&wYGp-CX$*;F73T<9skPW(dSiykt?s60v;G|TSpQu(_^i_3 up!&0QPgY0%TF>UqqhnZ5YyV#`fuZ+Feeq?!3r!3R3=E#GelF{r5}E*{9=}rn literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_mylocation.png b/docs/html/images/icon_design/ic_menu_mylocation.png new file mode 100644 index 0000000000000000000000000000000000000000..14b0af882b44ba67dbc3ba92a2612b02d6096449 GIT binary patch literal 2507 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FE%nGd;3pk|o7JiQt+9kVvrq0P46)T~q?21d~ zYraYJSrPo`|57KugFJ?Fo3~9_a_7#an8dP~*=PMWdud<%l=DH#?6C8!Wu}=&Z?)gv zmX|H6{!u9T5#WB1m&3#UXPGp)Z|S}6aZ=D%i-%{)H_m4nq6xTNCpD)@qK$I59upVaOsclX1E zw(ADp;)B+Q*L^-UEkNUohJ-frV!ftb3j?+VvW*T4Dz69c_Tx0&`TXzqd;j@({-6Ay z;HPxuSc35WCSRE&5&Abz#Dr=V|Nr;be73Vt=!4vAGWL~!Sl`B--MXnj)pMKX504K9 zhW#6xYPbH5d$;Gp&bx-s0%}j!&NOkK8v5)^Sz4cq`;~LvbEVJkDSqbti@9p{q}4p4 z>ooRUxP1L_@A1dqFRL9>ecTwd_sg2|ucc@7>!zG>{3Wtv+M&?8=#Lt5Mg1Eq*4Rf# z+Blt&7Vi}`c;UP;V-3%`i7!`|zUxi6;Pc7zPwe$lwg+dVHlE7RTf1s zFaFMd(XsIJY{3Pm4zNsqqOw@?{`uLTZ%uy0bd-au=!N#;tuD-4{DgfM^~z4Yth-!( ziS5yQlNLOh!Ow81lK+;GiB%S_`@Xixif$?^ou8OSwk6uQRh_%q`fb)r>qnR8Pl;O5 zb?Tth+hfT|>m`=YG^t1{Nz{L%`7KVZ;^eGsqvL<~+9o|ed|kfbN`+UaM%0_{za&4^ z82JSM_^JA1_Y`kGk6UH8=5WrwtuVW0{PXFSmsf6^Hcrnp0^%zbt+?h zYZPT3^3q1uP}cU*L94*uea=n!#n0yE%vyElLu^OSwXVH)TqZBSU$}1H^GyGZ-$f6e z{!w!$!^y%fT148}MD7aIp-Z%FL*IL)st38)KCTV3%WLdhy;MMCrpX)vU z?)S((X(0H}T*!BkZ*@q{3JdK`mqLz~9lrEAZKB1&(6C8t58VFy%s%{djNSy z!`EbGU-j2m^eN)Olw~jfnp{;%UT!Iusj)-zM{pGP*1%a&v-Y`~WXe?U>Hes#bWY{c zL@$+=f3D5^?D6c*W>3v->{zjGS)Tc?&4Q7;SDS^}a)(!UUSj+dGx_R_4;EM4lTFx* zzboj!TD0{yH*Cp|v# z|KZQ3=Ux9?_okMVd`Wg;^Pe{5sq=y2Cnqe=On*Jwq3!0rMHxq5&)%N1Zu!n5Hm5G; zZ<(Kc-_ui$F<_duy5bUZLo)+;hGN}}O)ieXJu=TYV%|t?zMPV_{$xPw-pKDscUK2A zuDCJfnVzHKej7I53tU_54hl#vVit;zDqrw!<%Rps{mDAc+7~t4t@dX>U$@+GvG<$< zKa!?SxpyKVrS!7=EWX3;;!7O@czG7rFteVX8Cmp`C-6gv(k8n`N!Kh!u0<-Jr*F@{ z`>*HC^xH>uk1m=rCAhmv|LV~b0r5^xx3=X;O=$S2!K)x9k?mYpFX?8dxTvJds%SXw4`pq@vdEurpW*RPohA}cO;Ju^OgzG>rI29-!=F=KY$u3PiZ zdNH>u4nP7eJhw}>Fq6JZB zHt9_B(yuUdZsiNga1CmE*n3a=`sw)3_g}vkV6)ay`t-bLqiOU-<>rT}E2PbwmX_F< zGrGv_7x}uy9sn|HqXHkA#zSHs}dBMrW2ttbW1N z!)|>0UE@6Y!>`?gztn`RiT&XF)hU0ux=VNWYJn=RYa2{6+5gy9*51(9D;0kECus7z z_sp8hJaz@H@NFr%?-!;jxX{SV`}6k3qrZ=cZ2#Q5U-I?J8kYsu?k|7N{nYug@BfMN rTNg7%Z{fsT|Gk=;L6^TO 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_refresh.png b/docs/html/images/icon_design/ic_menu_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..77d70dd4f0534271b71ef4eb87f5a7a917d944fa GIT binary patch literal 2450 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_rotate.png b/docs/html/images/icon_design/ic_menu_rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..27368b2454f5d2746d43edd90deddd42ddef7e6f GIT binary patch literal 2477 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F0c978H@y@`s?i4K>vFU#Bf+GN?j37%yf!M)R( z4!0HD^{Uu&p~v=&vWNGLC2B$|qC>Bk-e&e~ycnRRuxOUU?FHIOM|sws`n5q*w&b&1 zLs^i!&D!i92c77s6WdZY%5#}n+})ckGy8t|AKB-(O6MHW)SCM0#fw|lkAMGHcmMnE ze{+f-Ylv_?s;aX*TKaF7$YA0`>!X$l{P+@mLRm;muEGXpt~q@4Cj(QlUoPG$`eiOzkXi+&PPS)Z`wJYodsUs zUmSY;k>hacl$pm*MIQ2*tu)osQ$Aszfz7d#C$^mso>;9cJj1B{qhhs3<<`c=^PhkI ziQ>>$ec$E4V)w-lD{SmE8ei)@{Qj%;-L<9mCBD-ae@dOWu=wcrncb3xrnag+r$y}6 z=kHj*`@P49&j%&d9Iwn~+h@7qu0c=v_xk+*??3)zRtpkmWSzHWU*d}c7y8WaR~E}R z>{cykW;Cw&#G>LdNmH)aBJ1el39}5nT@)-mS=OH{u=w+$*;>wL!q?yOul{>h>D_hx z>^4s}^XN_!@3reB0v_1@?f)Y0m40dOKC$@*HEkbW%qw~z)qMHLqrm7rvsF@NKhOQ_ zb<%gv{2L{_>KsFeEZ>y_}|>ROqM>=^u3O6Qf}6yJebJHId6^MgVNaP&XITc zW}Oo>tW^0Xc3$wQ%98L|tsM8{RD|*x{;QsSdE5LzhZ& zYFA;)>kD_bE(uIpr|epn_Uh0TJC^8+pVpLTMzZyN@p!(uqy4eM&prRc{@=eT&-yJX z`BCo?+f3WLGiRPIc{xq*qy|%&e$_17r;YLIjOx+%WvwNvdzh|0|E!xPv3uV~K`Xg; z93?VetMa&)`n|Kn|*<96Q z-#3k2CdOlyP`&S$$?GQecLxRX-1rsO|9v^be{H5?mNki;t0FguJ1sf+p83r(hw23y z_J0H`N^5`ruCh^RHZN1U#;4t4qdV{Dp(9~RuOHtjcpf`zMs9*Hvf3}OH#SZwOV0C{FnSM=QlkS z*Sht}ZJlgyP2Rlc7R}Mk#+%Asteeyt>J{1`I#KIWv?wF5WreV5I@gvhU124LM(2t{ zQ-Zasn(xcLnK^6bFRgv0(z?gw`ToE8AjtK?cK7$1^jC9N9>2)Vdimy;+#mZy6YN!u zg`RmmxVC7@CCgU|UXr(QyUml_DK5YH!<{KNG?sm|J605GcP&7B--K?>PZ+v;qtZ2f=n?|GvI zO}c&|n_sxB{h|AK)AmbYwk%#pUDzW0^q*#2%QB6%IxhTperrlsHWOc+7mEwa{=H|# zZg7V>Smw0MG5h;GTzjFmR+8olvEZ1k&sH&1?wRhR*8LzieEBzqk0yK1eA>8S%F@>> zk5q0d(QGL0)?U43=C_-7a?~evm$;sjHkV$$(|pqY>3e-Q&)BP6bKG;9%fhawvZAL? zm-8j9`zi8{W-LukSy6(tUO1y5p|MON&Mv`s6>tkCnDdP1m}#u9^3S&6mRqPejzbc^aJVxA#hU{eA8!YYYA* zJL#2XRVT01@A&%k!Sg1=%OZWFV1 z0><$s!%?nn{P->$FH%=7kO8p}=YEqh$%E7dA% zYjeuvI;l+-JULV4YKP8}0-K`nCqLi)-nBkL*g5a}f{Cw>{L$NGlo@x8d)vNSG7qGR z^3ETw-eoB`!+T;xUqdrz3k~L##eTRY1WkH>Sn159beSGrst}6 ztY&4>Nwt6*)7rPqTeZbxE2H`KnOXLpjrCXA?Bau!zP{=0n?GFSKQ`c_ty*;bi zdX~n^xm*&LUKD)z_CPSBZdUYU(Z>B+=h+>e_-zsWd!f1`#Wm%L(SI{TE*GW9oVKPuknE=AQ3dU*RfC6^_pg3 R2m=EHgQu&X%Q~loCIBZ#(YF8q literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_save.png b/docs/html/images/icon_design/ic_menu_save.png new file mode 100644 index 0000000000000000000000000000000000000000..36d50b38766f219dc7e259388641d0a8e47176af GIT binary patch literal 1645 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FJPj=?~BEa>Rxu}PibH#Rvq7z#$co%te3QH+@@wIJJ zh+?ujlFC}R`*POOv(=l8S6|Fh?cJiKxL{)YP1*Nn_T2wnx7$sC<%w(FF_8lz2Sgl{ z7?`WVURLz;Z(F$CCBMH~?Tb%N{-QUxh0>QYIV?QyV9$D2YMsQqxaDJieY?b8@cihK34$#% z7d;mdaNIG=nBn-HbFFjV-%&;;o znX-KTsU-JU>f|9EeHOW|G53I=IQTK|HSUzil_q?QEfvz7!OFMj*Me6qn`6H% z;cqCIeqe`+ip1TvJ5PmpcuiC$e0$e>q}n7!AWr7`outmwU=T%n|3f>R{zZ?k-;33|4>}krK6SJOVn8tbQKg^hq{PO-zc?0v7q6aLq9Jm`?UbR#MC4Uf5k^ zK54j4?pvnyB8PRo{V!DnZXel}nsb2Umdh@inbEcb^xi`Bp2gUsUbnofr z2U6V|4*y`N5js%!@71SQUq6-oG&ES_KI_ukWxve-nPL**2&9$|CcNmv@Gp z+fn`eoe@LC^pmpZn=~)4vTyTZXbupp^H}r1ZNs;Nw`$AJ#ctvXQ|r3He5uiK@##Be zJI+_%;ad@8_AAB7?GDdQ!JDkfYkU38^A11l7v947Zxw6s$G~jvRbTJtU6kHvp5f@l zpj+rMeRNPaYSuEyB_KKHY^)kMBzJBeR*!#EcRq4bU zsn2^AT2>_*xh{BfQd(v4|7VpNe%p@gbXI-aU;6wS$h8bVA`S9Q+xK%`w2JGx(klPV zdA0WH?{g<@W|7lWE`Q;*+GgBd93m=6f)cftf*Wo^WteihDN$0|SGn LtDnm{r-UW|244u0 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_search.png b/docs/html/images/icon_design/ic_menu_search.png new file mode 100644 index 0000000000000000000000000000000000000000..94446db976cfb4a0e317e94981ff9877be4dd0d2 GIT binary patch literal 5059 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 YJ?-|jNu}&^3=9kmp00i_>zopr0P1X(x&QzG literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_send.png b/docs/html/images/icon_design/ic_menu_send.png new file mode 100644 index 0000000000000000000000000000000000000000..74c096dc949dff33ceda0020ce48572b9d3dc892 GIT binary patch literal 1966 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FQ_kT9g--qzf%yLRr-M6CE`1C`16((Aw3HMB-a%xEV(UX zB@uBUuW-u51*M(FRm=CP{oXhI`#SyWOFSnhP5gT6_}#tV-|apBz1IG|{QIL5ebg>a zu9><({m(41gs283{Y06AUK!T=te0`fe>33JP~M{QNsxhAuT|+{keREK!H50@FShX9 zZatxLAXwtZyV%|Fysb{}UoCq#&#TL$>C18}ciS5m?>%h3Ua^m93iFTJMH*qdR>gR% z5m?T$Cs9J9#@a^TOyoCD+}}B3ML{ckLa%yxPMq*&%0!Kh6Aku)wsnqAv?L`B51$OQ zT+VCZ;hu5ufoLG(#?mDmT$wChiCZUGoow07Q2yg|RR0d^)#5?i&CeNhm#3KqXYgEB zaOsrX7$Tc}I;q_$>|Nq-(H(LI9JB8*X)kG3`nt%);iM7+OO961V}?_jvyHlrCNHsP zd?)g~VtTcIK$ObPquTs2JX;nhZsDCWuP>1)Z^{~pc_Ph8?_D_7@GhUk#8^LLIg3cc zRTtjt>J3HWOSxXo`Ca*4G;*4}i_*kX*?+HxbuQb%+OqOWvehTE%H4@KZU?-(%`)R< z>?_-wl{<>1<2Y>0E}n8>O<0|`oN?cxk1ysPyW0DjA;kDgCd2O;><^k0T=L)kxz%m3 z>ZSG5=%QV}OW1w>@o;>Zo<8w-`1S>Pu@8bCRC`UgV9gh2*nXG&uxmoQ%WgI;7lu=w zix}Vaz5bp5=^&;TXHIE=k2$CAFcAP zu>5Y)Zkpay-eBc%+2q;t$ubrD^cM2JPI>D3D|`dniS22-0_L&GiS)WoXZ^)=y6W6_ z9_AH{3nodgmtb3a;uOP|*QKGmtM2OWU|;{QZ0j-8>sysLVh}~zNU9&Z-n`c(jD1?YkpNdo?$3%<5&Op zQdRxh-Ph`uzCRVYOQBEa;@m6ITMW5Rw_a*A7H?;7{r~S^ohZ}Ys`p;+C$^dLR^L=# z(EGgR?!NF{`(8vb*QRg$Q8lNHI5hMC3}40OU)n*MiT zRY>qn`8Z*vAiHVmwx&Z13qF4oK3*uDx3d;T1eO&NzP8UOUu?s?<)v-I!0INr%2 zr<;0IJU6+i9~KKYv+ ziWi));JK5-tJ&3L;_SR@T|egnm1`beAI%P|ubQR(_-!+*$r{ynGYhBN%uX)WR9bR^ zGyA%YdDy|Y4&S`x6YuIvGqGmQ?r41Wep=WHfhE2V_C39Ic^>zzpj$C3?y4PIW5S&I zI{E$VXOk|jSgcSyV{vih*EB_@8yYFsoA&BPS1;T5=3I7>%|Y%>jL+PPS8kZVEp6wg zsZiW|_=jJ|D;3Q%vm*FjAD!#fv;EZ1tONTNO}JQhchkbBsW34**WpU zneTfzC&w(S()`wu+9Egg!P%WxHZDKB|7-8sd`CagpjA_@9cVq^*zx)6gr?6}~*JrbX7ik+e%_tUOrPRrefoZ}`r>`*FtatSyumHEKiHi5o@3%@ z-B;jd*UUGe@R3vFW-Uz#~L zzU&{DLHkzADE5MX99Ql>{W0$hd&Itj&lTNQpZu|wLBEA%b^Z0&$HyAqxL5q2K3o0$ z)U)4@x1BuaYZ&0X`cfFf55}zIel;l#+29}6g`K5Bc3BHLPyXtCQy9bfZk|q>=(1m4 oVylm-{{q)v|93O|=QLpW`D9=7RJoio1_lNOPgg&ebxsLQ0G`*WR{#J2 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_share.png b/docs/html/images/icon_design/ic_menu_share.png new file mode 100644 index 0000000000000000000000000000000000000000..44db9b16e24582ac61006501eca50f5dff167797 GIT binary patch literal 2194 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_shuffle.png b/docs/html/images/icon_design/ic_menu_shuffle.png new file mode 100644 index 0000000000000000000000000000000000000000..cb7009deaa2c13f10987565fad4c9e1ebe66c5aa GIT binary patch literal 2384 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F9;-#JY^uLFI5OftWJ#{B+Ax%0pGoPRGp_w>^syC=Ta#T=p; zav8Ut)ar@P4*P2#WR%*&xl>{_3 zH&0!#K*99$t!!o{rYS2{XgodED}8Kp`uS%M1C}JH_cJZH{4b%sKOk&=M@L83&f@3) z6g2#1ZMNJu?dqL9m7AwGbS_-7M5X5ay}j`^wZE=79Y0{Ab+5LjW)@FC<-@A0hBDF? z1q(jCxTw6?W7WA}DOGj$!!Nz=&DpPZ|f!|CVE|87aRJ#QvRjI{>N3)YhIk2Yh7q@ z{R~5d;6ax%2i?pY8xrq#p1Hp5O7+>V46=nr+&KpKrkpe8NbBzn4-H*4vEX_aR(asIo z6DLl5+04$bCn~xwTko?zcZ0fh)z?>FMHNK2pZi|DdbR8D!+_?5&X*FKjyw2-uZ#Kl zxsjP&?aWN$3N{u%Hrl3hpeouD-J2fhcsWWiQIhS&VGl`X`att zZa8B#*ZG>c&s?k0)dw~^t9Z#~xVpM_TDXf#OV3{aQv12TXz{JW_u2)rC4YW=^p~@# zn9#`3b42@NkJ@Ix`F4LfSY|xEwA4HDN!cr@nU!IjeK#jwT>AJ}@9*vdo3}|mEtxiJ z`M=O9E7Y?>)-QBD{PyEro6jWr=OmlzWGGNT}^e}Da-A0HpD*Nxhu!TlzcQ8qp4>(@hC+Lo3#S$D3fj`r1&{Vtw%;@r7;DVuLz zQmj9FX2%lGAkCW|8eZ0Y(T^WJ>U#O-a67;55z}>vQ@P6C-kRE3ZQB;gt??=)w6IR; zS$E#;ZMpd^Za2jnt;^r_>?(M8h$rP^deHXGfip|%rp;*<77`X##BggvjE{4C#!`2NCmo_+_H-P4w9hQWl2x>3t>dy)fgh@up3&Q^ zC+U_Y#dh$%z=5rDwpD9dOg4y$iMh?UDqZEV$~Q<$c5xZg7YmlRwZFfyE-Kn56u{Z= zMdOHNTAcI2j<>hY%rw6I?Ck9C{{Bl`y0c0SHnFafn#$+BIJqQ-CCnh@#Dx3Fo*GLV z|L?2)9dy8Nf1%afRi~y{&A+dBMz-<_EgCnk3H_n&v&dS;E-`Gac`uf7Rh z=HuyPy1!JoxNCWq2~W;P=EMU&#@#JFCw6G<*j4g!lb)K|v-L?1S381=i?-X>{P=LE z`un@TQlAc=c)C!e`Hr*p$_bAO?`&^+(%@!p#PCWdNVmD-)00lwI z=NM<>oPXk_y(yAXcH)m6@B7TN`ME(Oe`{Lcj0zrVRsPCSp^mUB{cYC)AygVqy;srwtIeP_)1QgI+P;d{#Y zdA9Gl+E!dm*sQ7j`T6khxw)qqmOQ%2o|AFNMY<#6QWnHn{I!3|GVf}wqhn*tg~_ucvsp5uM8vs<#x zu+=0@NLzyd|B_9cZsm$P?j_|IA4FYh(2vtARo*Gk@Q##P1^w`HFfyielUoGK_N z`2P56*WQ5D<(IAR<>YJ>3tMiJ?(O7s=y~3z!(Zd}+{smwU{^Vz7uHb0{%&*nnHe9| z&z@R)_4@1gm*r)w0%!ieFE6wH;)5#Q+qDMuhFkx7--I+ZG*0bjm0(z5IiZAqTE7$n P0|SGntDnm{r-UW|edn7X literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_upload.png b/docs/html/images/icon_design/ic_menu_upload.png new file mode 100644 index 0000000000000000000000000000000000000000..1c0dd3f671781ea3f52bf3620d5c0e1035f969cd GIT binary patch literal 1571 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/ic_menu_zoom.png b/docs/html/images/icon_design/ic_menu_zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..0b8c4e8f99ab406208fd8b65732371c0381e7d1d GIT binary patch literal 2290 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 z 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 R00RR9gQu&X%Q~loCIB>s$Grdm literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/launcher_light.png b/docs/html/images/icon_design/launcher_light.png new file mode 100644 index 0000000000000000000000000000000000000000..8a94e1dcb59d582513f104c1b099045d45850232 GIT binary patch literal 60386 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 z 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 I=akR{0FP#qQvd(} literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/launcher_palette_black.png b/docs/html/images/icon_design/launcher_palette_black.png new file mode 100644 index 0000000000000000000000000000000000000000..fba096f301f9b55744bcca8247b41d6d7ac98380 GIT binary patch literal 3291 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4kiW$23787oeT^NoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/launcher_palette_dark.png b/docs/html/images/icon_design/launcher_palette_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..37355427e872b088c73c89d18f928369c8fbd26d GIT binary patch literal 3320 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4kiW$23787oeT^NoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 II;Vst0BhAMs{jB1 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/launcher_palette_gradient_dark.png b/docs/html/images/icon_design/launcher_palette_gradient_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..37355427e872b088c73c89d18f928369c8fbd26d GIT binary patch literal 3320 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4kiW$23787oeT^NoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 II;Vst0BhAMs{jB1 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/launcher_palette_gradient_light.png b/docs/html/images/icon_design/launcher_palette_gradient_light.png new file mode 100644 index 0000000000000000000000000000000000000000..f1121ebf87b8e4be2b58332961c6aa093386a09f GIT binary patch literal 3317 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4kiW$23787oeT^NoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 AGynhq literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/launcher_palette_gradient_medium.png b/docs/html/images/icon_design/launcher_palette_gradient_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..1442b17b73938acd69f64c14625ba55efa7128cb GIT binary patch literal 3325 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4kiW$23787oeT^NoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D z)AOqf92giLmegJRr=!1Fs==DAA@|=R)pslzaoh_^zjvo?;&<4}u;Asb@XrOHuyI{D zVdu@8PoF%w;dR6*I`LF^?Z5Ox@dv{H=KQR)`SbnjgME)w8jWHb-C2G-ICSQV&r+H5 zlQ>(F?mX*v|FfO@{~y`QN=H1Cc1CE4JPs5p>~opb^Vw*rQm4}-&7-Q9{-->;uk)MP z?!GC*hAcbA>WR85Vw0J_d8-RVlpJ{Uoq^%g?)-ySG&qj}HTE=evN)dL5KdIQ z)xnt56`|b6AwIM9hvGpG7NKqxg_9j3flA&JO+5^QxN*)_l1-a!&&`e3ua#^+9GA!W47@5h1D7SxBBgz zj~g6#A;E5ZB*#GS*kPxQ7CM}hlTU9{TEnyYnAC=_HO#v^zb2pGSk5BU=z4(DjHTR3 zAyLlJBf=-b?}o<;1sN3+!CRc>oXjnOht!oOukhZYwoCBm5s4%t!}bUd9p!66{lfYJ z)g8`9%vFRsosHCYPGIufxFqC~&?UD^c|poAbym(c@sLuUeDYRG_9k}ADLM+;Ct9D( zeRBAT@e}DMil3sn<|a85F8LAsNF(S}mY3vHfu|-<*-~d1IfgEt6?AvS!Vp2z{wSxl z3%3QW4{To{Y*ISQ@@%u1r}xsei>6+d$`H@^p1J--$u7aWQ|0`oUkJZ+`lb7e=`WbS zl=JYmi8deaNY{{@Ex|64E?F+IeumF7$;;i6$3qOv4PVcAK9hfDerSZ&Hmw@biKn=x zdQDZEDy^j-vU1h3RrgkLhkgz{9n!xtF1U7`Tc~mHe>d_u9`{m@QFl-8KgT-vdGO8PyUV$j zi}~7GeO;%wDtoE)!rd*_s-Zv4yNvdDMa_T;rjSw=362#t!}?6!99TGea2*X~{}xO}JIWWUw(uB9K| z@NwJ8Z7a7+Zg_fw?e@BDx!Y zH{DKew)C;PC-y$^D*0L%`>^WL*SWJd&pz~a#qIU)%-&_bYrix9jLCe>d6CA&7Y?6r zeh~QdqCNNgsRr5i*VOqt`!}Xte?weiF{Ks~WZOrc( z-HVJrV}4-!iS4KT59iN|Z@uqaulzsdf7Sns49go-8Pl0N8yy>?nSTGMs!`nEXK!^o z_1mVKZykFU>~s`$>~C7z^z`6b#f%egCahKb{(Q!{iRUu;S_A4{T)V)Y_$;yea2=0& zYkO;Wn|)tFM}*Wx!|A5w7w~uqa%k{cmrdoEZ^s;PjneQ^$Wq(XB zE%MCOh`AA-Io>jsdRptu@^bdw|MT{9`=hy!xF1)G&(J>+TTr?1+@UY6%f(je3F%l( zbMWc#vzYS1Q9x^jSdZ!_;d0eJuF6BQhtiewFPdHKxZxb5CFl3aL(8{n(wm8UOe9?^Mp05k-A*loR+-^iPE^P#l9&$H9T$q+0Ijz(^k*ZKKu5}=2N#P zn9q4X|NmQ|LqZQHZCl#r9j+@I@oev!EXz$cg_XCt9*eSSw}r8-vDwkJO)K}R|LV8l z)7RDQRjcyNZj3v4s_EcX#_ZSJpLO=5U*2G_JbEWM>JG<72+!miM zT7N_1PQ_E{_WV=(XWp5zW##H4J5$c5T}pfT?4IttXufHyrazm`m&bea))wCTVO!pQ z{pNaGfBIRC+q;{$IqzJ&-)6_2)a577owc?PSrYOkt)mB z$?2cY_spF-x3*62=bePxi?&riPd;})i$DMUE`gGVmt6mMKeygveJhIR>@!u2w#o?{vP3ODqSM8(!-MR7pPJPya z@&%tS-f{oV*4ljj-^8!|{LZZXGy6}s@wUC5XJKb)`N+QL@5?{SozJJ7SDPpPZ_&Tg z>%_(M>wa8)ef`|U85b8$|1^E_{@j|Se_tJVExG>ou|vn?_MNOSHjMic_WSL@@;l|S z?-$?a_kU8OP_OYn*4_6YK2V5m}MU}$J& zVEFl;fuZ3g14F3+1H-EX1_rAc3=HD=lj4uMF)%P`c)B=-RNQ(KwK4Bl1u53#ND{`&!2ZId}==7{%t`{_|3ev5&GhL zHupa=Z%nkQxLkRcFPcHd+49&|9wCm){)tiyD=eCH&^Q&DHCdt=*%rsQ0e;+YMXu?Dk}?abmCW_`Yq@cG2a(Qr_-- z^Udn*hSK9Jbh@X0t~_Bh?dYj;<(&4ldFzw!)z)Zt{9!+)EUfm$(J`jl-`a^o(&ZnM zm)KK|C4!9HJ6WeRotW(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 AGynhq literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/launcher_palette_medium.png b/docs/html/images/icon_design/launcher_palette_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..1442b17b73938acd69f64c14625ba55efa7128cb GIT binary patch literal 3325 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4kiW$23787oeT^NoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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�PV*|l=S%D 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/listview_icon.png b/docs/html/images/icon_design/listview_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5711d88b2b635170978eea238514a98ec7c0ba97 GIT binary patch literal 92153 zcmeAS@N?(olHy`uVBq!ia0y~yVEn?s!1#%SiGhJ((%aPs7#J8h3p^r=85p>QL70(Y z)*J~21_t&LPhVH|o2(+@QXHNS^B*%XC@^@sIEGZjz1jP6+U;GN)~?huetY$e@wxla zU;VyHd@cH#P<~~{@^3q<*QZ(s$DYmiV_2fHDzaB+Iq#AnrA7xA1*--Hj&uLt|9}2} z*4ebrf9ve#zfRaT|NOT<)1LT8q)eXgzi z^kwZQrkz49O68qzWO(*io#^J zo~mK|w|O6L#RbKhxyMShVwoV&m8sk4d60Ur$j#d>-EA+HGyjylY@{oAlkt|mP4;9- z8AXr1Cx69$fhdk;`abPI&BVkq$ui-aiYEj9$h@4|_HEXR#2xX<)}|%lTdx!?4Ca6L zyyeDch@0MNHS+8hZWEm&I!*Szc>Coy>^eFee;d@MZruC1tW~i`eF+&u@w@-5OQ9KmLvR?5|~;@4o$+(hzsJYG&*D z%SP*t6x?+#ugx}dOD=Q$HsAh_(jJ|THU3-w9T0lw`(EgU&bLIZsa`xf5E&H$YL-j$Ol64X5D}SpVtX*Ec_Uo<( zjJ~f`AaPR{!)alq&GOn!W8p06MOL>AUmwa1E$X=Ll{<5>+dIye$Af~`t*YF3CT61T zX4B&ifA@GV0K*5bJs0?{tI&O1cWHn6=(J!ALA zp{!@q{BmgE-SKC#KD6HLdH3IGo>OgCr#}0=^!@a6<#L<#C0ezwI^0cjdWk&2x(FUah%NMvF`) zFeW+F@jVlo+MW7n|AYINr)aHq?h-fb;nokg7P^}o(L8C@XTkPKr}lZgib`U9PVuaspU!GqJoyUFZ0qj&xMGXLv~SEd^YwL( zEGm;-DVTYj^;Ns>4#^K$hxeB^$lY0=6>)9H+_NQ}#_?ywkCZk2J~#8nt~XZ$H{G~X zmpHGh?(go7i3`5Pa(dDABMI|<2w5j5bDe!r z!Q^_jD`iD>!0!#mI$T@d9L?Jq|E6s7U5kC%_50!%xSq_~cKh76(|@xJgD+2HySeP4 z@l6Azz-M{e?!Vc-dgc+^XMdUYn>WQC_^?>y>w~(`%SLLg`9Ie-E!aEv!(t2l=jAM2 zj>#)$|E-gN_$TsdhN{3~h3*0~UF8+>B9(w?{VwsHF=;;mdOTwhM=Dd|b!U`(ENdDF`Gg8mCUtG$}% zDqgfYprN#b^H-UT?R1tXX6X#R8PZn`=U-!dX%@%psh7$+ZP9 z517tgxnDmw^G!G7#ISz5p7yzX(`_zYb1n0OZcn(O=Qg|hR@W1Q#P)0rJ-vOpcl0*i zs(s}J_cLcaE`Fr_@tXRZEaeD$2x)UR;uL;H~o%DWLfjchNQb%v^31E3MzE$*gN6YfqQ$Og(&Tq z+TFDB(My}x37s7m?&Rt7x}AL%BkmnDeW%uhONC4GcFqufy5oCpXY$c?MRjQvIfv4t zj1HAHT+uaI9oES+xtOOb#&Eil=zRB@6&D!wB$jCy?>OKjbMWVsw8`@i+Ao$(^=iC5 z_m{Qi!XNBx&l_DH?YJR)rf6S9({=CbS-t%p8&4HY+B@&2%7y0Np~(}Ds%?62Ute{5 zon+OCU8fFk#2=kjsQaf*)A?R*`R?s^f0cgzwo2QNY3cfpZ(I17%DQg37Z^&Xq_A<# zE6|T=KP)Bn=$Ln`Ndt4bRAK&y9m`)Y`=T*pO5jv4PDVckRfaRueXMn-m0kP!&v#;W zi*5VCG%eK~|0i~^gfFWQ_|r4FQjgmyr+BV${9K{-lgfSHPWM(Vd|7g%=!yZa`6*M6 z9TzqPPpsV@c!lx6At5gQgD;JLT&$S9>BCbU=8JP)T#{^m=^?-MgH^tJ#;R0}+0GpA z(&cQ2eWnW6hEN`g-e|mX1>)W2$z8QZyvN_hri5Xpd+*D_$+9-Et`I4du>djX+IL-f? zw)gIy+?w9p^@=AKJoR^ZzLZU|i$`ih{XBeuTYhhmI_o(O^bLu0f zw`x3>oCNY1WRKsQIQwPAOTk$+JD+aur1AC$n#OWJ&2b zeUeFesC#zSdy#26O=t6VmtA;b*IsJOQeLv*6NlIutCd9_1@?z&VcG_`IV@Sbzbx~w?%ZE%MA;bm`if0fTE z(9#okmpEFu?DyMqeQifSwwYbw5#4EGP*(7`WX&g)gEyu=X!fkB(z?6$>(UdKCZEwY z^*Z->b<1967v?`t1Q|EDOlGWXc_6{r9%FY#-~wmcWf`}dvmRMB`W$oIclmQn&(NjtU5A5YwLaikL(hU1$;((78eE|YBXYN z?@2s<;PEx)&%$Q%TL08mG@s%-E9&O0RTiS8y+`!_O|Al#=Z}isiA@)LK*L{^$xOr)Z z&E2m3*`|waTC6OCD>L(%bDcDJ9>`Ce{8TwOI;S?flRxL0x4fI%fnDBL6z)&ocKx!c z*!tuj6BVio_Akmkp4)qzv*V}Arqe~jk4~*uyY>9_-J zabLz{#~qDxE9H43WtG~loUq(5V?p8lSuJb6JHZH={~xmdYW~LD2v;o?x$8$jIT=d9^mx9W5E!2{hIp3 z+dI78Cu%JElIhbQIhyBy89nxA^{+tr0!i5ua;1PPqC=2DDrZFy8;pMaL(6LHOgo z=Bw{pDuvfhJ@3%C(&&4Z_g&kKvO9OxwK@vdf0O*^oxdSAH|+G;%Xv>zkAw$5{i2n? zJ^>VRM|rwFCg0?9DE#zjMT9YHnZ)|mm}z&ky0iIkRPu>MTY^gxd3WwKx^KmKJ#$kLcbw*g30%9kXo~Vl z_9sa{U8b=8|BBva?AtEbJmdX)YZp(uXREQ6s`J-d$1P2FvZ_B}W6t`={b>rgo@4yw~R6!zU;G{YzV!3?J7@!Trl~zRa=LYm~dQ{*=$VXR{aW(ByBg zIybAZJ@(%9S7q6~m&&=Po#zZQ-)(k!rre(5&NH(;+1A|LpxxUqc_rcO#yo+eqI@?b zdG@CkA1;h{yPgtup5dzF-5*MPE)(|`8N3oG2oGPRYh`52{Z4#?&;33AYPbBO-yEn{ zn0i%h->D4I$M^We-bL&%(M&$fSh}RvDQn}6O;Im>tTbluEDaVlo!z#oCU9x1y3EF? zwr9Jpdg$CaZLsK<<2S{V=8t%)Qmjn2r`}rNcWH`)_C&#gXB#=cJ3ac5eYf(_iCb>( z&uzOnb$@bJgT=mQ?|1B&x7x(um)xf#p}E|fb2z*%PhW6I@5jAQ9_`aU7~D=i%QRop z(!I>~|HjL;*S9a{?PvA#d@SQ``(KRn%Y(X5FTS=J>tZ>Z)AqDw7E8Xak>0uQ&w;rK z6?2y8%`&XZy7}a%1>@2AuV1zNnfP90#bxc?Qe1J>eC*6Mw9X zF%4__G3Cz$XKO(w-krLN_U460oY!V<3`=X6nK5lM|K!bTpZXt`*om5|AJDnlQgCQj z>1^g5+8#-41~Qhazr^eqPA3ZY2yP9TH9f-oYsxEPtZFl)xA ziF1;8m(E_^svvdqFr(oo*}H{Jfmv-&rZV|?_??V@X=Y^6e{b^aA`6Yp)?)7&(-^9M zodyjvi3wKSn;IDSQLXo!>BDnoEJqa$LisHsZI5qRlh*V%QADQtc&m{4qcj({tRv6g zBnU`G?p$!NYDR^^ysbw{3|3A$QS?N{VxQo$Y^@1DHq3gMp6~W9PU1?hPy7;&2;CJN zeJ`e8mb$#!<EIQ?lxYvr<8sjs690MsobJFdAi$uGbX2YmGEy_xN6n`^UOC(md(E5w{-G6PQ`=b zpLle8T4(?NJa=Bb+sfrw(dcW&9es*I&JBast1z42nOj%1T0+fTBvyE zb)}@u9jTlbWBj8|T34((-*n7(i_QMy3zcX7mtAhZB0$(h$ny2sAQ{JN*AGoSGJAIV zsbq(D+KJMe!#F=J=zS~{;G%SB;=7Qn${wx?KmO^@tfnq~e5Xp+FvBw<qSoTqQEJPghi=Y@+d1@wPt46?gbFgg;DKa8_#j15RlswYql;mpyKH z_uxBhhT7GvTC_ySNygyV1%}XTrAwKU?PLqKwJ~Z& zXgl9$Im1(Wa>oRhb2onUO!N&Ye9yi?Ix(zNh*9K25SQ9%v4tXOfm|#)iZ57aPMCIv z(Nasr(Y1b?VpTD>``taCuO1J-(!OU_yW=_Eu(t~yEc~2YJ5jp%z#`V1D}O{^{b@7Z zbZ9E)B{O-4wTkOqnYkYZGu%);pC!6?M`i$@SVjR~6n}2XWGDZ5RRO|VcU>s0nJ6uH zSY-1ItNo6TuiaZYb*W&`Zt#Qo(ww zw{?@Kn^3TxSy}b=-l&a=n>9&w%CB2E&gMlX>rEFa7#N;ro*<8j~!g8#hlB zif!|mza#VhhWy4OCv2B|FX>+^xca%uo{p)LWEwP@g{R*#)!5p;G&bbxUcDC@44)L?Okh47Xrzl~#9) zyQ?kR7R;E<7MwM~I`y)Z)AT!^V#N+e_b_u$3+fd8qbAsxb)ik%V*T7Q*YrYt-8)5Jm%|$8@vZ)Gi^4;JZw8M)#pe5;$JhKL?>;L z>*HHm%Y3Vx4)GP~EK4z#5;ZTBHS-CU6bh8`P371)ec7>7 z1*|6v4p1tUy?W3kzCsS^j+@SSh=l#=f827cy`tFw>LRfeM?pBJM{T))wbWY+iJHmOS^H- zPK$8r`H<_kwl!sf)`O=})k+Vwy3|)!WmwEK);GK$>ZCJoLD%IMj*_peF4tYID^fVe zvm@qabl)Lo$z99m?a#JhH2TAp{Yv!Iw_8EY$EUAo^lmGX7B-)=^y<>cd6|+IrTJPl zToZ-Lzy0{mvcqH%L$~+e$~oJm*M75EX{z?b%F{J(d5FfhEL%^R*zF;ai%uSTY*c9V zzzrYsFa~F^;z7v&E~W7BP9=qvF>Y_dhy?uii4-cHct)XEx7n*L!)Ej zyF000Uw(e&DPPJ^5#^)bcJqc|dc>-#B}bh$^od;2d)d<|)g`i_g|lM`b9d@)Q-+is z;aoH2Ht_Rg_Ou&3dLTEaJ>h}U{fn%Dh5LK#n@z*5G8!9d&WR^m_0L#2DYnNqWc%` z%HC=su*#%stK_1mGjBHODE555wDW@U(w&KG3+=O7HHFt#<~3FI_7^5!-eA!FbmO{s zvzSC-EA97ANoyk~t~zPMBY3S#<6vy$3Z9>b_UCgO-%x+ucD7}UN#fpLzPsP_tC-bl z_-#3N@NTA*q0pMMt}%+s3e0;S-+lgX#lcv&t@GB`->>_3{q?WUZnM8^dN{o#u1rKD z&*jIV*U$aA6!U-A|6jlT?d!091ySj{)!7qUn|8B#Pg=rOG;3ny8nM;WpY!kk^XKFA z`Sq#W<}Tz}T$%g%+=?l642#ddV=Zd#*O#yR_2Y6ozr5*!!!mQb`elz<=#`0|o<2R@ z?Sq7Ree-eosN_#?GukZ}n^!Mf^zp`dm#{rI)wiFYw?yll;W6JW#RdK~{J)wRETncW zS8RJCZ1cQAFT~{B-Fqeux8Ia!$J{kcJ=3_iyd&b!>v5krvR3P&rrrIT4VNeJMHL>o zcJbvr-kljjQx7r+@=F!vOl)D_mSV=6*kz_#b>*Au}bv--{z;YsCIO>z_|{Or07i`I$ZKymyTb z>!h7>lYTyXrhl%+#cTp^9D9QD6wZCESC4&FyjHbLTFgCz|HXD;IW9BSkf7(mF>^XFKdB^=2a?|01d zT_@5S_H@;sU&{+*Tnl`U?p^A(VahDl_|gsUd&=HloDpjm_HBXWVr$#B+>M2YS@=%* zb!$ya)^zdcT^XG8-tPHv-glkmXR5QqCQNU1J-e;!%$12(o*j%;|Et0En^AC&(zTZl z&aGL*d#-QMYR7)jh!tZ06I-12y}IGt=9swEj4g)i_rDwB-abYXn;V`gbOzpPG6v%eQM= zq*9x1-LFXYEGjFVxp>p(_RfNJbqprc+DaSNFFxjRHA-$zJnK=0JBy>=a!Aej(-*is zDvZrF&^?Z~;zQGcLzC(@Y-nt=^7H=OaZ-SLZQ;bkvtFr}(iWU!-KWi*#@rF$G_&>n zA+`?XlnLS<59Ue=^*RK*e{e6jxJ}xKfp3#$_ASNZcX^8!`Ryw3Gd+3EX6Nfjx4k`}ReW1$!=A2*4QJk!1?`seN#a>&z5evwyq#ZlRVVpIZk)qed3)9J=r2xc zya(n_`~CdxyOYIx4lNBewwm$Yq)wPMjN`iF#iLO zYb(0$E>p8!*z?uGc%4V0@uLYGODgowGAb=>oT;uWb~fgiM7`xQ<&9f1Vj_Lia+2H4 zi;TGJW0v(R{qA_bkn!2!H`$&oB7*ytIb`1pQ;I#*rWHHyvtr+a!+Sc<$>rX2i_5*} zSbunv>&fyRk0h7qaIkN^Q~K4_S?{RPDqj=X@5ej!Bs@~0Q}Qf#Z*_j%7tOu$$;``3 z80Re)=z8=Z>ww7VjWWz@dy?-smQ9)e^uXD=AWegFXC_F_IiY{ZOS$V=Dbwma%}bNl z=BKTnm-l_C>($9wmupT&_fGir#Y*??H!GQAJVlbSj@CkRb>z|?^}Db2J3CS5YKunY zgjb<^-g7=+=Y3ZpwrYE;R^;Pt5p5N761zlHdTxgNQM|sfF^g^UQg*5C-rG_}H-4DO z@z{SkVX1q3vQ{ zg2j<`?LNa*+-tjbtn$!j=vvb3HY>Q)GIn9lozkVPRx(*#v%}YQ@hTFSbzT6WFwd?6cXYhjzSIdWG(9mn70=PqSMw{wPe zm+2d1IW{i%TGsAZbw%fK+5_eJtM~j_7$*C0%_|)Xr8~@J>nGL6GuUSpJa6-V)}2~d z6yf8acmBlOaI0sJXHRRpvZ5(rtyWBK(7BvHjjKAvBaa-qWyH3(YWF5R3*M9jw*bjV z>ks|MT#jyA$YuV`C;Z8~W!i01^1QRI?UQ}JU@B9+<)NLT$6o6*A3tgFLHBqQL(`i? zxqz7Ii@mrsezUQPb$tA}f5WT`5wBPBb{L$<&Th!tch%_Zp}OM7r>%5?g5{T(h;=;g z^N_md-7od>wUp0dm+Pllq9ww=7O3w{amlgmF=g%DaAybG<{xWyTp|@S4qoa$5_M}< zNzUQwl_8F%9};Aj2tN@lzIA0)!{L&XmO1(|fyFG*B~gmeM?X3~T=Y+2PSjf2D^A(> zcbRv$&N%qWJ(a1b@`m^GQ=jgCm~$-1)7DKE`@aaeiOuA=z2o6qlcisG zdpw5OBa#472z&Ok3+OkPS zzZI|7+Z$|WyF#SuPK2ILd6ZOnTlrbk zjTP6W+n$QaWSmy$ZJHLk`cJ`*!0=;;?*NAGh2KrzE^c0viRz>f8rwU32u81xExS+5dPToHcd-; z7en76+w`p=rWG!twuPzzDk^V$4?R05;U@9_!o!JL$4mW>%=l?_rtetwio{dRhwi>H zTC09Wj8#6Yc*=1$O?erv!m~DYDPC-mw%Bv* z#&w_*xSVsE0@WdYlJpfY+IY=^+AT^U_P_w zvQN@%>66urqgV1JElXP?ka;AQtIzO{=DEh(&N~b)d#U^P8_b_)izDmJy*J$q`6GJcsA@~^+XDqkhRfnaqY6yeitOfa$;!J-nX)x;QAvR7bGbm* z4^ua8-alF-`U)Px_D^}aNxUDT01ms#0xcGeXfUy`TAQhotA5Jj%S*V=TDlq?y!msD zvfr^w8EgVGmTmP+;Y~a9YUPV#mX>y{nLnh@8Gd>&Kj&-8GnMVnjnrq(bdk>V5tCI8 z_le6X`*btA^JPG;_sXY7rTRA(&2abRcyQ!PPE1ejuY29sy)UFI^cyA_eJEl7+B_-y z$^PC?@3nRapV|9&f_u;(p=E*Gi4lb}F77CqCCShB`3$Gf(!2V*v(siBt#W(4rapYj z^?=wnVPt3o$dh^YP;n<{sX~j53Nl6Ku9S$2k;5 zl^n^++%VhBvvAVq!rT6yHU{c<{LG%@KRH!qc=7q)UKPCsQrSK#o#9s93yqP;)pyQ}jp=za3Kyy4-A$Jtlw$At2BFB!rG`*L!MjLReHDO$E@4Z-jly^-7|lq zS$B-?z6`w)qfpfQVD~ciiFe~-a+HtXm^iahe);9cX69cwXg3sGrJAj~tyv zhSHXKL35WBnQm6hKNLRo+J|W~n;Dju)U45R_woBwGj(P$!@_$ztk|!8dYXIsZjtGJ zxvftoo&I?_Z`;Ldrf2qK`G~c5hfmuZ{&@4unZA3>HGe+)-Tx-*c&TCR)F0cK7o@(* zpT8}7t#4(l_Ka#_3GJ!Y-;BH$nG4$6{;&D=EB^KN`n>e`Z&jfU&#zro&**q}J!|K;wCw>=xa|KFe2pQejWF87;NfBc7Gi&2IDzHJdzb#?!a+yDD0|No=>@=l*y-S3&*3}kKe5R|JfzX+7r6%^aTHPYaPya#LAuDYtfeQD`?7x z+*?L3lzcdP=6tuV`@gSgx7e}0@2=Lp@yCvbR~$b{&lBnO z@1N0`t`-;1kiC}U$qd`8R*%dq586C?``&6E50|@+Y1AqC?`~@qeZ%T!X=}Rb=DxB% zs(dNg^r~*XKcjk)+EF_{r15Mp0Fzy*H&Mgb2@U@iN`Cu-tU>7_+j@D zdOJ<>#5dWT$Cr*3JhnfuUHadWHGZqP-;2#MR;GRVgrrYX+KcDJ^S(PM-;#Hy@#@?~yniOX>+?IDczDeNJu{_gprB#; z_vu&nw%lD@J7?{EHFcUa@8_~AF~{9156>2yuUY$F=Hb^rQ}Pc~+8R%PwfKbJ4vFp8 znSYm0-M9XMUT#I9^6J}`9{jSlLig56X-;NN`f<(s>ej#+`WHK{e0jEXy7`vsrZ2B| zFa7qay8FAl{?Uzo=mIr;R&LCpHC#&ia2i)k>kh|6%k0 zIn3rKl*8wgoHi_2p^@$*&S=59N%7)K3)VEBMGrGen-%YizFvA?TJd;fb9*Q~;2 z`DIh4%&)5Cu_!F!eKyJh1`o7oQ|#n^6q zIae3vx$5$XxZsK^z0QVp)*mWcF0Id4vd+|h$^4hK(`TipbN1F4<-PoADcSLxv++Xz z2any`nvX=dW#-&``{T+@J?Y~T`ySe@Dmu6L*uIjjrv!z%7exI1A#uChDs^{iAAiXo z_t`aFKV!}bKD%Ih>dMO*w@(=8{?hJ|U6?ClCMR{#?PHAgv7g&Fm)!DsIP;86s^;12 zG#ozp^gb@_uN+^c>E6Yofnio&F_g*K?t^ zOODZzFE~>zS1#HoCGbi`l4;4iQ)`RmUv)9u*~XaM(6gKG_-=;hGhQtgiE^L0++giH z%}EORp?QuKGw-xs3VtQtP=7{gO8upizFJQ?-fX!RFY-X;;>j}tLd@b`$Iq~QD*F-k zeZ{H!S5l5Yd98Wx<^!2UvS(zMKYnw}_(-<=R*M5Cbz7u5^WQz#&Gqiua=9pv8>ts$ zpK9EnoA>2yetg%$@I%|JQ*!PujAHG3d8F`@=9L3`_8EpOoEsi-K{8++msLv4`7J$b z9e+MyZUp>CG_{_=6hWu}L zY~5mbXO=_s%6ZS;?g(P!qVt{ zXWsqV>l+iPtoLoit7cxvwoE|!(CthYW=P%6AQ$t&V$X`p&G{zV;(s^!-u+RwEhX7r)5d$zl;ykE7;&`!7P@KM z)T1Um4=P`T#^1H6(G=QjsdIm?&qy|ZsiQ&jTfV>c@{nB7+2 zux62|_`cZ5I@{#sZq8k$(lPC|?*;y_7j2t`R=E5~T;a>66W|vud->!kxwU7Eb}Fqr zbuahZPW_nZP09-FPogy#r^|%@WL}y0o4M4_;dsuH0LzE!Ioic%;dxQ6_WyfD z-b}~cVh>L+-n2~Fd3jraztS>a#hX$g=S`L53?Hd}h?(&E?ewUG!@++09)+vrD$W;p z#J)gh?V*aPmDz5(3Xi2Fjp~(iL^|jGm+XFLGo|-Z+V!BKA95>~Hhgs6*B#TdG3Y*D z^5xvCJddQ>q&0XVnJXkXN*puO3+{&G+KAPqW|!^x#@HiV^fqnliHaW%`WEgL&9YWk zG*297XMXJ_CBSoIjjMvoHz{|iLsbC+M>ZZ``gqRirRo;@-P|7Cvej6*QP=d(av=-# z)rEB?v2U{j?k_yLluePN_G7F_IP*pZp^VwvF8^8(p7|-6(e?e=13hyW9SkY4vf|t* zc$?LK^^GnWiI-+c2?sg1XGU&5Ah>S->kVFOCJD)(P?_VfFUR@ORO8G%8Jp?v*U8De zw9A)`{}=n`f2qy;)F*P$dvC=_FGx=Oy+G+#25-@emW_Ezi}>~^_B{O3TKq}KAlLYb zYp+yc#@Z)Q`f)`c8#A4coXg4jCVqQe{Ju5YKN|R5*qpy=?emoeGj_R280~Uj_4U(? zX>Fg^@u}BTY<8EvBC)!S;mf`z4#N-CC2cdMjF(C*3xC%)>4U}nH&+AO;ys*L_nbEU zS}1beQ?TLN8PA84!zM{KcLpprnQ^(Pa*DHF!PTXwermM;((64Ubs*eMB3OUd@69n= zkD1L`e%5}{;TgLc{9P9E#5c>TKfSGxb?KUTjOwP`tqZ=k>YZMcSLXO6WO~(v08##( zUk}fa+`RpiV?@ETPx@@hT*`7QqOZtm2N*v7cW9}hNQm5;=_!*_uSsWro@%gdwr%Vi zA%`xW-&>Qu9aYKxy8oZ{s$DCdPF}&Y*Cq4uvg3`5Ei|URL*Tk+pRt-7V=N?iuZJ5 zff-ht!dni6eEfZ0`CXXf_GbIrYdj<$N;?bwTB#NL?CpuB3*SuX8LSt4@BjSpLz{^94`JFQ*HADH*z9L5IS2C%(LK>f82RnYD|`<|h9Ono?%B z)~(g6(QUocyLbcf$&yE;s%?ZmU$}HQ(KoTj>RRcF8wE!BERT&e#S6PV*blPqD7%#Q zUGMn4{gxN=9_sRixP==Cvb~Vd4O_p;P}o^gp~Kg{U>S33%d*Byw~0SXP9_)K_byo8 zyjM%HW%b?4@ZG&}>k@kxMw_Iq{+xH9Ok!`GcfR%2vVXHGFNm?QJh|a8*Iv`AG~=p$ zt5agKqFhv`W9ZIX=jWCAS1GSnS~f4EcHZ7K7OBCRYSB0DHf7|qY&nu4^SU@!L2jG0 z+@fTuj<#98(PDOd%%+aF-iSOmkN4Yh^^X;+@62i=k68*v4^sCqMINA$GYacqBG z;<{|pI(TIZWPh8pF$P@pFHBYyT_c>CZ zeSPxGqs(%*IA!iEvY3;*_^9CQyUTda)wnL+o1()#FQuLPMzqb_xII(+K34Yz>{)fL zh)FHnX~otZ2ThVsF1@$()B31yeoedO1$NEa^76p9+-0_px6QxVH(k>+Zg-31tx1M) zvuADE{`+gxX0=<~IcjHLnf;s>{j^Zs$Nz|zOrPnQIJ-R?bl)H65AE)&G8J64z3N)z z;YV+iwqCe5ar5%ORsY1wFYQYXeI3JZ(ITaL^z+w$UvoFd7_M8c-%%;T-PauEv`Te` zX#NYmw#b>1lJoAKi{QAw=gm|Nz53!A1-3PYC1)5S_uQR%w`c32_K!U={d+GJaV~Ol zT%L8%x!N|@>*kcrnwwiKe#l_*(#ml^Z3)4)RPW+kNqB=b;AQoBB&H zst3>EWRQwEdEu+vr1@d?w(H~S>VCO~%e~q0#JhgGpyPoVl7{--SBt)Wdb4o%dyCmc zPcNNe5M5VLyzQwaEBBd~+p~FY_%TNLDVH#+xjJ! zW6>q2`b44mcE9eZ9I>^9t}9N+=pcjm(h-WSKpTl z+%Z(SziiK}Ef6NyOqt9{;%-gma0o-uejdv?)P2J z!gSPawt4xP&D!ht*)}=8JLdyQgjI^}R+wQMV-_=!d`^|lkJHf6Vccv-sXgBZO zW_EjPoKe&1s{$gEAMM&;#A`5pC*M1TOZ)dO`!RFoDnmj3BL}Bt&C+9k;<01J^BdVq z%(y(V0zQ9PlCdz(tvJf+gEN!Oj_4-qtqte;b>}@0U3~qbXMuURs_L)h(jM1BpPQUA z$?bWmFUy`N{jC3^xvkpgh_&Vu{yN|BW9sji_K;FE#Klk6(&^u}MIuYxi6)X7f>b?7}^z*87$)|UmR9vrnMKhTz{P?LB&8wv? zf}ek|wO%N7onIjDoy^gzKBG5AZ%eK6_X<%*-b96pvi>KG?L6-fXX##;e$;*azP*!N z>b6!L`nO)~=JT?DiQk_d{-k~~Z0|`gX;$t2*MSueyTsm=&pw*AQafi`d+pV8CJvDGinShcY+Z8hgq>9hn1 zBW_EMh=`*h>>e|AZ28#XZE@+a|DDdSTi2}oDX+C|{*RS5?u;7}Hyz#1J>{clnnh4j zMf>Srx90FaDo{`9Kk8}XxRi14yl0P2m436izyC~`|E%~&-yGk_$UXF$VtS0(@J-h) z`F|feEarrKW4o8pDO|Aq=xgbNQqSy53_Aa46bn7$56nE^e%I~O`BJ%a=Z}AnO_EJ9 ztouG^gHYI+1Xt#hz4zYey>{ZSj?}CAx8$^e?*6McCRemoeX{$pKsMyTfu&A5ll;HD zo*0n0N%p3|+C#PvgqT`XN2p_r_$&Mh5G1Yjy8?sBqlU z{gcJ?qG5O4iX1M7gW-x7GNkrPTv%Uu;IY%Sd6F&)g`TWje##}aObwsjOzAkVu_@Z^ z&19YO8~Ne8)X(Z2pS3-xKcz3>*#D2K71|RXeiBRPKF$AU+nM)M&sBb9J-H;~jA&RU zxAxWmzpJJ_!rf8QMQ_F4mr5wboZRqbqFHVt-?|J=Q&Xp&u%2Z;XK#Mk!0SAhLqn^~ zfsemYal&n>WQPY!BIY&u-h5?X=3cPlgKn6Q?h!3LR=?UW*M4$0StY*YPf_su!&BV8 zgMUgw&*?=f+$*+(?NZ8x))oIBE+Q!pbj zG@?c^^e=BpoPMUnYFj&l1ih)f`zLL%Jo2UVh4uTilO={qvw1CE@87sYOw~HeTUyv|5*Nk7l*@V410OXE(qbe)Sj zw&O@>l+!Wa9j4nowtnMkH{EyarV8`qne~0MPlnB3v`crI;)@xL1};Y>JRPTR#vPZvf zlw~L`ytX!*RryQ(@x)oFK}SWsoY@~bSwD$AvT*O=n9qSm-QOR5e4p`Lv+uj$9of$H z{wE_<`GWY;x%4H4p7_;>h?u^L7B*VLAg6aaD}t`7*xW1_upu_KkfF@ zq|dJAEi)H95!;|Qqx9@Ur_E3Pbqc@oTfyv?^`SH5P|d#RiIO(6@65W?wb`M5+k(V- zDihC0|CHJM!F~0dX7?u&?XGc?mYx2x@>lu3e={rQtPRgeT=Ls1>gB@SP13smZ|Rg= zZ$D|j)m7Fas;DRYO!?~>{txE}n))>yGH}@PlEZ#xmp!M7$Eg+J(-=M_oj0@Uzwk56 z*+faa*0jt%g!o$J*TjTxniQR z+uF_$&I|mCQ7&6pZ01ET@@?v^4=rn-_v(CM<@2cb$~&yL#7uYLeAVRo%SPY9#Bw_!&$j10m@@g~ncoGW zPogG<8~(f=<^5zMpYm>|Lo;)|Bx;nk*v&F{YF|9>Rqd78(!m<_^isP+uG&Gydxy6z zyVkKTn^nr>%6yNPo>Gq_6?99dcO22c&aIlGY z_a5G>n&@fPbHZ6(=KX@)idF5Y%x{$guQsLp4}F%O{it-scfmWV#cAu;FP*WgSvKox zLFwVLo}ek$(+q)w%X3EtY=0nzJy~Lgr=M z+G)=cbo}LdZ>Jc_%T-;NmE7wYCUD|}IdeheG^j!7Tx&9=lm!1eL`gS=BLI=uLLK|KCc^8yr_M3+8t%n`p@P~MQnw2OSoOK=2s@{ zILg|5eZ@;phKq-9%yi*x@l-Hazjn>GzUv}aRVGFJ;*)fHACz(?c1MY_lgU)C(wI-# zD!+bAHknz;^tIhsVx5(uaP%ETF0Wi~p=I-SDe^=voupj+_(kKz9S1sW9N7$3^L!2b zGwD~!^%n6{p2ciSXHAUy=jgOKo&z~4CJ(N{dTXeF~zM|N2YTx7s zJHnrSv~K#AVv{Ye%edC3N5yCQU5VBU(_&PLy9`)#rbtg>S)uwiif``?yPd32DU9M@ zI@FZDAFy#g7p~Owbu+V3@cyM&uSK`0Ha_g z-csGX$0k6Z>G_J7)^If~(>5)m5Q~dmnF_k4PRL(rcYS5}IsowEK z{f@7$VsN31yKbJsiA{Vw&r2f*^~TmX zR~tS5V7`5c4=rB#Htc<_Guu1Ru>GR4?xD6n!8~kJ7YnLtcF1bqIlkPQ!X0HxC%3F$G*3eOl$857&O1A%eK6cq z?s9pT zzKY~liBs+M@#*EcuX3niR$q^9w#}V4^Zd*9yf>KIV6;W&)LF~0us#(ZCxx_x;=-Ek zK_XkbXNE|JSFU>{@J-;p?D7d)UKhDkY=03N!gGwld6Mb2rs7NGwRv}^glI`@u3Wov ztLkD_omM|-joR$5d(Yg?Z4AD-c-o^^ola&925sIwCe8Ur&dG7~KHh4{yu4DU$E;I$ zd+DRzDPIy9!k1l5{wa~S^3I$M6J$>7ADGq2LCLv8=wTD!Fe1|)3JyME*3<&L*iksIRXq!}MR zGPB~Lmf)@(hT_eMr#CA|h~3C&WsjSp+Md7t$i5)yq)S`7PJgy=JCxUzu_%A}Rr}Nf zH5=&wy44?J%o^X6wEG1|0B+~kB<<(ua2I0G{4}|;I z^m@$Fv3;OW_GXRJ7LLPnv@Pdo1fBR?(a|l~Qx!1f;kAoQftw4Hf7)1PT)om#Qo3gT z>oZ%t;(tE)%ktfEUAn7?K>c$8-iTnn{VN)4w%7z+jx1T)z~McG<*;C$LJmK(XK;`I zuKttk*M0tM)|OTb^>)cCI2!ck^o)YuNr_8mT->OAQRU$D&claHHz?<==A0CJM8Lkc z_K@beo`^581xsRkSACp%gSo|;t-YavMP`N9!bB~O-{)7d7_=)!iFzh!Z{$l2dAaRC zdbHN1yj7c?tujl#cg@Em-wI zQ6OGux)<}^j}sjaA22zPl6S;=|D{}%Ef%e z&$2A#r{|vRUHz$uJ*QOVfKj05kB!S;bQ$^cuk3%8bedUgws@Kv)3&u$x1K49Mc=($ zb8G#LknZE3zdl)&zn^Xq3Vzt&xAGNw#@VO6p` zeZk))F&a+Y%PlMJ*k69Mc4^a@!Wm}_=iIsywM^nutoEnmLs64XZoYp<>Qn5cD^KP= zc=Bx3jusI;?Ppa10o&`pp5zUcyYqFo`=&{a)sp*KG|v23Hu>B9i>ptE-Clk-sQPP! zcdKr^_09Ad?+hj9ul{ej`iR(rW4gRM-#@s`ZIID^rGLgL7Coh)EJyc4*Z&p1OuEV1 z|1%?RFLxVjtC9Zdd*A0z2tE^Y|Bjy`*GA6i(>6Y0lH&S3tBd!+5|;juhley{EMCWG z?b$g=bK&tj#essojQzfgvUaS9+_K+O37&TYc;fm&J0geNdCe z`=U7UXp`0Cf-TWHDvXg6Ze8*4pS}F5;9dh|!{WK_7mRZ~*xK|W_@4=wzEi1aUNz10 z_LawbF8f@vkIgz^zUBvg1xx3C{d(>5jjfNb1?eAIuv|^y_BN5E$gR11y*~Wl z59~30>zylcATX&`AwX3*``nG1oP*mYYMZe}H*aSNe|sX)H0_UXiuv+ebq>30GJY%8 zZh0tNzAJ*YtuaBFrQBTgnA|t`tEyb zbI9D7Vtbj~{w_m~3Alz3S54s^6#NlJ7`P>NUI)Xz1`_*`#9vKec7o zZeHs8Uuu=>*HhDqgwI8LK9wxXR=cpw<#o#GdwYCVUnx4=5cEsIN^NWG%vm+zJa4T?_TVhv5#@u)}`lt{8?h3rhGqUWppyGTFmIH;^ONLjJ#D- zXIu#rQ3=V>`Ml)IpD%y@ESYP$rZlLvQ`Tb7s_clf;^(98{aAI|@s@+bF4x<4UQb`? z)uuG*sV+EB}aoP0E5DZ_p^?}H4m(5bG0=dFB?ep#bZu@7h zA6MQJG;#gvmTr!<#mjm{@1)Q6pY8vO&16Hs@ijMkpXEqS@F}_Mzp+?8boTPY3%+mc zHL=%TT&sL>{_)3dosCbgyFQyb<=MrDhv(fh?fiZs(L|5A$&Pc9Ns_Z#!usDwpX*j% z-8->Z_2tV$SIZXazFT)-Nek)w>ynLI} zf?Uo`d){V!-}UG1>AdZJ=E}ESe{TxcU2^q8%==LBHEjp(I3|hMT&|nI^wcOsx@cyp z>~m&QG%5=zd#VdD5C?j80GInJ6x8Tz9a! z_ssDZOI55I4>#--*SI#frsaLVHs7j& z|8)QSu=)09?Ce%%o;bBd*{*LXN0ZCC#w{qVkbm1^VDV${W<@7 z^KOw3O9Fq_to-;RYrU+y=$*a0cbRRvD)vM|%=2OVeWu?(E+3y?_tP`px!}0g#;6>7 z#qP*gf0zHAe*Nd`*N-k&eb-9viQVvo)w?1wEp_9wroOF=J*#f0Rj*qOBPSsd%mGFQ&w*0GUj{rt(_xb#S0v)1FI4=N*%zmHj-5!}=ov;Ih}#eoN* z;(pU^t6SdqmH9jI|Hst-2Pc1KDUy2efmeR#o(mI7H=fvcN-OvRpHE6Q+bOFSrCfK} zXQ!^n*VuP<&+{oZJbha1ZT9)7D?1b}E-d=GRJyl#;(qnGxbpS?>we$=|L0Tu|M&U- zKXY5#6)k+iL#?SK_E0^WozIprC)5>pqCizak z?KExv>}SgHL6_~;&G(U4)}ORNW8c9qd`;F(UwZdRA6YIJaWIB4@W4?f!=*(`Oq$mX zBlo%5&*^8{yLR`BUS@0Go_Si^`1kJhpFVk3$n;!;m`9?uL0jG}%oDjIdTy$Xw{u5W z!FElT&xRZqlK!ZAs4X~YbgKACj^i1O9_*$w6mX%n7IpRjOuRFUSvzift16WXQg-k#m!=Qvl( zNAKgt-;b}I{dsWZ0<|wW9s2dg9-f(dq9!okkXg$3?ytO{R7(83oNsFt{&|>sL^l5V z9%aL;*6`Uq;g+`B>|+`~bT}rKd^__jF?-Ib13a$VG$I5!W9GO&cT-(*tOMa30CG+Zs7gim!_-n1=<$Lu0R)b$#ma=W0VEm~y+3v>1GtTdA9%SYn zJ)eD2Tio+HL!#4kRqeCOrk$P8F1F+2jMWvJ<(JoIix|5YGUXmHeD-3g$A!S&4&kQ@Gj8W;Ut_d9clgTB zqpLRfw(W?t%m2;L_3ubO$1PW%TW&(L`L4C?kMNq6e4*yfQ-|hM{VUrpKB%6v)AQ&j znGDyCqT?CSnX_`jVx0tkD&|`ism}`7>?|Q*{LZbi!&4*NxU zC{NDPVv#wF838B1tW12v!Rpz=7HndF?&~7v*x`G&5#X=9R~%H}dENtg`pHmAU$e`QEjj-L}u> zm;4TxY&CIaPT=J?UUj}J*|%?!W!t^#H!Ni$|);VvU6n?_+$;k=M$0L*24j+k8yJafN>}SO@<498CGuPSM^h!j)5|8^Cw zGg)x>p3x2Uh$)%>Co><^Ebmz!e0i?k{}s3LynUM|XBYK+uASMiS>tHuk+#_^lQY+Q zr!Hyik|?O%ZBmzZ^OAA4nR)rbJxpiAy_~h082_2gwmJXre(S7}Ge62{WghefZvefHsPLL#TpcP6h3 zGx+{aUpRrAXQ#rBxBN>jC)(;7P0rilx@gLdIl;1r-^hROYSXpYfA;;NuzQ+XmAbVn z)g^@vu4T+KSkc0*lq1L+5yWxQDQ&HlP)WRWsB2}|bgdibatx)!Ud-;B66_JuE6ujj zJMzJTY1$$T4|2V~ygMTwx%Qu#`9`f*Go%-n&s`NDJDYR$Ea${xiE_TJE2e8ZZpvKy zcX>qTYirpAoyccm|GHGo9&|Pr zmD90=UDk(|tbTCTI?-iU^VVkJ zH*2M>#}wB(9{ynS%;I}uk|%@nq@z#dHgGh*OA%TY%6eX;j?MC+@#88T4(8OFg$1h( z6y#htM9Lj`7{0Y+^C^`>ZGu9kCI5~rt>xU4cz&OEva-PGRU9X$D;=6_nXop+J!xHQ zj*o9%!;0*B(Z09qO}I}y((-5v`d}&9U+b4tc73wRwh7ZJA0L!>8z?H;d7-!B9mBG3 zRySU$eebzF`_@8^$+OmO*nab0WIf;aIWIQK-))|@Pr^V!>C=w-#X@u1mVLO!SQV$# zt&nSJ!hbj@dLz@xkmU2u;>@8@(`y`8Z`!7=5US8W>+cx$0i@bO2Nr#-| z6y>k{nD|WKPOtZUo@;)RRW9ekdEYJP6T7^E*WSdnNcYn0yFnL1-*(KpDWvAP;ZsDM z?$NSU=^ov?%r&Hv<2M>E(*7=*rc`#}%@wyq?SnVCcH{=lJSKWtH`m+Q;YrnunT%iN z7fRW!x>V6vd+x--bh*B#HeVYJO77qdcdI-XM1l4RA|oWKgSfXlv&W@ zxBs?m&(Ms;!tb;M(w5v2zIo_t?E0C!0!JP-vg{M&XLc)owdi)KZ9#p7NoS(bXPLI@ zC&wiOCVhQU>E!9P=~D*(Q{m{EN0z%6*}E+2U(da>rOPIJL3^-vum0)VRsB6bOCM-1 zTNvNGaPg!&@kc_=%s9G!-|@#Hg&J-hM`z4(O4{kP**WsE@2b$%3Vv!QzR2HS`9$mL z;?HxK?sBc#k>xf^@L%Q&2Fp(GnGe?)rM(m>yL(QFC+l*Z%qpopp9>m~?Op05YrT7~ zVdx8o*~-n=^0;iylb@1tloR7H!e-~=Gj-aiPO^XXZi{bft69)44q4Y zbww7eVoQ-PUMf|kyz=-})rh04(ys0Yj+8{4e!_Qj*0b|k&DSSP^)KK)8S^4qZqbMQ z#T~m=FFm+BbN1AYf-|Nzmn0&(|?Gmvv1Ip3JOq((BNl z8qQA5hW5N0^A4c1tlfRityXG_+rB_`@A zOJd9C-}k6WDX`aX+V5^t#@YTTvod{4&@)xV&i^-YJ8+IkZ%OU!$9ctb7MBbKu#y#Cy{b4lCeXW`43A2!o6wSGmLcD|h~_dM(9 z8|SF!-*y~||DYtv+{E(o*Y2beX^s5Itz`nTkGPJ>Ke;WWoF>A_8|4ruHj6PS`i_CGuLGG zZkN+HzeQGye%NO{@9h=kdO5xm7b@Ah6!|ABbx&VAZ&}=)U%V+7mq#wM5ML3v{_g3Y ziN%v{Ui*`y@V0$(?Rs`Q&z;D}uaY%eM>Sa+Hn+0wJ{rjt?io;6#%nVu!* z7BbH`%T#f*`}3YzH$vB#teT$JbXlUM>m2{a$LBW+-ruaRoV?h2`T~vgdAlk!zJ+BM z^?Hka>hoQF844PS5C9g==M9CP`0UUv{iPx#r~W zn%&&@)_?jO+Wh;cn5#+p>BtFJp45tY&bg1rJwnZtjO8v((pKOZDYs%XsfN*=)+M_PN?mMY1=zPs!)%ddGaE(&+8>e=|gH zmp8LY|2xUMR_ORurE8BjXE1j6_I4S5JgT~P{lT4aM>I0Mr_O$HLC(oJ^&mU@$|;h^ zG%op6d+^AJtUI**N5V?|E6r@rRzBB^+dNmVKa%-=kMkn2-TV#@n>Q|)^nY&c>WTZV zU2-owb5*=r?3168?f=zGw)zK|)a}1Wa|cUI&DgRc?d?+&9rv!fjdt8K*Jm6y(_U%x zQz_J7c~h&Ac3+KY$ixrX-=(h}6x&kDyb=_-CC%e(>O$_-&p*D*X8GQ+fOV~jRHoS9`Jt)8 z=X(#{4eN+h-BBG|EjdY~FuW^_G3)!Y6?;D2`h7OxNRUz1;Ttw<>?FI$i6GEgNS@TTchk^S)YsF7#^-@$~7Pxc%>beeVxU3tFP#a zms_%FZYWSb)%l^ZV~+m?ST_R?I&+xt%(I~5!_BWlg@iQ8VtoR$9|`B+hVTB5}| zqwlv`tAF1v`<!-crSN#9f>H_NWyG0n_U&AIWA zExSTX`~t5o_FqemJq>d*Y1pEBd#~$*M=Z0lDsR`#Tl@d-uK!yu1;wA*kZ;bLk@%#F zqyBDN6K|6X49uX4JY{if#%$K{ivi~e0KeV4ZRVx7OdeVxqn`PR=Ej~6#Sh?(pD zq}|_Vp6;#t|GqE(Uw1oeoqzX%o#nr_Tr7(+@;X}5>GnA@-eBF$qP@3k?$!L;b8TPL zrVBoE4RWTuQSqFq<{zQp>0Vg6d4A>FgYUSdE?C_0DA8d}4VOQC=X3v+i96SBRh;y? zs%(P5yQkmo>3Pajw(CvU$o%T``p;L}r%rpex*=1f>yKjO+5@kSH>cQbbK_tNx%1E? zQp;;0gL|;#2H&H}p_%+o{{Q=O{=D_uJo~9W8lABi*ns`4{j$^je=?T--5f&st-hwwcbF)hnNG znO>zo$^Fj?`Q-|erv4OgwCbb>TRz~tuLOnVo1 zK64hjWBPyZ<$rs#({2}wyKI}#k?Cu$yX=4H^wqNs^MAipU+B}~SbK@RaaTt0)(xRO zPH{`i6;yXHD_(wXb!PH}hT_gfwN@vev!;tKm``3@@Nip$*|pY7$%-37e}9;5(vcA5 z-6pl=;5H*SrB&-+>r1~^vz_P`cjC7FH2Ha9=U=Di?$COpy?s_aMR2$ah*zLt@sjuS=SBy^*% zb(ktyZT8T*_;l-!t5f$Le7JIl_X-}TwiE}SyG02`$8Pilv}EX?{p4ntpFjJ4>HFUB z-U_>eb^6`gj|iNf{bA$zr+$eK53iqJKY7oVV6F+l%H@h-bxK>0)IL5Dd*hNM%i4W+ zkL7DCTIG1GF}!xU;?Mp0|GvI_TmCfvW>xUPzmY=G+B>q#CWMFWy%n}K^?cplyL;At z6=IClyL8j~(alBfzAnp*VrRa2o%1_$`#*E7K$T-!HJzP56T?G_La(fNc;MOD#iHBx zI2UR3E`RlP9e<>%e$~NGEGy-nSN{7FD1Ox2c42O^!k@_ViA%2Zze=3Q*=KRLQEyFZ z#>Mh0Ew%@4ZhTZzC*XPHYJUFzd3)zpGnE|pu%+UbUgi8VmoKyDwx+PREc9tjysqZ1 zJ>{h6?lsjPH(l8fo7Q#tX;KHRqQrQy2@`cy6h=o@iRo6KbC^<7E3C&85}T z_iEl}mW`itYfDFARIc9Qv}n77;mRh54?GW_+Bciw>Xr*i$BR9v}3`E$tkmESWA;}_3JK9QkZmSH>5-GB3CR>NkUCTkH5!Ps&Z zrsLnfDo;*faM=*N^IX$pVdd?SzXA@(EQ*!sQwxvhborTQ>g~G8y`6nSyLyt>cf})L zM9z4~Xg%}W;?vjCeVFUrT8@YL*3}PhCX3D0*j4?Qp-$KCNqfT8bv-*b6fC^_BqZ8R zp`&C$pXP~+PCM7y2A};Q{aH@q$WX%NMRg9lv6VHCLY7vf>`y)DYdhzG*>RF99Cxzd*&cD{#B&XbG-ID{8 z45o>9>?>c_uN{!Fk~^xXS?;~4P|x?K{P&hQTMqsI5z?F0{L#?+dEeDP9kSi4GHcfC zVVHCHgXpJD!>+|$+_yfTcwcg{t@Dzc{+-YRpZLn_eA^R_=$2p1&3`3+cj_&*04B3j zEJ=Z$Q=XqV_xt`;A>V%Eoy&vwzP)3$*!^tu-vU*gX)R%YZ;30WtegMN`TdrUe7$#G zKke0Awp=eV-AY8-J2!aeMcEZoE!g_)Iww8|@tbqHO8oG?*TqwI2*^liT#fx1)0I9o zNKfyP`tt+ccG1%>9eb2&=wGjFxjB6iljEWTAJ5;AdCBNte;`D6uB`R;mDAewT{v_X z_W3Y$dfdI@G4<%A>9a~&zwclBgYV$opwk)3tHWeG4W=mN-ELvE7mVQhUFE%|Pi39i ztqVUG`Q(FF+d3_j6_Hz#@a@%vo9?%GKA9O6<-Xgu;)z$z+7DY3;?>u9ZRXk|G0D6| zvqbfh@W0;vR`XvP2AyK&{F|lBeD#@&ZcpKD2+PdncILRdO z?9C?m+}k~0s2;wzzK9Ri4M@w_Vi{ zsM>Tc^TghY5*(t_?4A%#R)KlXXd%trVvEGs$D#TeqFB z_}1L{^!V$IiH%jPy1zcfd0kv~b*0>)cNxLjPQ79RW^xCnu4@yVQaRgM;-Hj-#}205 zGYoew|MmLkvr6W}a*U$d+hn?vCd+fPq#v5+ZD?^v?$ueInD6|m(przSUJ6`&;dA=a z%%ofPZ*Q#h-TEQcHEZ??tzyqbN2aGVEWOlPw7$vcTue`klG>lsQ5)l0dY>QpU;pi1 z$<88~)7P%(RJw#*+q&u9_xfGi{$0GjYqgfKa*S1TRc&@|g988gCwfOGJT0)~=g7%< zBdOrg#BqQ2*GPq`j)Qv^Hml`+Xx8ME@wELcduYaobweVfcMIMK=_qvn*M7a?DC^{dOAO>vV_Ki9&3k=i@=pN{ z=_wXdngk6Ll|BVa)IVId&(gu~hib6BT(@#|%rF0rj-npnr7OzkB`%xC^6=fcgbhs_ zh00f4so#}$Ze@#%%eG}5Okv^)(c`f%w82 zo4sPU760{XC@u(jk-lqG#9cagkGEJ(S+pWEG*O@%EVS1U<8)#zmUz z3~M9ZnM>|CNpNjHJLN@oMDMh<{*t2FXzF^+F+qmUZ?x5$QxXe${R~0axzmp-ivy?PJ8-Y zxM_E4tBK?Rg8-TOldVUj_P^dEsLwVpeM{218<%&Qw7=}L-S)OJ@PTz>%#W^^+GpNH z+fG}i2N~4FtDk;m85poRy{c_d&>_P>-d$_r?tcH&Gw-VZ?>mwP`tyE2UBpts2R znq%4J3p$_Q&aj#65v7#*G;Q*0wwyE5xhJrD_z;hg>d^_q1m zCnYzwwT4e@TfAELF?+*Oh3%)Oa>q5_$#6IC(AT)@;=pAUx1sd2g8rr5O)t)?$Uffq zvFcxW=*#D`YxP*798y?V&T~!q%F@8Ce9ltAo-xtS?C7qxLd8!P%_9DUw7nelf_WLA&)j6Eyur~mlx^Lg%} z_h-)-^8Y=RwsTcWiLl73H#b>ZV@mu)%eT$gA|1!X6VdM6Q{#Qd-1-*a$Y1-`y4DRSB9lvB~NRS$}ML(=1zA|A9J?>W3$Jo&^970t!n z&rkbC95Sj(Z$6V>Y~Z-!D)c zP?iOc=B~-#z43tD#|um;M^nArm!*}MZ!oBMC@62Ix0HKgjnIr6(=I<>SXeGNdy`(# zhaVA4N|&bn_$Xd&e@B(aS7nt^)yAwzyC#H&re0LO8hfJ5#ZP&Qp84wKl5HBy^&w#% z2QKWI#WC}#l)9b`b2ZD+mq`!bFcxx5&n&s2*eocPS)?;BP5t3{nPaRv@(ki_BGo;G zkuSu&zX%0ogcr>gwD;iNqpcwLKC^HC-fzK8*33e|=M2(s9{Zdd(#)?n)zF%Kiv;sg z*LBgndMs{%XO7x_*L&-@W&_Jar;u3VaL$eMR_^h2_)_^PE?i@m>oSA+=^EMpj^45s zHt^9hb8@zgK5x7A%L}gAA!}n+9`KI1uz8Ew?fB`QhZrVhs?2_6r1|E2(dMno*jr;` z^UOE0MX%RcZCcg1xo*b7w!{EdDWQmRBi4DJBP?dkDh}_9ZqzV8|G(((tn9u|tfisf z>$-m(JnOcs>YovBS&H_|M>h|}ulzT+TWC({6Rl}86MpGuZ}#w2bMnnqd0FVFy2fA$ z?;8{OS9Xq5nf;h~5b|6e;&&c9hwD|1iVaPAU?Tie!oWeHwe&}60(vCS{|T>9UVRm*DeQOH^t2RbR@a5tz75S0 zGv1j0R88hpa-D1Bx#?Ul_^sjQ>-_6hHG+vONs+3hst$wqfu(YOg_awd~1*3J(x z2v=D7^U}LJ&ll7mu61&1NVPsF$9S%4Q|u|P!>ZaXh9Nc^BSh--&>YH=FJYUv*c|mac*MJa>Md8v$dS(HvftN%N`dleC7Yc5iS|Pl4hjz3t zli$Kc3rh1Ddd@s=sqtD9_`Ceyjyu7D4@)f1`!PILl~SLxc6M6Vt&0^!XE}BT3tKO} zHJdNP!)TtvP9CP*6)rsII#pAexL6dL42~DfTghMG`{VGEiRm8P@jqr<`0;M?_4PK> z^mjN|9FH_Ur!8c{r@36d<3CprTR@wal5+WN9c|8QO>AzGXF8R7`lXWGOF|mj?{+Oe z!@I_-_slGfjhmVlF3`^7kNPcI|KdojgA-F&%i_M0tRlYPoAZ2yyA&==3)r%|)pKc0 zM!dn=zlzWD^=4Wf+SGqZH%eFXv~q%n<)ecJv1z}YR&V@z#io&|E$(2L!}4Y8HgoG% ztnvS9qImLxbc?H}$4a~7_w3aF?>ur+wFES6s1oVn_yWp%Yx;&rbyJx0Oki5=7Lw)c1x?N7d(W&XztjbHkak_d5@G)tQ*j_$~JmGVD zKDz9Fec1HukN7Yd{|7VnJ7vub<38OW931I!+yC_)(ffyv9sR@gA-HMxvy8N3@8mX$ z6hDhJwuoi?wbpHK*!2}}XEJ~4JSu*Yv2r{6i95wxXZ7qpD-e40@!l%_n(b#-A6?7s zIX``7MYP8!^$%L-&%}Ce&fL3q@!y~?pE!5xZPK0}d8BZs;c4O5XKr4dB02e9v4Nmd zpsd!klwFE$I~XI6RnE`-Fgsco}BJ!)#X)jLE#!lzHdr-TJro# z_>McK&mJ1a9{bQHqHW*D6?1+=vZVR6zl#_$wgw-cdt}*O(K73@tiw8|q+Zlq2>ev{ zq|frDs^**WjWTAEzpd8%?U{5~PL*|~vo!Ytwv};rBF)SU^gh4UJ*Dt7<3h{RMZAfg z)2`)hPG8e^dZCs2``2ctuI|5jFq-w&`K|5;U~2(hO_=^DL*j~=v_eX?1ZQ(epQ**~ zq|4ex@2+zh{q@QCQo!JU=d_N+SuWnWZ31qL4|3a1D4raUNz}^e|58`1wP-RGVAXrj#VyUbFMc+mxE=(#vDsI_#VHEXtjuliSL%H|Nbf zU!~T$p?>Q(I89ut7G4~z*PzQXwJLU#kbpzH*tMwDtLyDmcbIEEU|8SI?jqWGO6x{Q z!RE)R65bz5J{c^SyXoBIUq3!9xSKR}i}sQ?{4?br_%GC$I5F$DeC~^f)4wl~nb$or z%GPq~vkkG^ZX8n)*?!ZgKR-I_xX5k&XKydO*Eq={!+)W3ZRd%7H*@broXx1YZMjiN z?vL1ld+!{Ls@{k0mVCb@vFYE_uj~dD?5x|gj6(0$-#dEi^y%&joyV^aiM-4QgD<*feY~4IQ-}0+ z$C;s}7U>GgF-O0@l@F@k zu#;g+leAdtzP?7#`irUVwt_2~j*`l(NAiVkPSa6&)Z$(hHDkj&oeq&BdMldO`qiJ| zdJ?(kz_QN|Ieki#CN|Bw_I}bf7u{%~IUiRfSEYwMXyvovyR^jr?bRb!Ii2=1^@2=S%oO2mW7JfL+a}&~@64^7ZR@wMpSL(eS>aRaQErzU;H$XKCy9%+qsTq`z*Bl;xPsrMNym-h98-yd!p8WdbiRyzN{0 zZu<23=Yl?c`SIhl{{BB_HGgy8a$e^0-z-o5+wbXbpMAUf@@%kGQ=8(CknxVr{nTukiXRo%e>Eb2yjHFz)AhaAU%iHJ;ne+HU>X_5WA)aW;l~8M(JkewT`x z!F$UrizGK}d476z z)vo=O7tNQr{D1fK^*_(xckF^I-@n$dlsdHLqyf9lhMm9PzBPaA{QLIn^^&FLa^GxP z9v)vfXXP%|1;rxWGk-5SurkSBI5023MTcqfq5b>*dKp)ho^QWUH z>#wWlHeOw#EVANLtWNi*;10WWd2dXSSs&lDTUFQ0bjylm}%UU2pGZ@;fSjOiBL$$Oq@-JX5CeYShyD@jFLqdEm)=Of8R zZjacy6vaFii;A0pz4dkZ%3W&AB9m@qUykwL z(V+6nxHvqZ+kDxb9aksog~>&{3e>6p?_{#`>OMUqecSE7RW8jlxtK7iZSyK|`wz_W zm0{_teXp2s?b)~SxajV%Ol2S8WH#U3@m-JVR>fU=?8Fd#tgz#+io#CSMvW87ich!P zSaSCM`)$7jRwTDyXPIKfeTn1QLDODd=jQ$2UhY)bsxFz~{hw1K&*GW>fiId03l%pt zI6u2qlhA*#etTk6Y_a3lbqy*r&4<^M)G_)bGPdI zGKmb!vyLm5Fif+oURM(8&CYc2TC_4tEJm{uKWB7 z;d~r5;pM0I{*R`mSMg0grO~G|f$h57EvHYu^SwS?J^d|CdiUo-U)aq)m&Z zcPth;l`xb0W36Xx-YoslEP-PxHo;-aI&%Wfh8ngtSrtk!-piGETl=+*RrtH)c0=*E zSC9VwRb%|{+hIJ}jD9VBhsW*K$CrOkzy0?x^Z$Ze zHFNXX|2}E3trlz*%==!YJT-?^ySY8@T5-g~jdO1mB_4@R&hl<@H+$u>Fv|1N{u{;{ z?;rDNxiJ65#?<%U*YDmw+niVYChP7sF*;LTN1S-%x4i3(S1m)wkv>`0WlO@W)ZCecJcFV{+B=7)366bmzF7`ZBjaE&F9>;z>czY0FlsmRBhWC(Jc))GfO$)Szl+ z>1QH-TK~pNhZ##MUv|#yx}LUVQRceatlB=22c}pqognJDZTUpDoBx6t&u6ukDc-&F zU#m#*d`XMhf3C@Acdt{ZvDDafTR`qa9Zxy;UXjz>7Y+x{Q=YW!<8DR4HKkELvrPKE zV?MqRy7j$%%WL7wtZDB;JiE@^`5Pb^H>037$F8y=${-Jb+d)nHph((4)1si*nMOy;dq;D0ehlQ?j>(=sjE4le@w@HM; zrpIEldYhZ;lTz+#yZO1g>^AK+U3vTLT(veim3#7kI(bSKzW>KDTTkFc_?=lf7mxAA zozE~ik;(3EdL^#vm(7$j)BXOwo7_9+$}`17k5&gY^&UMC%FXsB-fnBpfuA?z_Pp3_ z@hi=VRdw?<%U6}DR^^&|KHSK(&RMsLdtwcHMER|E2d>$yoFiF#nz73csv)wdx{jL*J3s3zqmHqrg{MQ|x$1PsME13U2 z64|$yZ{xP!imEFMmCbTB6lT1d(OJwHRIr@&$;P$|&kWlwB%U||3rzMVOyOu%~LCnNO$M>lb{mTuGHdOZv^`e#+wpi;*K$pnVE+w|zXhJ;T(LOx(zU|-X`2!S zzds8|`g=?%&}x^-n%U^<{{Y;wi7glJ7!J1&8)EWoA`)wrqH@|C0aeeh=M^tBkGY?_`(#q5Nv=zNy)> z7?~Vqt9`KD=Ek{~*JDXQ=DZy_#S>o&ANHB(zJz^IL}@0&u4TbIOh*<@n4xJf$LHd? zrCW-ct~|1ND|MUq!3+I!7iFGkT-dWHqRjovS;Lgo3%YVtIF?r!F1@>aksnJ_nktW8 zhR*3LGZd1WJX0??85~}DbyZT+9!YlV|E!m1E&bRoZ?C%Jbk)p7&yOYlFqtf<6tsC+ z=pnAJA5#?FPn|sH@Ob<2Xn)hCtzj4Z)E`E1UO0L=peu5o|AHF9{7}oqODY+>`NKB* zF4S03+mK}NvT3RGvXi@3Pi?9?wV|zgyKk$}u6O5_mU~rIt~#dBD(u>DxUeN$m~n;5 zaeBSbd){ZsQ*~h>>2x5ZKp-NwXxjP#+e})cYN(vd)o=8S9JE?bm2U`#&}cI3C8TO z+q~vqW_T}Tk6o~J`H3w)3vaKBYfs?0cJ5RBy?q>M=eG;zo{PD4>W-Sib#N!NIt#0ft$AJ?8@|X z63D&rLdwnm+jLIF--faw4ITz%|0ZP1l?W|f~(F$-}~%rg>t%`A?`gRU)cNHKKiOHMnX99fdUV;AMw z_d0ly(&hRy(svh#{9kq8?5gR{%0l;?5<0Nu!~c!57rLjP{t~@$mxQ;^F3ryyH{VRO zs!_0xVAuFKTkvrgL)FI9LBdjAW()0IKlV68$!hGm(X8Tb`FN%UZ{pks6Mu-veY%wL zL3jVF+BdJG1Loulzw3MPyXNy^0aerP5KSeyg{rqMhROP-)t}i_S#kPudbRSW0|zcz zg=hRrW}W1#*-`2n9;W?!q4v3}y2nd$AGjo0nHOf*nHVi~{+O^Sb5&EhV@^WM_T%Sl z&KDovF+2Kr#ii35lNBw(Y6JY(x20UzU0kFru~dyqGH~+ZXkX9PRFA~Sf+Q>d`o znsb}|g1i5!UvKe?{L~pX*(^=vxYn$x0ata?97`ilUi_s!Gv~pNM+z^`{piS>(stBZ zLhM?)C{KxW^2ykn50}kJ6@2h&dqA&{0nbyXi&aiW>R*EX84K0w*%$3?unjEbd%gAR zhtk~HryqE?86RDedNg>hLW1@M!)pg;_Z;fGey-HHb++58txm#KTch|D_>X>I=-lwb z&vV1m72XU-lkF{8(+o5?Z*0GKX*F-Xhfn&_+^*6PlW=7@FT+@!h}|>urKU$;mDw46 zTIT+zoQroi{rX_zvOD=UGc&J!GpE1Z+#==9sciQ%rp0wVDVh_#{?42adtyBn_INn8 zOL|J4O}H7vA^V_vwo~)*XDgNF*1q@{++?lDb1K@$Eo54w*nN%cW#x?O)1-8tDcP-m zx_O_hRPVK7?!KwL%cM#Rj9(qNvy;JMQzECf;ao`-ABOg4j3y6Fc%{Ax@1L7ma7^Rc zg5ax-%#+mGTSH%ejmz>aIKaU=^=$s!Eo#?Rx&|9<7KlkHoxt7Z{rq&3-Ldd0uj}f4 z(;H-8KVrG{dbLX9Bdg65UmN!5&Z<2AM#jpGo8?NjbnefF-KIzM?=uD7*yi+S3U7Ja zoLe%>dYLs7bN4QrUv=?~qyF8O?^eD4wt2;(j&}`9uX@y2?wvX<`RGEer~?8KnoTjM zV=7HoE>w0^I^vl7F5szy;+MmH+gziU@UJ<1K1o+xTMj2feB0fu#YP-+Zb*XRo@WpGEQXoWpxkCl&5zT)S!dA!k(HKNz_CbO*hSXv}tKRSzz+^V_&#vF4G>j~PR5NY0e{ z-2UPCFNbMLZZ0$Uq>|<^ulITNE3^6Hd#5?>OLwa+GR^YScu`b#O~5}@eV4`E54W># zulZta@MW3nKOM1UlOCLNY8R>tH9KvY`zO2ka%0B(;_0Qj(|&2OeO$+U{?jizD>iL! z)eKIp7bhPC-07{97KI@Wix;Ij%j!|;Pp&d$A?ab55CBDB6QvY(9!$D`6w!zgi ztS>c61>3rK!nSVvEE92XuGaEt+B=;#1Z@sV2~0LR9<|bjLA&?=1Euag85yhIi)GAX zW0-rZ;uU|JY+UN%%7{tPD{lSn*ts}v>*c#)d3>*ay3alSuxVmj)l-N3pC6X@->Eu# zB<$?xnY(_Usy_by7H5a4#BWa1J?jpB_LF0(n4tFMgQ}bV2Up%?=8Na2817H~xyZs~ zhd}Dgj>g4?apw)@gdSB{wRypYh)&jjn*_>V=4pQ_;bQw8xmBq^Q=+h2Qf}{)LryIh zLv1$Pt2i|E-=EcLV$+uH_mKOw>)rIN@`e9a9<=@QB!e@ess5CSvd$JWtJ(kb7gS%> zx#G9%D$mZ-DQ(|YT_|2Notxv0f-B!WBcV&@?zqmprr`pEDhB~S-^{Yv&YPrtNF$qmXAGuQu#Uk?Fd<;$Fn!?BuNawu_l(|E>;R^>Wd{n;gDhp1ZVtNw#9+ z67UGT-fDPd{aI!suZE)yi_Z((kIj%Zu~C&+B7b+s@&lpE`HYM&t$Osh&Q5iQGWY5W zYNo2^I7E%4?0=s+TV?y4|A5SfSz9u9YyI6b{jz(@wnO?Mb=wTJGi3MAJzsowTxYLE6Wr1f0drGg$m*;e;6Nmk`Y+=e5I{P?~>jviX~|( zcA@tRmRx4uw~z6>x`|_l+wEz`r`IYh@lY)=2#V5;6f{l|uX~vgk@nng(lqt zozw~ZZxo;MD^_uiM{nr##+Q)}_pY8vGutEBs8`9)*L;0W+a2l}heYM`l{CQ~JVO6SZ81_2{xG50ef(`LLm{O#ABZ#c%uG1vzXkKGIn` zm*v&ewzeYs+4qmk%$k@~7js87cb;2xSDu&ik+oS%PAlD?@~!yd(nEK)Eo<0r9pZDL zsqGbmz4HRQcJB3euiH*MZLy2*RdCbqIW0TpK4p*hnEl$}+l>cG?`JGx;8i+wcn*(Uxe+nQn@z;H(s=Tv6q{{-he+HVSDp6 zf{J+cife9cs%`$)>999JclG4=nvpp@C#E&+csMoe(5`BOqF13ObtC%^b?g+GC;vok zYq^)xheskSd0tLfd3e(0535?GmLJ~7w=p(a=n1beTXbcQ!m-3D5!{cTCnROZD!OQt zasSPi=;_{IpmKhK$BEGTtW~1SxlF5k=f;cZi7wjO*s@)oL79Jhv&v$NU%U2RUep~Y zRDa>rnQ2emue=ODbK_ahS{<{fmc+v6zTaL8M)_a6Z~w+bIystKgUO25m*YmV;HTWu z{`}c`zgySd|FEz4d{h5n`SmOx`R?}E8mwPZr(C@B-2#nAUz}fW3guPqIHbM!%Nkwt zgwy&hujPaLr{z3#?GsIMn;Md)_jS3ik*SR45%;TNYqra>%x&#;uXwg`ZNJeCC7FiP}!qYmVaq8kDpOjY~V_P4Wv{xx2nm_p=-@ClViH+=Alip?C z-2Ox0uR>82%Xh#3N;}H?*sdK|b@{>e!thtEW~Oaip((wg2mcnX-WxApD$?3tRGTk# zx!GFqwwTW2D@WeOT5tKB!YUx;e|6zvtLvW*@lIFkXlCx}NL1bCo8X)~-Qh*B;@_&PXM9oD zv-KYSs}!H`Hv2|#W3FdXOm@@EsW*4(`5g&f^K!1OK?Rpbt^dKfv)SKR_4#hTE!uEa zb@%d~TEi_8Q861Fx8HHOopmEVbWxXef2EDQWZ;WM)7U;8@clFQ+ygrw0oFOWUb5D| zJN_(ZDYrJOpBAk;H!Vyl(xdMU-`CR3|DzVBFWl4_dvEgY`hVM(&!1nLyh}K>!pnC{ z>WpoF-a5x}Ihy;+@-IuD?CZH8r+eN`?UzMy|G$~%_s8GA|1H0N{V$Dnr$6&P^k#Fo z9ClDL3(4kRIlI?P;r6|~FE`y=Y`nQD%{Xqw)YRX+lGcVMhu4?(-EwZ|JFap5SYm#D zzU(I#w<3W{JwfUR>e{uqf36TMXEK<@cEXYFr({-=x6mc{>+S?gcEd%Ln!>6|qxh4<_| zep$XP?84MjJhiJ>_zQXNt6z`e&M!YKT$by# zLqTxOM$MN&&dryYuV?K1!D1pTQ_cF~jo`gSwjb}NSW7W6MqLe4e|h*|tn>7ySr>G( zy01AFUETJwd7;Og86JN#qK@lW_q)Bxi_43Pdmk5fFMiAX*`W!CDX5jr?}OtvbC~cP6UjGzy%4%6k8FqF|8! z7mhWz@4f0;5vif-5#@hNZ0gxv^Cg$tRCW5@T`4d{&1}ulSN&&?sqE|B*V1OLkT&^x zL{$2Y!ViD9TQB?d!Nun{VDHTpM{#o-|s% zoG~{=^_sPM-LVIL)r*B6U2)x0{;4|T^wO2@_gz@<&R6W_y#L%w9zAaQbJ8`|u&90i zHl`aNc}>3arTmFJdh@5h_@PIK+|KFherIE!@b2Vnu9}te7m6EpEv))-R?+#@Q|-`q zg4dq|3Z4OE$=?5N}NF1K|hAD3O;@UI|%jQSQt9*@_LSHSr zEx4JVr%h4P==ryKGk2Z4c#31=wfmYP@0m6nxc1_ukf(0*Ch>rlPamJ1%s$>}yGwqR zD}&h<*Ip0#w*`%9z0uFZ3|_O|+bk@k@h$oD#^N*^u02dwOYhDubK3v^_vhFDKVE(& zzJ5yhs)E)X8|8!|M9)6;x#b!(eIZMEEwkg+KK45+KYou-`P)D1>g%{Y+uHBi<{Ka-zLov@a0)H;Zlb4A!%L~ z^V`$kcB>b^xT5#$>Nnf?4;T2>i|I#au8v|}{Og+1mU*&_ZT}V|>NAEHi`IK3efw$Y zsnlh{RnBDj960iI32kZv9SzqP<$W1x5w^eGjiTpBlgJAZ`wNC={TtmJH zKH=6ZS;YS8;j!8+ajQ1>|Fjenv19wqo|t*b;a+prTbAYn`(2-gX?{F(TK|QBtMVLD_7WepS<{sB<(772m?|jOoMf=@brkSu*wP3}k9{X;>pnj^ z@G!e*tYPtc8NE9z`J3mev@FV;mvg2&_F5{7=)~Z>+m@>W&wKOaRI|p5@%nF)<>H*? z*L1e=DgQ_2_K0e!;DRkqQ<#tJH7?Tbmd%PgBy;%B0V!VI8P)D)aoSV2c0aj0 zo&8&yQXOB;qd4ciF@o>Eq#pMuZYl8Cf3j0DbSbN;=)olW2e7pOjvHn+Tl_WF>F3Fa z46EN~^WdMVOm^S|)9=xD%U7|_P*M;+V;_*PTxPAY+|-E@9SVDrM1@~Ss>{!d@}-Zj_Hb8%nphAGJ^FI?*%-BT6o%3l32^PJIr zmMW72k8@RCw|LCH5VT{n(CULTEUe0c1vbgd?mFaG=yhqCq0{dfVp44v%+%9#qc=p( zG+gzdSI!kxL*JnifSufJR{?~o3wU~#qP z7k(;Otg%IB`l?2rLYJW9GygTrde8fAwMxNFrGtyQgyu>1&7I=mpHUi+&m@f|tf_G)vU4Oe=o5wiiQl^;9v|OQCoki=jys{2_>0w_uV~s|H(f+SG z_g2^6o%JHtd}R&uA+ZVBY}cn>Ordcgh53*f=ijI2)(@ZoAY^ zBQA#6l5X|Cot8T{&tF=&dc}I92k8YLChq3#;dWHDDT$uzy3F;ugQUO*vAl!-B{T2Z z+b>>zx2=;=_pMJ6jV9t#eU5RRv8uCHNvskvSgT$? z>y=O8$<32vB!k61t-E^FD)sf!`_gw77EJUhZ=JE~SeBRSMAzxLu1fQ7pR!l+tXEF# zzI@H~n(FDiT$``y&3WF_bU&>WwK+4Tv1y0AYnS+xdpnt5KbU)KDcf5E-cYj-E3R58 znrvNu#9=*mM>AVs!-a;k^D?FO3fy*=X0NoI_RG(0fz{Q^LWhnQyNEb*eg8kVzw3sX zbAJn0SB&2M#c|(*lG}fNe$%VWd_U#q;^vD-GPiEHE_YhT_2PrRsq%+E&wQGz^X1H1 z;b}3PVG0_Bo2Ga;KlgqtxbVfpC7nEHdWs}edc4?HJElwaXl`ZPA{QW?u4i&qa=Md& zEoZJl@%zFVoy@D=|K2I>UvfvKjPcNhcl)mGh{JqviBj+UG{l3`33u@OnI^R#(KADr7W(kzRz0j>AhXG z=TM+(<;;r-*Nz?D`CFeUfN^OlSK{0h_QNi&(PjP*uCB~_*`3g*+@kFNXzziAs}}ZF zmwZ|0VVSDIY~Jp7;zG%*9|q>U99I?C+ITA`7zP^XcKv9QTe!0#?{UQ3M_(^2QInf# z#eG5M-W4%Rlj-W-z0ZHMF0y$LcUbf17OfK!k58RA6Xe_8bI!Z(q2={=-`BZsOO*(| zp1ta=(YAe3Ip+f$0wVa|8E**ISrqo+xcef3uV$G$bT$^4I9=TJPrf9$BB3yHx?04Z zEVXA`JXT3w%btmxoUCD#ZN+xl#r34xu4yk)_onggI(0@;Zs|3lTIDIh(F+Q9ZCPd0 z;h!$HwR+y?9Tv8Z2hBrkoeGX$yv@+%A$57_o~H+%|2CDMKjEF=-%FCG+6|mU&aWx{ z9K9(0=%HQ9HN{tIJ$QU^&HQ3V%OlxRmdhA@zg(Yk-CM4J-{kx|t@~n*YGPmACeQ1* zDqOfUGjH#*|9rwa0Y=70f_-MnvQPXpxh3JNt0mXRvwN!dPF}up=X&omlkyfVVp3D7 z5-)tc{DumbouNLXOLPy*L@utgTesG+XiQ^WW!HLY^Y7?;KeM&{&M76Gz4wRp-J^<0 ztUuN)n>X{-K4tYeVl4ZnpD9=PJ!4sFk1x}+oyS7mPI)P9Q`q(MT#DI?g)`3|SX{ba zVf*RCK)L9w9|{Lv8=UD54wZ6W{UW^HYtMqqD`Gje34A)U{QcffED!hiFPdX%%em|?@cuSt))!oD`&DG`p!o)vTUS)^2Rw4CRhW!zVK ze%Q@9B*{Ks;7;J}Qy=o&1Q<{HSl&K+>*?n!DTQ2VH=oV=+-JV*n(EujdX;mp+K4B8 z6}MP9xqjiqMG-o;uFDsHmNK%stf>lAZsi3?8>{B*4+MD}VO;nmP8JDC>7bfY2IH^u4W zV(y=>A4Qb*rPZp-CbnMZ?$%i!vwpjnnET|(*}f7-k7j7(F&~`soBQ`)vkmWg-^H#s zoGT-{|IF$g?hs$*r{Z11m_ z5LV2ew(O#6vDDi`4|^^Ce2`ykUY~bua>aG|hbG_LMYcx1-mi9zsg)&Q$JIL`v(EGU zn8SKyv%>rPMz8x$MlAfUwCld%MQ@)CPk!Hfrl-IH|k{G@(<>-UX0au@A*{!i`5vDzrS zdcw17RZa1|i{>alJ|U?Q9Tu*>ZDO|Oo0LnRjw}vk%vvnjIp=g@TIjoVvzEGh9Om*} zRR3yUPp{N|Gp4I8A-?eslXrHfy$&Ab-BY1gKwi+n0uZEa6x&8QTL%H6$?BSZ2-Wb4|p zXPFgJ*zDO|o2VGH)#G7@@XAm7G+qc;OqBk$vu*1_Q9%#e^V94$K`20^LL!pt8%)}d06ms~N6&w&dlewt;-{%>< z+y8EiWw`Got)KhYYmX_H;jM#BA`2Gf9lPmZ_~oQ>tHPCe4c#Ks8Rj_elvH>#%kle! zNm}!{R|P9reN^2O%=^=kkK&wsm#6A|<6mYMo+a(dWyORqj+RfR&R)pzX`w}N?rXh7 zUfn1BQ9qgIR2E5?nmvCSb7t;F-3X`ekqI&!jH0)<8L%~YZ=A8zXIH@{1uuogQ`kh< zBOmm5dA2k%NWR~)wRPK#18R|u>5Rt~&)OBwC=%Q_2YH$9wvpmkq2`<^`Q zr)LG(RJydAxn?{$xyZVFVTgjfB5VDw0!D+>wklr1bH-!S7b>g`a}urZz}?y$@_ zQPwNR?)W6vCkGUb_JGxy%+vcxlO$sdcZ=2<4qS(DPr!!jmiOiFg0Y~USVps_n$ z!eRkCheYIr$_vlGi_|z2@ShG`d$oIe@QRzV2OVUxyiHsuSl``w`Dd8)Un@-`1HSp* zlb(M5Jh|+&6??_x-oqtl`kt$n`ilzY&o-VF!n$Dh@!!YU|L)BWw`wfVZ@Jx};U67- zx$6A-Z%akKD*gZa%+)gTao<_~_g{M%-w9^*bF`b(9&{-D)EgeWv{;X$B;3?o(Du2f z)5AxRm#6965@3HHmzOU;bFzTX%s;oD|IoZU`;M2|Jd>ND8fop~E%Pk)UF}=F`)u0x zZ?~Uq-~RS?+4|aj26pcoR`SY!)!O-P&Z{mK)r{@-x#z$4pZ)*+^|$x`zyAC0mH55< zyw2wow)CP8oHsRv4KIbwe#iO$w_Ee^x!dfvu5~iXJH52o=)=LumfLT=aH+O_ealHY zSL3Wk{=LL{#ZdO^e_RwY7yeNy=3VwWL4Vn`S%I^@bo8#=nQyJ-lTfOq^(cAWw&ob| zOJ6K9wNnDFw4N;4cZ@?N)y3t(6Qhb7Zz_!s3w(*O)S0v8_ph(pZ?EUy|8DE)MfWR> z7u_ojIZ!SVvGTUIa(imk@$BnwiZ_3@b-TGD?(~;4&t|Tiux)aE7VpN>&&H&&J`|w?>4Y%ge{Jbt4UE0XtjA+9olK^C!+g>lk@G@ifQ)S0?Jdu4{cd) z>AlmJYi5kcSFQ`vwKJW5YuiN~=7^1+va#dMX%AJl^hqzST7CKLce^I*lJAE@%C?oF zIXywAZ**O*e01Qhr&!!&x8Ac2Zv@2ra{PaYWX~_VC&a(}Q>u<_+CS%utewX;J!QKc zvf$~GxA)Ee|2%*8{>|0?S8HM>|J?EIi^2}$X8(fp_}}Yy*YA0|f8X7jsc*B6mmP~e zQPQKvEc;Y&&Gnp{#lF+#u-|*wepS{qka@~#jrGPl_x#UsAAOShT1Pc*&Gpz|Et^ZH zOm+7OeoJaHEVVaXdZH!3)NsPpmv{OTU5^RzYh8(7#&l9RiZgA+w5lgHQ%u9RH*imJ zcs$o`=Eh9%`?v4!+qZXrC)aUxVbcpr8ppKW z^46dJcc9E&Sup$dKZkF&D=Fjo`{@JGG6RAS>Ee~NafvoHuifKuz!qNawJ~V^NG-{Cv%e= zv--YP{XP|*8yIc(Du89tilyFbjPB0Z|L^;*2YL0nGiPY({n%*{7$!VET1gKJ5O%w(~%Z2A4^cHDzAZiy2v+<3wm@a4^N z=Fr#dI^jMST;E6^Ppj7H&yf17)4xa}eS*cr5IdpZOL8|}EHjH*I7{O~*Q_0UWh!za zqThD^|NE`}zy13E(|Kg;-*(g z+j&;m^M9W{P5x$m{bHVK-v$+XZJiqaU6JcgwmzD3_sPGv59^Bm&tCRRJm&CbjuYZZ z_tM_1*K$euB&un9ZMDY(?hH%zzn?QUtylaJHTA~lW&U0No~gH8`Fv33W6+Ddt)&|T z_S*dAZ48Z6S8Pe#_iOSC6U~~t`R~gAuf2M1w(Mk&vmXUlt32Lc>9nSJa$JZ^=+h2<|E`<}jvAY#c@jo9td=h>%GBgu$l>o3egF3Nl==2& z*QS_TKK$9zq;;coR`g2i@(Gr+jh0Akuv+&aSoiP)){bk{NveB4mNO&@-gYjT_}F2A z39H+Dh7UJ2W#g}&Hs^k_Dz1({;mT+06F)Sl4^}-`x8a}f z#J?Vk<+pu&zO{R`MsnY~pSM1$QBYkK6 zq}V?<^=$j!#}r(I2bLmnZ%`u6k*HaH+iS)rT(cHauDU`%hzjEK~Tp zo&6pWonI|4{w@fbpBc4wyV?Es#oLWP?Ae6G{;Zv}siL;Guueabtck56BFna5DpsIK1Z`poxB>#ds3 zUHE-{)j!3%`={;GTl`IEE!#7hCnuloI^FT}vh&=@2bUXss6F^MXp)%MwU_dT-e~Qd z)iPs-e0cxrM?2RAI6bkvWIwrXeewhLFYI0qgr+}wIKAHWc{jgL@DJ~lkBy7WSFOHw zhu^wC&g!AM#gES}pPluhJTF=(e?7kIU}5Fl6_$yd>QR4J{POmCaC^$%+_nF_n0_s` z{PS+6b#m~cL?+uq>#zPuwTYkie_~bAKD$eYKX2Rf!$GtE;<)sg=@41P@y_{*=>=jHJ59e+>7eX%>~mp?C_BfIj);$s_?pZwAIr@>h>J+wwd z(Eh_8MWG4r_G%vO|DrzWfaqzXzc;U$d484?xuo%Y`>mFY?UncUrcEwj)6sLk@iMg9 z=i^krvfpRa9;~|bF8Y?OpLC1e9QoKy*B5WAw$a}9hMn`4&b;%|Uz}2J?D_QV@5gr^ zPv7-lRx~+s$+WweGQxI;`zUZzkY0; zut9wOt%_u|mW}nlOaHGnJF{Ed^%hIp#rH3SzMTGj`tNn?+}fQpgi@A^3ohAv?n;bx z_1<^;xz>K0mM9$8zv5m*TG2s~u$?o%@fk7v*#Gm?v!w-RYB|c{7d`X4ef7=1kN@`F z%yw4!wS+TvL-~yPGj?8Y3)h--?Iz2IcZvV?wx$@)lU>>O=CtBn)sr@T2Ukp=XLUwn zy`g-=l$fRhmw$nkC;g-kE5>eH`{=i>{oQ|a^6gwMe%&!G^vU0~S=C~dJ!QPVeXWh& z#V=lSYay!#v-Zt1yQ-=-avwLIzhl1zli3`92?<{I91bplDO1n;#|2#GTNuC1y#8@! zsq?wQ9`Am>{q5u5;eW2iCEdv}^is~9^|sdYt?4bUqU!Tvr8mwe%oNx%Ys=*u z@8WL1TN~EbYIJdT`CH!KKYn~UaxC$U`^kCtzMR@-T(V-$KKo_yxyzREvWwa#RUa~* zbvDCBbNZbv_P0EX5BdM7Vw(Mx^Go1-%g=5%zG=z0m}szDx^AmC6#BQPH(~Y04gD5A zrg8swn(T;{c+q+8uHo)$6DLgGcH-u~z4`m!#r@xy$nKG}WV_MzXZg?C&fdA7Z+=VQ zoYlVHt9q}wnE{mt4Q|8D;t`#;BTpVgO| zu|{i!?%c1H9CJ2H{(b#!`~Q7E&#yP%pJgADAZm~+YZ5q3LBe>$w<$7d&A4{JDMDe#^#>3-S)GmJW7gwljMq z`1p^;6xh5069&n~`0 z9seXss%&_R*SvL~@_P4UAN46F7bnj8cm3}FpOxY~;P)NsV8zfg;J_VT@Q zEbgssW8X)QM6ccZ{;j`$SO3t8*p0crUu<-IrBlebeE;n`nfKjum;WvQl`wrnu&~AB z4gX7Wgc(oE#9LR_?)ZCaM$9$;=ZhkL+u7OM3Y+&tep(@yCi{}bQ{#|E$&o+13f%%M zrIU%r0%(KEVj{)_t)E`4~G`T5HdUzP3l`CB&|=GdjZ3FEsOov1r$mA32ozth%+ zX3G5O;gVGB|Gqt{IJ3Z=jh8W`_|?lf!jj*5KC5l!d{?vJ?Cwsc_OBbauiY=wxasNB z77x40`@F72oDjR{H{F44+3M#J!i+W<*Z=NjuU+r_Y0q~Cze^j_&&;`TL0@{?DN!4_ z@;Td{|5+TOxSHj08RP2t_tYd`F!Kj(zVmIjZgk_jZMS^IeeRX{GhD3A_uagE_V(U& z{aMCI;jIC^Q{JSX>RYzSnRom4{N1;E*DrC{p`f_;^$p8+GbB_~q7#m8_&QtOu}w#_ zY<+)8j_cMwH~vK)%Vss0om2Se_4D2zBQKF7hODj^uYQ>DsCiOy1s}uz8%*!>`a3R& z7P^P8E$^9i>)foQCLN(mGLt{(Zh!vhg(LGO9b>h_1dM{fPh z=4s!iy}j7_>r#ZS(oZ|)tZlVEvbRFIP4#R(2-y`jJ65gR=(4M*j+5uC!F%omQ_1j6 zbF#(1UJTiAaaxev;n&aD&Ch!AH(qt|>YTdF%%e>$;8eZ(^T%>ACOewmJ++*)L{y}z z%Q&>lp-(Vp`PWltmL8n@?{0A5<3?4N7LTJEPaJEW-#cJj--z(Kf zJv@`~(DK%Y>lROVa{VV$(+6)MGxu`4+J)!qGOnC{5qog1<>e_en)36^e=%Lsv6Gto z{MVX>g0IKFfB2HB@%P}YNzYwZFWdA=>zYiL@=T8%PtISw*UYbyt#kd#ayL>5)<6zf& zuc+3|Ti5vMh=sWQo<1Ru+3Ng`=e<*RWzIdof6!SO+==6p&+ba%xLj6g8~Ubxef<0n z?l!!uXU)zK(lburUP~dsh0~rOcUUbg#q-gd2zoFtg;Ddd}0cS>trzj?|Z}8dC(7 zRg6QlU$3|Rw2+PM;jE+j`YpzhGgh?kUY2V5om0zLO?RpA{k=!ayWcWPB-t1e5k!DL-XP(yQX`>-?yr` zE%{!qA|Ni-k?5frIp^ZZ%w-e)x*ib?h?z23Lum7MF~g$Fc}JD28}y{NzR7+4L1J>7 zp?K8nXY7(o8uy5>3p|ncG_Z>}FR0P=SVNs5$kpP~gBMeTQYvgrFK=FP{nExy&JkZC z%0qOlUQbE9xFC$HHezbe`-#b(`S*5mg$5Xw%w2c*-||V_&AVqG`4{%#Yu{-J1)H`P zX);|Gj=kmdUH{t@&voTO=)}C{EmRwXpHXaWv_ z+}tK#t=JN^!|O@>_6?E|SAvvU3p>@f8OW*IF-tCXxwf>^@rJzq%ydox^-S>9=GPrrCG4N93&)6c3^*`-{ zA8fl8r=hp>oASdW=T=O5vUEcn$Np>bhbM7N4L1@E>@;ogyxyyNo3Hr$#Tot=z2vtv z)}GekFjCGYN`bKz3{iV$f*k<%>B z-g;|qJB9N4@7%W8o;jvya*plEe3{;#B66F`T8{0HDCE&}sh;B&wnD8e^n38k<;AHf zkp*YNX36^;*(JS^HGS%>nCi{1Q&rw>+4rG&)@P~Z|MpCXQaQ>T!pw7rBVpCqmuvoC z+!nl0Xy4`PRHZ8qn$v?^M6_dBZKovWtd~wdUvk1Vbo&kGKY|`hu4Rk6ye`?bxNRR} z&p)*jMf(oR>1pj$+HpHMu;|ye+%|>d3kA~mmkS(mvo!OHbr7s?ncF3nezK>HZ))L< z4?;6mPEFpXWAt;Sbt-HvK>fod*TsrIB(CxfEXc7mxt4k0vgWgNzd)aYPi+guo>o6O zk@#lnKCPRRmtC%`%Xqxz=xm<16FxP~tE{$?FDRd8bx$#Q>QwDz{U?qblum87YUQt~qxD zdf8b0ns%MzW@C)DE5?t*IP=rvLeCeglAbx3aV)bty-mKn&b6TZVV?i8dBK;%UbS2jGg)v~ zz;^2%)$Hv5KF8Ynu5Y>#`cGzxbnYFlz98GqMz8SF#pd;og08Z2#eDGI{lKcj~{^EZciSkbi>34)+RQ%}G6v%OqS&Cf{Cup^2A;E39nY6QPS4 zM%TT0jqbSrnlt-k%ens7e4iUTbF}ZDKm9`}nqGYm??q6Zo~OH+Nc*WBs=SrA@gRWhJXl7=H)| zbYppBmwK?^aOB5%n~znNw|fdK-}SEa-6GWj%?3?_LT10 z1Jb8fuRhY^Fn6&~Tkpvux(nJB5*EnKOw*Y;rEhuo-|Y5JqC1t2&f2+r+u28j9eG7t z9|TM+*8IqsyXAGk{mIo2&Tv@=T<54V%8xZab0dDsZQib9k{NA_G`rVzURm+?#E;9n z{{LyPn|1ThlVg`9etNE46MkrQsvwW|>TMx1DU)7$Xe_*Aq;z)4?SuQwiwg_ZzgxTe z;;Lys7u|kbrEIw{?QGceM-j>H2Ac)nM$_FC&C0v zd(WHZypFZ(krRxtdR~#x_xj=1iAI6Gd3ztLb_R>@{o3gAE{@U<{>b<)$Y53b3dvuUEJo%Z zYo)ff1r^QSck$2X!`~UXgB=$+_H(}eczxZKM8AaJZCWQe46mMdxFL`ebSpRc;^~c_ zxI1@R>{$O;`P%gd$qYVD{0fPi>k3XWUfFc{jFDuY)|YOH`6fwgFVDJkNwp+<+MITy zv#x3{=dC)>@paO~sqXU6+iuNR)n~K&Wzvoi<`MO?H_y56NO9W9 z@b8M@PIDRBr4~M#Y2a1T^4fI6%7aSN7k00+{^cpQY%kA_?VAm&e=eMK|J)HXFQW}v zVpGDn#Z~@r&+&S7X~~gIrR5;!#DXuiP!O+Wo7mW7UgksrS=TKTp_p|K|JMOTY3oN$VH{1$&wwjoT!U!O*mv zxqq$I0gDx>J+GNAWqwvUvinVw`IS@O!|(pol8qO<2q+G!m=ijmI&#VPht&K`(_%3te7~n;DzaGF^;g01SNItmKY0);lSz4c0F;uL;){ZY{8KfF`= zEdIGac{o?#W#gtwi#h#2J(vppjXGaM@s_Ha{+N5{%#lTx9o57vl~1&u{@HSJ(!ndr z_R4oxam;qv{w!74tH7&wv8hlD=UGk5botwQE&i{VA?`W5|=6^qn{n_eKB~Rw&e|$DGZT8OZHg|4K zKV(yVazg13-pL;{Ik@x|oK!v)bKfmk$yjVRucyejpX<+moxi(qkB8~m#nbjOwKhi{ zYkGWFRsZSdPg)%Q7gw$`zLI#{<*Qpyaq&`D70b4|S#3Mh^sf|IU;KN`I$&dq+qW)z z9m`**=PO%ZY5%6WIL7GJxvV9vXOts7Ip6v@nLMAi&~U?i_I~+Swomvewgw$D*!`==X7;p=XM%n5B7X@!zmUV(vc>HI*Q>mC zb)HWGX)JNM8R9W7-+fZLa$o1sr?93y7CWp>R`BOG2yt(?R=Oj2j^^YGL1*4In!n#* z^YWfb;@LfWoi^uGFN&Q~vMx5{#(@vNf7m?;ZL$$5H?h)kQ@thATJBT%uK8r9f$X-@ zw{^caT(#5v{(n#X9h*$%E#J2Ah|gnr>~ZM*%2&Kcek?cZzL~N4ExAKlb$qYnkih#Zj|2Z zc0#V@#Gi+Lr)}@KAAIz!(eLkR?{~M%k8qTHc(CwbxOJJ+()rv%QCBnkn|nI8N59S4 zko zI{)y_p8P#;MLtc_dg*xkx=BLSk+@*N?n#ZQYzNcovos~l^(F6}@^UVbJM%60j9W&x z;!cnHE|weH;})C^oIRm~HEt8D*7`j+Ts1E0MLoH3EBU*GIp?yjO1A7j~@ng?yCakpI|L^pb zK+f~R4O5G9ciHUV-o7hAeWHe>(AuYYi#Q7E@B5ruD10hl`Odos=X=~c)NLje@@K~r z-L^vW`Iq06hL)O^{8)D=?9m2M`2=Z}iqBp^ zJ+!#?jJ2(0T-Is{v+Ji+Pwh6(Xb+8fohF`YPYe9wWkTVua-6$0p|b7lwr9-M{^8 z6OWzNbvMVJlxb7_wkj|CqW^k#t+GIKm{-d)o2SinoN~I135prQ0dFVWdJ!AAc-4{@ ztH1qrjmWjOyz$|HL%*}tmX@je?Du*wdAjJ_O1iW+`u?TFFuu1vliz4hwzWz1`)=OP z|6Ba6s7H;%FP0!P>rWawDwn*=;_u$g*|Kc^~Y_N~@T_?Q25O5dr9mohVA zFUv%9dTSkNZfz30RewY8PQ|34Hzm#Ij=5@>2%z$agp2XghaztNtz9FO+*xLR)75F_`57id*$up&zDa>zP!6E^Ss->^oWZh zPfz&0)8@T-i|y!YueB~eoxbnwY+v2}_wT#czpvlVD?h*ef6etJ%$F5DEE3>RY0LYZ zx=U4Z&%L~V8*dt2KYIRN%APP$W!Z(X5-c;~yf*Q3H6EH87{hQY@1nDn(s98l2mXBc zcl)e;=|yI~IlQVC5tke5bJ)Ke_}{zinlQMHa+Wcs>n5#kK5mVEB*cT z{q65>kF`kk8#LQYb~t}$>(8yLzJ2GP9WVE-+&-Iq3VT@_i-gzhp7YCRnrEtCt^d8f z{`c+s|E?t$HvAS0x*N7jAmv-U>$>NY4Aw8&wd8}$JO0(%C*-R29)F{E+j_~w)^Uv#duW$c*dv+OT8qWcnC!M<- z(xmrqS)4nQD=gXg!p2uV;$0tE?)&#er}@FY`pbPyay!qde*IVTx#)Z9$}fk@IA8Do^Xc^d|G)S9 z_eA`&JUh?$uEOS(Km6_gE@@+I*gWYfkFDOU{6Lcs?%D2j7Bl{-)V>w?vf%7l`7OV7 zq~~NyqnM)8Fk@x#|#pWQUmHuWwJkslRVZkyp6Gy6}V6V&=f;gSFrHRo=d9n{)47+A5MLz{=T~Cm5}Ailb$*5Dk{+}#hM)A?q7^*+4K z=I`ZckAMAZaLb5%d-rhP+LH^@MC$y6@0fOI&C!g!^;)xP;yU9A@@{XhrmbG=y7C6E zm1puptyTWII^CN(ru>-Us3-25JiqJI&G(y&o@F1_mA9$a3DTl0xv^j7 z_%iNx3_GT%nB3fZQf|Sy?NM?;+N?&tY8=G}4_#6&*~m8Y0iXQ(S|# z=aPBe+@|AuzjT7GW|sTc#Vcp9Ouo48&#tR0m%KM^^Oz;mr1DHeRZZT?Izm}mfb-b) zy&tk-H>ZD`Jk#3Hu}|geR`0kwHyB$x_tZ+YMylJnu30T)8CenMqdwbzDvR8E#?$5c zH&$J_=+fCEW~4Ib_V=}-D{lPz@uA|khOcXi@U*RWR1NmVPXDd(>&m$g8Vfe&3I24> zYTB(>*lEJZDLg-Z;Q;Y4MtCamjukE&lMauH-$}xWAG$X7jchvBrl{ zd++7P?~r=1n>VVfGQA;1V*o2HlCD8BT1>VhT8f2XV8$<(i}RcKyl^jJ`A zQSg24#Ct7|PdM%53b>@sU2-vciP4@e2Fv~JOq)5C`M&)+(>1MT%W|6;CXWS#tlZp- zJl4x-JUVe=$9g{xj0j=NZzbDZe|C8;O22c}O5%G_it-PO#=`pF z%bbrK$&q?LeO=`3V2QNmurT|L=c_@nQfsBw$Pm5tk*#QWw0w$;&$^3p&-vaN?VVwI zjjyOF)Ut!iK|@P^gUA~GKZ}k$<|{m47-Q0WY_d(!DdDRI8b7Y&xK2MiVgHsz0yc72 z<^Jgz@H=J+I!^#k#N;{&R-{~G>d6;VWZpo*gg;O`n^~bz-#4jcEHWVGzso88R($I*?~_M&2arms(Vq@Kc#$4}%+ zcrvxNJH}4P>A$`-FDmuS{f49$1y>$ytT}L)zsO;lhpg;^Z7JT&cA~yo=J{f2CpQ>Y zPt3Tsq$smMoyFkBtrKgigAe3?Niy?TbZvo;CFhiNX-enc*na=KQROzvhwKpD(@m9; zRZnVI;)<7Ni5YNgi})>g$&LHNT*W5qdCR6cHEI1n;v&P#rzBc&eTPrSl@(_y4)Cfj zOD#QlQr$;lP2}qbW!hF#6C5~Y`_}mMMc8PbjIfJ4cZf@1?==%f#q~~qH+))mOV4vr z%|?aRr@sz_Gn|NB+_kLG?J4Jk=b~TypL5C9Jmh?u>BlF($i;rw!b4M4ZQZLf{Jw{= zE;#pf=Bj|(8Ev!Al)Jd;zX|y|Nx*WOY~$t2<#M~V>}5WOwxm|R+Tgi)?xl4utEOi8 zmm2c=vVQwz@^G)+g{$up8a?idB}oQ`*X(QCB5f6sl>dF!#%ouT{s`aJ(cg0W;clNp znX5QeoA;_sh*%odvLU(3tvT-nkE)A&`L*gT6Mu?$^hqqgeVL^?d8OjvNe*wA@7|7B zsd6fLO8GC2nR(l$=Sp6$;xe4RVv}?zd!K4awFmnuS?`it(rgJ^=Fe--m;S~StuD20 zLbH&Qi%e&;Sf;iaN0YgnnupwvDcc!UIBnMXzMcB=(gQw4-QI=kcXgYs4GcbRrT4Iz z!STu>wQ$WxMs2CeyC>Z8`0VuH^ueaG#y#2=6-C^Eb&F35dkb3Ed);nHKJ_7uyFc)U zQizyu&zDak=dFugPt7*ma%OHo*rPiu)5Eqb)w>&+Amxx1d3qnmhHmA!gO_p&S~tyG z#x3o3##xu~c-$J(+q~a-H=Oa=Eg7?A&$`M5)6(yM|JB#Rd1Wdy_r66wuReu}ueN=} z>tfS+@Y1Yng0^Wl^aNSl18#rmR*n)W-@C-amf_vgZneEN6D=99aavsa_Fd=uEANvB zKdso4A@TCcgO%&;(`1<^Uud->wK>f#Yk6?OwWvA&{)qH$U1w%A zY0V!OW{ED3jqbPdBxQNtmAV}8yteY{8{s-;H@$kT##Wc&HZH3m$uh223QYZJoNEqn zSk5qr))hW^z*qKeLDpw$`8&M9Wudk*|0Q(|0tBt=t~}c06(*QcyX-pGzXDykn?8;e zZE6SSDuo;^@u}~)8eq{QeD6e8$me4LX_3l)2bgyGr6gMZE3Pc)pLEyva``U3uEeds z1TU`PxNVnnG>JQUDxdm4mYS8b`X<}2w_LXB^4rBlH>?(E*-l(BUdp4O9+bMyal&a)1xk-X5=$56fO za+#9wgL_YAaQP+t$PT#~yt_u{h^BAR<47Y`$43kPiA-NQD`Pp&p~5Tgj;I`*9G}Vj zd6QGNp2FGRO+0@WxvicT@F@AuCDGFDOLA^qZCtZhnwj%x*q(oD-Z33L#x!M_L)d(g zBkBwX;(k6a{moL|#9}NTZ_Bmp!;aI7Un(uwdTruP-J4&w{Fql0m2kw*>h1Bo$$L+B zEWFNEcW-m;nl2&nHOi~k=h;VTWUZDzz0dLUZSG^U7+=JE`}81>ecitfu8b4OYhMTz z&bw5Yvg|>+(Tc+_0%rT?RC!%|Y@W?2a(|LrsngL3zg{w}Z`JdVT%fl3*N4^fG|yaJ z$}oHC?WGNyLn`V$w%hQ|yt%vZ7`qDJy4?q!zvK}WTGb`_UFM_g_StiEmH9aQOnGL$ zJM!(~q-xfw{}pB!r?FgkC)mocFo`wCqm^~LdHK@d(v25``D}JLIPbJQf8a*h-{T?P z%Uy)8-Trw|Sx_hHqwS7HnOD7!3}TtCT`jutM?WSgs+qaBed1w_UXL?nOSaBj5xC*w zj1>&&pZ{DpW?9B>vsLtI^0YOdUM6Kf{@%PrVo~*~eJm=UE??`Kmb9kA^my!F!@OV5 zPC1B59I^Qt>7w`L)*;3;hQFKK{clSjZN8T)^y@tXKldMVXQeaOdFJW;FciGE?Q$^3 zb0Ou}nXfG`H2>0j+bY=CFwJ$Ng2B`9wS_H~FWQ^<9>hFknH~B-fnkd3zP^MwskLjG z*KPBExb&dx%(e?k>VI#hXoY+%>7Yk)VHsnBfv1xYU16;My6?JrMBuWUpUvzR3~(&+{p-wcSptIxxNH2-umM7 zMrTpg{>=Ef4^4c<9b@^p%92~Z#GHG*!oAQYNMh#g#@p+1VjX zrX`k-kI4odS*G-K;q8)xs_y*BYTDoOZbu7M7Ua$NoRGY`bxyLu!@R^gf|%Okc;)R#`?HVGp?-I{Agp~0xi|E8r!ztDst$5`)cLm z-Mz~W7^X^mOyN>)_5S$d7}ugSh4;6m_fA`AZ~MNZ{u-B6aQxZj_vD|>oz}xD!o7Xr zY`?0nDtFx;gyuTj6}8->IbkEOT{dscUY|Uz-+FK1Duea^_sNPcadlQ!TmE;((ldfWN9KO= zxO3d~@a5%=@e6G4J}F=KHhag#{P(s~7FV;o?dP4c+IfxF_B*BKq5P{pAL_oUQTyR_ z#;IEp-yfwa#c+6K|Gs_v@7uES?^_=8TB!ZtxpE_LS(ozVZBZs~%h#uF@Cmh%=bsXq zaC=2qVBdNz1G6=gnECD+ZS$MWl>5M!!*#>+Z(rTaD{9xC(tY$IQe0B!7?SrKUWu-bZ1^! z6_mML-Ay@##dl4Ekon_ZY8^a%57zsHvy>-q%bHbldxP=U&QmL=@fJ)>of!Dwf12p2 z#Pekdf`0^0PWi3B@yev`FG?o`M45DR1-)xKqkBa5ELZ5O-tfBBFZ-ykW$z!67!0Q(VpS=|O(k2OpvvzVUy~ zJCf(N*OF6AwpQ3eEo_f8bMc=Gi+%KxDi+vB?qn3x1D1mU6Emd6wLp)#6_-{4VwgJJj)G zW4_rA2{wxuNo8NfbQ?d>#qVC6>YJ4s$hYU@N0r0ZUb)K1*`3Z-mGjwgRl}^oa{8%b z=NrFP9rvGXd)&V5&6TnZf<>nC%y9}f3q0ojI{(>zM*sdu9T}ys6+aZx4x3Hgv9wWt za^J(_CAkIu;n!MnmuXMm;n0&fX_aW4zpAld$GpFL;#)0Ki#Mlxo;^NKKDeP>=8uAN z@7Z;SCbys6)b_`1mqU`$56SwEhSrL&r)qwn9_*vj*yT4xIa-|g) zTF)0fr$F8tH1B3C4;EfEi4SrVXB@V4yG?5#e1468+I=C&Fx z*1GU>2g8e}2RGgNQ+^Y`rws4)(HFYUZ+)EvO$I`A={(Z}} z7T%m~uqR^TT1MZ*nyPG%^Vg!T-eWs?qjT{*(dUBhIlV?;=j8MBKa#Yxcl z)wc;gTP~CuMxEx^uhB0d#wIp{@8(*m-bahm;%3H#xW;gt>RbQ+({dNb+isqcKYcYT zRXACnFDVYF&n*zw-^0!>*Ul1OHnCzwbbd_U*GW&~)+Y#YRh&EiBhme|;MZ@{*O|(H zNqOCzAeX*I;{12@me(H^F5&rmyLeLm55c{%&h*aNEm#lAUu*&k)RbE0( zZ?-n^7P;3h4UQ`go$8lnMlTk(NXjwLw)y(vcE%o$7q*El9z8Z1 zlMJ4G_)u*-U2GHMgik&z7-X$jR3z?t^a{Q{nC-o`JN73>eMrlvzq#+%bu)0pg-y2Z z-8rSL{dCZjYRNb9Y*+6&uKgHMJ-I?H0g62 zW&{bDsRv)uzPqSnx{6CK8@t2-uf#(p-6s|V*!E}ra$IvpoZ-OSijRw%+~#C%umAJ> z_rIUD<#uAFn=?b^{S^I^k#IL;QfH^r9#+1;Nf$D6W<-UuE@OUDqM})O`1MT|*Zh}l z*0(RsXi96DXW+ElMtw_t_yHHS$|Za=KOZ;od3aLWLd;O@LfkaZ{nKU6bC(=(ieI`{ z^3$Z=-pTe0cqDuemz-0SIXIJfY0TWYY9@B_g7e$o0ivLTPKA&Sa;B(A9U^-Xu8P~11wgf%O-pTzWYS%RR z;un4y)pwRzOp0NA+|E|CpX=Qb&VMhas(uPmv~lD+IxlJC-=lNq#nuaHyk9e2MnY|M z_cvwd>(1|P?OtsEBavx3bJlkO$F$}J&LOg!8(MjPR@K{0-uWLp7M;tq; zWM6%ob@Rq5w+O!0;y~67dBGp!V#_MEVvg6PNC+Kmtv=1N$@+~zrL$g(`YdhX)xx2k zjCm~Le-;_A)%S#)x@c0=6rI9-nI%`-km-TZT~(_et|yr`Kbeqk+!g#+X7z5R9kZD( zS4{{x<+^+Q?Y##lq_5NZx~A}v(6Sq!UWBdB+LJAO!`qzCJHz5dS!Bb6q`xJe=VRr& z_xQ2SRJbHM=UKAwl(=Tf8$kzIFtYOWv&hqwc5661 zTjJ9$zTsPy$RCZ3de0rc^_d89)V(Rxd;T=?_~tb~gy*|^CDw?D?8+#byy=tEhBba_ zT(d1~>Ys3S%Z5e1*RL%2rr3ihu^YLQYdE~Zuk^IMXuN)Y%E*U0QU3FMb#D2lisx3?ThZ+e{%@8;+C|L)Jl5o>YW zXw&u__FA3=)4Tl^o{j4l%;{5h_@sIMOCgU@`?AuAOV|$g#bRyvbms1z%^LoaKTG!- z>51ge^0j#(%rZ;k)%Tc5cT`)vRcxC$yj$0Y`E88TUzUAHb$f^gr?RY&)!EqmqMf^% zvqG}H{>^dkzGqb=_0+&?0k@0fN#E_cB6pVFH+;8c+ksE_BT^;0UdQL}f3=Oj`_r~{ z5uHoD!`$6UR+g?WziKx7ZQ0`Ut$X(heUzP&t3EZrTsA;SHE;hb;grzVoO3D{m37(bGyD;eX{wW-{)i~ua6RYn#J^9U&9t4+pU-~RQ)ollBcmm8MLNpgetR%{ z_KSU!94Aqt^^t2|vU8Q-Jx6v~PboRZ>|d!j=bTu#u}$IFy?(h|!QOji*C$EJ-uV9{ z@7Dk3UWW^Fymo5^s5CyfRbsbo-XV|r8>~eh9qL(v7Ct^ai=VwWWLssscuJ@0+(Yko z1}S*|5qSIUP|3zyf?teWl~zUF`!L68`fHQTnyDnIOz+lx&D`>A{gm_*dMi>`t{Jb3_jF_1c4#GAfStGO`G~9os!zPw>$fhNxN_ph z6Y5P&Y`O=dpDbA1=Fz)zV}qmK45qa;2l_G|OV8lEEMjGq9Kf)X(frwx$kj8RR@9$# zp3dI){LzGW7h_LBy-_(&Z@%EDM3=&2Oc?*h_yeGfsbYk4a@J8V9svzqd zP7~F4b>y~WrJOaGcI~1R*Mok?)Bm1GbltM?`YzYFqD53~`F7Lddyi+lJR6?Pujqf+eNQaw1^ce=3;J2NG4%UB zV~FimSagcXQB6j9`45Fn%*&EEk}hVhyq>b6VUhObr3Yp6zqd{`KHay*`T9Za&+QY^ zRE=F*Oxm=#YPK(z+ib0S_Cpb;&+{lJo3$7Dc6N#VQhuSB@Up7+s!;synZApzCKeTZ zyPZ)n!$NM_q+7OU*Mw9)+;om%a3{7`!70q;-8b2>H7N7i5ug1*;mDRw`q7h*VyE|Xp>kWj`(|wY6{6DjLpjKL%j}7IO8)n9(@ zB|qW+!Wvb)+rOEG>Q^V9x$|~U^`ng^J|tMBRH#+RykFt; zK=tVBH$?}m{-tdDnCQ_p-E4WwX}U+R$bk9`+h~#@3?DE5_6+7 z&P_h=rs>Z1c2~x$%t-f{d5dRls?aYeuYYpS{QkCZMy?vYw;SVkS{J*Ui9Wl#E_q?t z;U`5KXK{X%>YXccuv)!9>e;1=lMj`c*dut2zuwkLvfXiUO~i%P#e8wguCyESDK9v} z-16)B_9GlT;!BInrruGu`V_E)jpxmjCrR@v9UArY%~8(Hk;+@eEx#}K zv4pwRmg_fvpPFmww%4yDac_Zbg)eOwDS*_z4IRlox3uB#jFqNQ~x}^s`q4{@D6eDO;-!` z<)5zqt9#NfP+IF~lf(N-SFB%XpKU%Qek7-J%Oi#p87WumeWLSE&2qX^_5Zs0_LCPU zdjDL#enZBZ4NE*;d|Q#n_I5?7_QDBlX&*OE3g^A#;i+&bMCrN+)z5dh?T!q3WA$)r`b(W4Pc6I5b2I0zV2!#WbM2R3c;V)GH^uy|-yK`- zT5Pj)ExY5~Nuf`#&CtJ~w@QDnlcr~Q^{#cLUB(CIvgscxny^>GG$|{i?{BN{%PW#g z%2Kz#D35)%{n?SCY@;n-o{9C^sb6dU|8TqOZ$F*9tkqh!+cl;(ElJAnpX}WFw`uu5 zv5yNa=juOmythTBwmn-kS$>hL`G$r3toMbdox5?mDPHwlXl=T87w_-1)$iHTgez^9l@*$U*wQ|;KJhR-UxVcAgJ2GDm*u6qr zE2zih?!8T4XWTC_MfZ7l9d-=pRJ=?xsNb6bRp_N;1#FX5-Y0Mee`D)FoSFctJ zhaEkU?)k~Ap#S{Y)+CMw2@9o9j}4D{dU9{N&06={Q2ZK`*jBw+!IwUVtx8*={Z5rb z(^WacHItKbgHhr+$z{?No~K`UMrf5*+>Ol0{cO8r*5VhD_l~73SKP-km-$RIN5tNh z61uxNHDnxDZ_;&}e2z)M^UHDlkU)x3N{#7qBPfZQG`$^>P zvMqY0CcoSSHd)rjzZbX8@4f07$ni?w>O1dj-}@_VT|L6tbw7)`c3o@RT=+Kgn_Sne z;v+{_8@Z&}-qw5+QQ^1p?&*vI=2THbu7w_2n;w6jw~Rl(-{{Hd)=ajXhliK!{ypi7 z)6=p;xsM#eWEwmFnH)R$zSbrAQPk_Z;Q=Lft2Zv^IlJf08UfB~qr6EuOwtE(m+n+s zRNa$#fwgOORNG<3WF0ZtYkrj*?`=Ku_QATes%fl@5`stgw=C#7+smM=z_vteC5I>&&hDdEXcPeevbe=GZ69eHoIRR!5i4d;2|O;qpwO7={zaDy0M~ zXNwHD}p%mnDqHj+;mxNIP=qa(LITK&=VU>|q6)pU9>E zTw~F)>U+1A+}UK7e@`+v;^Vex^L%5e{Iay^XQkQalCK|~Vt?gEOO~7uJ?(IrCAesT zfP7&7djF@}ZWXNy50XALT`Y7*er}GdRI2``={EgZRlFisQ=0>$UD#_4%8sX31*_{n z>#pnS7U4*{yUypuqXl+H_wEV(-EgeHp{+po+YviM#_ zPQ~I`=VApn#2w==zNzl_;<=HT^i=bsd)Pu6Rvevof8P78`#B=sdgxbOvR?V?Y>d8P z=-+>w{+d1QvHSbPeGbF! zvR=)M8?7>DEx(ASPis#5{`OA1$n2XJ`QA*g5}&$xeXU{j{ED`!+3|i6eloizs@4Xc zXbwAm>!950^g|oguS=C(XnFC`>63OhkL}F6o+Gk0tZK?0iHN-?Ppw$JDtpyW$w@LR zf9YzK@8$R>rk1b&+i-30ekmFM*H*Jj&OTLZw|uoAabYH7+^l65cFI$}|GHsU6n`~w z<@FawWbM9vl9(%OvsRmPpLY8(1BGW1Pos^uUC=R_sG)iLPSo`EA5=>JJ+jxlv1C?= zpywSUw;eAIC!OgwU-@gzw2ntLCT)K`z2kE#PMzBvwepHl`laPQEbl7YdfF-vM%rKU z6f63j;qy%U(vc18ot`f|e=_FB`YD&p_iSB#-9hN$d&Li)uEKj?Zu*(-e_wn5-1g`b zwY@p2W7mdE-qR^~Zjy_6hwaT-YpW%%Wkgl&bzitsw@|OL z;@cecFM>HiA1dBD+MN$GOyW3bT3P1QXDVlw8s?gm9l7S)7E!SHN%28FCDq=! z9kY(?JhZgyS-#e$6*I%a)D`(sA6RRJb`?q2&rK0F|2e5|Uv=KrmfX#c&(F6npLH^rWgre!aEx9$B>6WM=-%{hP8v2}t`R}QS-_SW6?3yXtxiu&rgLUWE? z+sE?3*Hx^}=vmlno$@xGb@;Ql~wiJ?3>G7 zL=7GLZ*BCuJXNoBUDKysIWyLXT+~*L%4ONf6WzEwAn5+vohM>ui1?HiUVLFD^Q_9R z>i=C9j*T)4ZknqXsr+=iKh5&?v_)>2)fdIW+%+a&ZLVHjzBVNLiVOcvA7`;plk^Dp zJ!U=A^eU%*{Cc+b@R_!GHk-eQDLhy-&+$dL=-)SvEN897H?K zLwNq#RBPH!zr0)Scz@Q6&QE?bDvivaTYBEi_%Y>Gr?~D#pVCeDj&1nZ`SW)9{Cn3` znPN|Ed?c_l=gtL>^7%K4gnJY17IM~Z5|XoR*X7O3Q9oik|C(Z}MP&DbdDl4Ir)WRg zvL!!3zdpE0qxcLfU+<;ht^3aBKA7|Txu@sizKpuSD`Bg`qr9io%}Sd6EVb{!?h_^R z{LE+h9E>}!B(SP$8RNT{Lt$IFy6P@{Jb%^AGTX1H| z4Ze3ta*0P4&i!(yM9y=P#l&raZOfM1D5X5sJhLv_&E)5!<5wH3H16{D&YX8mU%azu z`NZGG%HI>J1Ye3Sh-AX=QSIS(G*v5ldKa(m+Kc>C zGm=fqq#S3}<|S@gy3*SupXvJ{gU=>D8=3F+rT&%65%V?<%D*e}mZ!1qviIo)cW&vn zbA4mG5u{?GDeC;nM*ViTxti_#V{4z9Z7W)K@4fofuf7?PRxeLV`Nl8SdZnHFyqi@# z+Wg@*kIPvvL$A;OzUZ0F{lsGry1je6dsEk}CSJd3iLcj<;3 zr|+j_i}vZR?R{t&cAL0n%^6CE`8B`Jx4&D` ze*Dbpt1_o6_zS+rwk)0h#iZxWcXI{T1J_UPEC@HvzgFmOInVm}wi!krnPcV3SSf6*$7$98D86s<8!)&)DL~1-o5oZ%lg%|6W`9N_M@+5go4eVZ0WFx=d1a7C8GK&(ljkAP8Ar|dtOOT_UiWh``#x#f zr7m?r!&itN z*N--yt+sTR$jj2*X(FQeb~ATPGP)R7aZdR8R{xB?E3?-W%-d3U=*iXT*>O|U%o(E& z$H!hwa(uk&&GVC-;V-}Hxg8BUFd_4T&f`a{9oe#nlT_7(wm0uqogpW*)@NNC{8ol!n{MEjY~6rov1*Bm|a_RC(jMH9Z=ov(B4)3GCq zWX_-7qWr)^Yz5zh-v<}#SE%pV(zCTg?#J`mx^Af_u^SE*T5dmAC9cQ1m-#WfxMGIq z)-diTWgoVuXd5p6{dm(=D{-qWmsw|jj_jTPI%Ctz zJm%Z{YoXJ6Cb4@l_Dr;Q{#8?c^7AoS@0)f-_lrM@2wiHvASk+$=b>BBQ$u6trfFVI zE{mS>oiLBvd#}H<(r=ziRvP#Jn*Fz?nWSfaFcQz|T{C}2fab)fFCQH_|Lf6vrJpf} z9%~90pP7A`V^&3ApT_S^YZLr_ZF|7n{%g(?zX)0JAFrRD+bY<8vi$P%BLWw**58=d z?`7KUV{+}pHIBY)i=)-r?voxby)>;;dXCN|j%^*cZe5+mv-Q!bOB2g?DCH*KFjxO_ z%Ii_tN0*hZu64Zoa~`H|Ig=bz;F4Zo?2*+k`_%5Ez|^~Ol}xMkosUGC>Ivmb?(|=M zveeTw%3o7JHX#0l;oqId%l_``4%*hSJ$8v{Uhm=j$(6p7j+S^{wf?(g@7^=LM(QUI z%{9McoVzem%)EzeV4rid|hKXmyNrnRPOTd}H)XQa-JS(DXPRCvFPUUkPq z`{Y!)z~4XbENd^AVUpPU*5%f|W6Hcg+f%;YnsH;%%I)@K5+4y?hYeS*FF7ai&kYbUVZiI_6?Qysxw!=j1QiM_NOdmz4B%o>xNCU*QHtiIo$4Z>Wb|Y-@0`YOyvjj&F6@blFf5a4;Upn4?t)u_>x~WywReM%F7p_)!wVKIs&Am0l>4JD= zt4Fj<`R>xb;_d^Jzsc!;>JsZ!@?{pj-(kJh@=R3KW3!DRFRpv-J+x-M#w3j!c^{QS zx3sx<->%GC$}&rmKboy!R?E-8i}jlRS6&H(6+K&%rpfr-ZfCXqD(`I#b|EtZZ$BrMEoD)0? zW201EUs_d`N(Yyo->`pjZm7?#*|$ocubaG6^Y^noQ5z;p$*~CYy1bp-ImOM`FjZ$q zY+Az(EVoQKaw6*O~qdYpP#$?55m?0OrG-0 z*lP;w?RO5vUV>lTx!U5M_nu#*GWiI{f+JJ7ZpTf^$r4eYZ~P`W=$pmaojWHj@vO+Z zY5L3R#iu1~46+5^^|~kDlyv)+voPb77AF&HQZ{dUc=lJnOZ^SjN|NU+1-P51+&fWh zWYTziNzS|l#mBxbIxplQerf6Qj58{dnRDhzpV<2D{mtWdSdRDQ=x!<0-r;KPTl29a zTW)f4bX>At`qiC%_mqE6QOh#pvsOx(v7%0tvwhm4BO)<5KVqJ!Iqdk#^6#q)5C$sgbOLDF_Y_87li@WNXulYAM$tzOWxK-_NM_S(9rDx^+&b8)z z+OlTaC7Dpov%5>~DW#svoh0KZzsg9 zc(wAiUaaf6WUcw~)){$s``$_1U4Eup`P;i2=la!;J-k(ZemTF8=`Wq@Z#t_PkEAR0 zAIk5o2r5|gLoF^o=J|2&TCdl!4FP+TmOhM;3oL!_@pjKe^U0d3Kcw$mU&{CN*{2l%RQ*)mr`C1OHJ^tl&RKU=H2s(hnv z_cOagHBR<{N53_7f1NjV#V(64)zUU06Owj*>eyowlpE3cN!0%Qt?%YLQnF>j)Hp6b z`t)h@_va@zGQBf?*L8Zy+t=Gxa7=17Jmq#c`;J=5UKQb$E;nCAtx57*ujG4Z+HJq8iDq5fLl-u$ zyL@0#?4@yBe_3p~?>e|o;x(k;BW zZ+-Eq`*#kUkDRN1eY1d&?x(~PbsRljsZB?klONpOx$jG7(9NfJ5A17L5iJ#0$MsGm zGcLk*1#>2!)f7GR#idrQ%ok_z&t3Iy?az;=kG`_Il^T8E%+l_Jo-?#r4H{>d*s$J+|%)6;RERyj{?x)JAwpl^m zGp5awPWNY<`oeWrTHF!;W9nUR{a@E~H~9)B|87Y=*KK~n={?JW+y%02)yZb(S8wOr zyRvYimV+?o{gv+~9AEWpqd`u+{=@sv-o~#j$)8xZFJsx3nu`V5%Qy@7xe6QAe)sXy z3W+Ohv9swHnDeB*CE;Cr?~jhIK7%{+t}2x z{ob+HrpIHQpB`FUm_OH_VZTv+Rpct&{j;M~EOoZK{4>ln%ql+Bzw$|W!PHgHjpbJU zxcaeSYVN0V@9y$W3%;B9oU>}-t6d+KJh^QbBPlvDAwFjLixZkVLRWt(*LeT^dZ5Y0 zq)lEE3TE6_@@L*QtCcfi`diMbyKgURKi#)cj!Eow%HHT3a=g)9>lcEJ1)%nuAu6g^KA?D#+xYtVG^Iu9+RRT9mmSjCxZma0_#i(gWv~bEnje>w1qIzb!oPpi4^eV!K6) zTn&TnCS8kqG%LsRy`SSupQQ_O^ic>uo+R zW88NBnoynaVvB}X2fq|(%d(#?&3=27Wyg$d9Ho1Y_g8gS%z0J(qWVO) zFZ-G{X?x8Vv5D2r((;^hnwibHl-Q$dpKhG=w)Rrx6CZ7%&-t8?0^7FUgpp|KI=ngY4QP=U=~Gz+ug_!?2w5u~U|| z+S5hfyZ+VizK{AP<(PfQBJz5JbBU(eq=XYoAG52yUC3z9#&|oUcnKY*JhVG%KiTP?QumgSFM`kgXB*$j zthtz?v`i(^Tf6JR?Jmx8?bRaM&kj0itzeZ1+uZ*7!S8zs>pZ6&h>}rPUdWkwOIfgS z?OVl#mhFY%$L)VzIe6saY`Murb4~Jg@O_RwP*#7ousv{jsGnqNfWjuF1$)=s$rO5A zW~P7j`A^U5-+k_=PIs@#i25kKuD{~pd%*|1oAxiu=-&Q#?dF+0j6PFttp9UZ$Hh$b ztI^%b;@9tq)Kp{bfg+VzMTX9m8+FQEf11j?j5_`FL5^|eGS}G5XT^Ue^DVjR z-{~jWl9GFW$@Gkz>$O+gIp(c#jfii_w@4SbV9_`EtdvH>%#;1g+-%sM%&9z-w(oUI z&z+}S)xV3|@}G21cGUW;$D(h@#-hMD1=oa(EV@b~lPm4EXr|7zjzXYo&m znnf1V>lb;e_)AayBe-wh##e7sN?YCt6$P*E2%99RD>m0+k&o-P&=-qW-0J+(+*q=z z&-iY$-itKT{L@b?{}w*WJ!J1(axU@DnJ??&g3~A6jcPxsxMR25?Ssl6#Ugp1Du?ci ze$%7y>guPi&#PV~mDntOU)brcllGpo_wDy*$#%NT-ybdc*tBMUdfo}U?eQX!wv!}p zC~bevcKhzD#*&ZARhDkuTP>UEQG8I@BzlvY+@Gm2WsmeO9^2E{^u9;W_;#G=q}H%Q zcb7k(e)pa0gLm=nHDUtyUu>MSQ}W8zFsa!9i7}1 zJ@13yT`}*ezsx56vozXk8K>>8{_g)bcZGScxqii_&6(x5faeMCJJvqlcXzZKzeugP z|0&>H?b`bNx`rzjo$vWn9KKX5Zr%F@dusRX+iv33up@MqR`vP|wPixim(vsNwl7ol zE84xS=W;5qN3!q#uw@HpzYO@Y>c7$7%m3!>=$T#Bt@HWr9IhSbZ5vhD~&b_&L478%zD_fKAQjCK2V%TnJP-_})bI@YZmkrQkB z+HTKPJ)hQaNvlVR5h0IXJ#Sy$e*AfR{O!SVX|AaQ#XxS`{U$rH@_EYn*NLik}ciu1;s4sn?a;vzQE7jVt$x40a zth&PfRsCL^H}luOf4A=4j5&@M7g%mJx^c;1?xaQ6czUcF-kaZlpZ9Lx-9O$3mF}F| z61~y=;XUq(rMmULmUBJ3t$h!~^0@4Lks12qW4SBy5B7(`$^rr3m};e6Qnh^-B)Tju znbI0v+9vw!^~oIj1u@p%=@tFEUTp1s!{xgul>IPI|9=g|it^*@>>H{JFKXR)oNKbU zkM+{331?-q^A+v8V{%l-N5-`Ck><~>XOUh?}yuw4PWe3$;Ru=uJC zC#9^;K7J#xvUrQ>*HxDzPXAJQnRO)hmq(gk#w5X-I+xPAnz=g#=3gneUUPb1$FsP+ zdA2JbHSdg2{P6Yf->=)F|4u6snf@V z=g1emP>Wl3GP=vuDrB32E*v>qKV_=xne`pVLw@o9&pXv`S+w%*y*_B(|Cw37 zwfd3?-<%y2H!~ktYthBNr7EF&_JV!do;Z*r{A-USlab~t!^}k&68`vY|9E}7|8@UEwNB@*zT7Xq(Mb2Pz!I&e zr}TaqNH@#saHMUX;O!ox^kZJ}!R=k&8W(?dj@ZES*kV=VBj&RYJGsx;YKE+NqG!Kv zfxXeMza&RN=5MOY}qzL zRs3@$m#P?3VbbBQ&+|GBtzO(t_LViWR)6+PWdUp00?xbE%Hh>*jyzVoxm!KkR;vHJ z7R!9=oyS7YN6&YKe6Fza(Y9Umt=8L5X~l0F`P2uKx$E66!_u#6&U&;`V?yrLnR?|> z*UYXPEa?!O{(D74u-XH4d7jtna^j0Oeq2<&q_3tswsz%OkGs$NK7Tez5VeZ)(-L;p z;(P7Wd&>0n{P5>n}POU)r-F=cRn@&WpKr$C4_03YRN2cT4E=2=we=K53+-&};mF zW0}!3`+~aK(&Z213LovYTo|sk*vtP-#+>ylCC>}4mpv+a_=@&_yPpf&#E+NjWN==* z)OgH9DSu+<{LJ0nB`cnWvH2Q)pA~VK=U*$^Ugv+l^H)!=?)V=1BCu?xt|xDT_zScgyd@{>(UMSiUmFG=650{PpMA3o>`>XG!0b+Z5F8 z-fp?!T<1Rx{_LWQH_vm-UsPl*ZnjLiNpkDu$Og@2*=geHk2z9)UI=IT!fTb7b#5~A zt|wxFvyTLy@-KQj&Al|N>$X{b{H%xXo6o!`nJ*!C!?WD&S6|l5o~@6zq|Kco6R|`> zBkQy8rK|1PcZyQz@2>RYXN=!YFPJ!(1K^NspGJT`YL;gOy) zk4cozt0{3|f;0c?is|l*XVt4x;#-z@9^Q6gi;|+;zvH{q6st3 zY_ApTxotV>AiUUhSD~ck%P3veSK9IB>DFs!?Yz3$$0myZ#+$i}MW-I=tco^`Tp(Qh zlH;&oW>>n}OX0fex?Lwy<)6>nwzPz4wdKvCW4B6JR?ZO#U$)Uk@bM81FJ#&4d7Avs?2mST9e-cwvvzE_ zrWGY1&1zjU<#>s3^M@#rqIuC0E6yI==5SE&LCBfcrkPK*Y&&}0r+=FJy>oG*$BYAx zZ{v&?&wsuof9*A4^TO$8H!+en3(bK0ymxAM)kxLE7pncGw-YnPqe*k3%wb$`s2 zGmCP%r-)C=C{J3&@>N>6Bj~X;JF{h6oyh|>u>$*ODe2RvOE`DD4p@1HBYo*SU!A6= z#E*A=FmEOM26!(DyT zihUIt2ai^W27H(hGwRT1JBIntg8a1AC&Sc)0 z^Z8No^ApuM=l*iY|DM3lA1n07wswxf{lbaUijGwGUD;vy`n6^J`gO`{Pv6+%$7PT* z;r5lUZ_eC4!d34iZIZq+O~6K0hkPW2heGQ>nV6JG`@KN1o}g zmb{CN&w}z)W{dw}(wu$!UXo#8eBnWXgcB2uzS!Sb_@I5wVTBDX{4W`dUrZ9JUNk50 z)D2k`hAJt~4GR;*jykUV)T>Y(7k|LS+qYv{W?FU@?^z8m!GM5$BIVm0_fI)wu+}Fr zIZgCt?(y2T-R$)}7tLZ$C3|UHUT;vd{=wbp?dDIVHw9n6w9)j$^izFXN_iJlyLY|~ z$l2~!=XXxzPB-W3>ZSb0i>;QO{rRh_Kt^8iZJ?%&xf>SuJOa<2%HmmTdSzaxsnw7CgVjQBQf#C}Id5~C%{HH3%oV^eX@#Eui%s22 zR^PMk+%2`LTx!t{evhqJx9^)~`Sjk=ud)j!yJbDO_qC(v=0*EmI_7Q}Vtc)M-3nu) z|C=&=|C4Y|%JcPPrFovpbG~G0%g0CjFW7PMgsrTBN|HaTWARx|=`L7u0UnQv%V*z!=^I-t(b;n9(| zn_o5fI~@_Z#vOcL#ZuoSuwD02D9PNX}m&%3LYtmh*QD^Pl$Fxy$=ZmK`!k zdw=}pmDf#T3m#ZI#5dgD^5Nse$sH{+ZPlw*?zrz4m8YC1CvB(uSH3POyFjEh`ee)} z{m3~V_Lp~T&&;(dx?il_7a`pDMV7s=w`K3!`)c~CBw_toaa zyL(S%?`{kI-09aLa3w_W!vQ%%p{meL?@F#%tM$x2W+UDItM{RmmQRxVx0VkwwI*wC zYummtxHUZ@IJ5Nnwgqn_`~w&xUiKc^)FoNJ;gHPjeYT%}d0manQ&@CP?*8WaJ(o7~ zUO9O|%<=Gd|CBlQ>Ru+x+;u7!T;ho?5L*05q^#%0+q)^T?B9=Sy^;QwaJ-N+>l{a% zi^}rtdFPTpO26lgz78rYiV56Z2B=x@z0}fyIHjpMH#Zcy|2CUE$-Iq zi4X36-`V%#m5ezUv!n1?pjtRpU#?g{K4z_W}=aIkDlARYeW58)>N&s zR+S519N1!N^jYUJmEYk=7JA6(H+$NYOH9#H&vWZ0A3PBE>xbie;pb)zySBU5Z21;< z>!(W1FOT9c!v8Nb3utUp3fNls`1Iq$r_amp{{QFB-?h4OhWvTVXVPt5H?%sqn~sa;vT^=;AQLL}u_s@Nm)-ezL$&J759ShE z8b5rVVBuylOG_#G&o$%KPj;lb-FcyDcGH~s?=7VZo65HC`1kpoa=DMA?46Q@krkW7 zp8a|iXxms;R9#V7abZ%q7x%~5rfwk{J^%fSbbq{Gchl|1JYDtq`CBKe1Q%O-g%q6h zd~*Hg+qb!9_w|Gx@@<$W)7=@oXnkGmo9jni?>}0xLSt25=hD-xx%+$r)epq(YrdXz z-eTGjJ-b)?EtK9}R?h$0-#IgS@`J0g>QDLKdTtUpB5p1eFB6#^+j{O2lU}Z}T43+C zTZg`XO#S})=kEM${#_FGO8!j|Sg>y&ha{3B)@Z5O4pR4;`*Rh4i7wdfT+4;NM*>@$CRP{@6Mo?Phe8P5xI6s!g7HI_53P^ez=H;8Y; zv+u!gnAdMid~=n*HR;q|*<|bZ$xqpr8*UX}``Ui*x_?9u#? zdFmUUymiYeB6X^_dq7q3y2|Gd-nq`6x7X&LZN{>??=|mND*W|n=GirU>D;ty^@sCQ`?>RhJt<`_y*he`j z4j+|WNA#zM=_gK;YPqI*#&a6$2F-PkHa0##Qhsk~Y;cv7L)Bf@r>RytFJ%uL?V5j+ zdA%c7kjw|3Yn8VHt7m_hoU=Wr`NY9T$FJSpASKjxqfW^{Q}RIjFYju%>=+Y4UrV1a zCb|5Ny=ErHzgroQ^U}(7@~1m0FXz|oIWniF|Eas|Ou^v%*`gCFCvlyNzyHRdEpLC1 z*vkl`sp;;I7WTwAeBM*#r=7P?^uVmY%9j^Z@JMA&{`95fjp>%oujyxfCjSe(&(ry# zVd~-X1S^>}b6!o}euVSnGgj@T{wnhs->oVObUXf~$dtEXQmo9DMVE?ZPP~=5fS+GU z*tOc?Y;3Tk$YbGeTn^R}uNF>oT$sRhd5y^7(yomLGYw}=KJ!?+yZmZp?WTL$33q<& zpJh4M{7kn^HPes6r$&D=Z5hI~_BF2_J>;6FSXAvDykX}QY0mpwj)uFNLiUJ+2Y_>GCZr<~!jtb+1Ot?krx} zCBC}G?bt3hA+1jwHVP;1z3J`ibZL@R;rwx||4VQC20y=g?*kvJuNeqcCQj{42&`ac zn)dP_2UEr@!A8;Jc0UfNG#)(}Jw3-bVB%hjb*GcHgI|y+7CGPR{&#S$*S9Q~k@YXSL_t zkULuZ_WrzSe`h8?6#MOFUszrHxupE}r?>x}#)rQVTp?Y+v%IqOS)BI_;cEe#gt#Rh zl*L9*_>kbMEq>JHgCi?v?sbpPQYw;{E$75p@lAfRYfjpi^uqnOCh`_Xt&WmVXFVEe z_;ge6+__QzqrKmDXkAXdH2Ga=n%S@Q8;a%oWcOT)Cc7hcbsX^?%&$UDJ!A+B>CO6dj$!r z<}B;2eZ2qN%->P+Mh(`F+v=(kcWhpD)zdz%r+M$IBbg>Hjv5^wiu;A;t9O5`yVmhG zW!2|DS^n3|Io2@l32hLEtp#A(r~g^-!g2my_w!ksY7e$5ep<5V@$}hl?~X@axnr`pbH~~X3!<(!G<81Z?&Grm zQRGvU{p9Oeo>LW{UOt?5Ea+ykOWaY1xW$EQ+bXU-`nvk~^4W94cm5Q=^Wc!j-l_;T zHaXQS4L?Js?Q_90W~<0_*vu7O@{dpLuK2lB?PW11W?r5*aTDX6 zb}|U+k8>Pe#+(Q0i!bw?uC6hcky6rAwysvfQt7TXj6U>(H-|$<|-* zUj4lH()#)DKWeo7k$RYV>DcvWu}m^N1^Ev{bgb6=dU>}~al7w}_gvCtv$}5YRpqC&6=%A)?diE3`{O}Cm~g_Z=dT~{ z>~_`D*!bpZvhGJ6mFpf+tXXs+TD0nk-m2OO-xpsjySJczBmazqm{)(T z?q^(hRygOJa_0kG+pM0jsgXTq7hS6EY!3V?Q}F)G%Bp4SQY-Bi{r_pDX1`mt=W40M z(Vq{5+fw{DRY+ZZE;qy0s-QF0M>*(P;Du9H~UT(L-wtcc!z``Rd zrm4sqjK7RT~x)06ryE^f4IbJob1)8_KHf}b~`_VzZd zkZ<=h^^eK#-oJ&vM@;Xw0@v+^-EC2~*t@(&p(&nA6NH|p~P}x z{p7`;nsqm}iQig1W7k8Y;|7nbB|b7&o^XhLVJ#=Sd|v9wxqEa@ua&WklUtnsp16p!n?__Y8>#?5q{Nv1@eJG5_lQJi9^B?B1nWZ>L1>h~?>h-?Jp?!wtDbx;0zv zfB*mc`2Vl3f4;x_#kf6D)%U}km0^2prU+a<7qENv@%Gj6|F`~*x1aa_(zN}XuKqne zcU$?@XLq;7h`ApS*FRivW~cF6xti;94<60P;yATeEbPm4S?2o_3(Mp5S8t!1ld3T1 z$lc4AAHVzm_xIDP^5U-*yQ?3WYUIAW9erneNyTKDH}78gSs(rX^>zLJ+qLf3d)|ue zQJ(Ey_y6DDxUZ5s7H+kEY7=lzUCY(|HP5~_#e*lfUhj&&w7_e(8SB}=?nK*$bp^~W zr;B!!v;7P$xL>Yg_M!38$z(gV2bY?Ess-3zZeYzmr}LHdMCYMvJ##+3Tk-A9zn`z4 zzCXS?{-sO44Vh1r{a_KbH4T8 ze$!(7wxgQCX3qw#>s2*%H8qpW4g0hoGd?zAN-<$5cVm;>x&4UepJ$u=c_!Chon9Zt zJe?!Y@y>jclF~)Y=e?)bSh8Mp{$T5Defq(@E4c~%yuB|hOQ-8}FnoFHZ>RaAzvSDZ z!adz=tIAmlWhYnp#z?QXf0HM_>XNDby891LD!IG%UeTZa==#+kjizNydp`TGI@yqu ze&8C@zPDM7X?91K*7RA5|9umC%Vfr$>1;_VZsB(-ULJV2>-e!*47JD3%v;P@D(Un} z+3TD12QE+jX%{~qHO1=HMe0ZE zE}XgCyouX(qF$hE+s2|7|7;dNEZ(rWP5R|O1I}s24*wo##Hg*5)|-BCZWCMan-iMy zJKd*lGt~R*Gx@YXTTF#a{oT7c+Z=>pB<0V(Z3tiT=zrB~Uvp+rIcWBE7$;bRROg`t% zOA+t%S+_3c2k)*|OKgg+7SEEd`xDT&uz%y8zf-*0*jF(gPip1qR(n71-Or5A-?^MC z`V@D&e-2mps@+wyr|Eu(bEcqj(SpD|7lJn2zLo9k*0{u<@vraI>xW)H=yO?SwB|@Z z59?D07eDn0@{mROi+r9ym5B*S>DH*vwf}!P@Qq_y_ZEN3X;D+xd4dcehvCYI&euvnqZ4PS*2Z zrL%q3Zp!5_Ub&|1z$X9gze?wAdmjIBsniYMrWq2)e0vH%-86CV@AF~1&vaIF!AJI( zML#CiJczQty6En`$|vV$3)q;a`zw8GPw{=bIqb%&Bj+Ltx{qfv96aq+r2Ti^@y~A` zKfb%zjiYG)^XR_;;ooD_LZ$h8ZmB-uHh;9zR#)s!ev-E$CC$a^WQ|{wRMw&UyDD4zzA2Y;iL)ImaxMwn`PlZ8 z*4hTa>xBl_WrZJRuNPQ+{@)({n`5~2a=9VJ@SWh-2(<+y+_x@xXZ?5>!2N(LwX$s{?L&+cVa5x9UEr?>pAz&>DN8@yQam|8>*Umi}C7 zJexT>r1P}rp`*?EW**U?FmOT^yr0Q%wsqmAjslakA z0Ywizy+@8#ml=43KFqnj=TwuB(1kPGH11yBFmFctfR~Q7icHiB3>UUS6?M230 zg+9|3w-x_#)n4!RByQpbF{fQk;V;d;X5Kv-bfCH=&h?O_P5hFL3UiAt{k^`HGwc(om+P){|o14G8 zeE!@WSMVvsu)p|8@vn&`V!=+Ql5~&Fy2aVIMCKbH@ z&kH`xzFq1o{N;G4@1=&sz4NOVo_=zW>r~FdrYyr|?psE4ZhU%Il)Zem#kE>9+2-wQ zIW*@nr6%uCyX)~kNs1#Sh2eq2*F9Z!KV;vlOx@cV_eHyB&&4BrV#kEt00vl*Z4`a=iHb(x$VuVxeNYGzg)o^Go^J})8)K0UWY?QZl14SGFJUK z;x+YK=`TyBcf7hPlKj=v`9tFi+G^&no2X}OF>_b@+R00%J3SCseMoMFxA;kqtoiEh z9Yx_^q-)C6++JoF|JX0`l*jUZJhQDw$-BoX{M@qlcl7LCk5KXxs zGMgFOJf4XCp1#9G`}W~u7lq93xo*jQHPQUSvi6sa%tW|O~zc+ zX};PfmI@{pf}-|bKQrOqPp*QBAhT}G_4CWh{ckb-^Q%66;`psz)q9~fI_4AFv_ofY z4^>yoP`vNwGV`&ww07gm6O$FadXgKOrUa>%X{}0@n690DO>5nDrspeGHdt>k;IDez z)B5oA4?+5sGdu#v z1%hT?oxFZUm&`Kz@>{1DZPOA%&TWzPOH$WL*3Wftn`EX`TT!*+^6!F_DZN}hoUMFeIh7yw zRM%ap`mt?;twmjm%5}D{(^o&4`6SFDao){9h8_X^51b1YnI7FEH+Nz2${E{(uDq^N zW@v8gV<|Ddzh>5B&fgQOx7IJczICIsaPfhP1#?A%TNOH(-yGi)x#po+2~X<{;cS>t6%pwX6^$qghcF%gt z@lCm^J|~ft;a$;mv+i)+3#`AMhhLfSLD@thoTKG)pRvL^#ofW>d^`*vSodUs$)eUszwrVre0T{qMB-g(-d z67h1akgosfB~@Qe2$#&;`J%XZabKJ)uhOkoDz}U)KGZF44Y?KH5q@`j*V1!d`m1s? z50>4|fB5ZrCf60C?xi2U9{zmz@nwD9?oFl{3Rcs;J~C+w+t%@JM*hF5fAja3|Ns2@ z=k$0v^^2?XQhM%aPPf};Gbix;!S!*E0&l#Mzdiq7<>dc{oUgq5E!f@#&FOsl`ul&O zU9YEq+wxk*VGU#B9o_uZTGt=@@xFT+e*Tu=kM;lmtv|lMJbZsys?I~Xrm(5i#~Q5d z|1MlmS5Z;G*J-T+aIci1ER?`O#H1*EYO(e)+TB{#6(A zI&06j2)kT=b${#R--q8lSGM0IQhM9fz}{PV?^kz|bJzCHIJ0qv+HITVqW?I*7`s%s z^RmdS;yz+4bm3mj61|+VbcfBm4pW5c>*D#v;)cW4_b?-7v6-xiU%q<+q`;wP(4?p&J2yTn}V zfuEG`C1s(NM|4*uMjdOP#*Xoa16YPISu$4122>tlGh3DSJrAHMf?>fjU zJj-HH)z4U2`7S3_hmAclnrZIA#(x$IZ2d58|H^Xir^}aj#x9N5Y)G7_c4>Z`-26B> zleH(;=T3+dJD40C8EWgWW})A|XCHrt1zSjE-Tb5>*}E&GP)b`??a%td+OxZ5+;3X^ zQ{em$x%NoxYNl$ppduiSC!QK`L&79-1Z-?t}WfaSop(>zT>$) zdbb5!G9BfY6_>nPcW_EWi}#1SP8OQey1w*0E#CR`x6pzGN77~`FVKc(EmVkl!#wQN~zP!ux z-}iU=Y2D+hGd6Eg)?N4ab`tZ&h@bH#EnQ3b&gM_O7_c$(s^vq*#{ZZ8M{iAwlX$EB zYHCb|Ozff#(QO(v7iwI2OZ*P4EMV2=T3~Q(!*s(t9ql(CFJPQ;`i1VgDT2mybWMx$vbRGk-a6mVT52>yc$& zGY=QY-g@$uw|v?K(K}n8Z{9sI<2HZDpPK8QYvwRb$ax~O>v6jBg%ctR3%GmLr&dHi z>o{tx(`DOq(ST#mT-BG$)zeM{UHe>QEiJmpLhAI3TkXonHtXD)cGr4+R(Dx%vq{eX zl_!hKdM~DMeLr%hDU0NaCA?A5P z#(qwC&jbl7lg-6Ca=vkyMLip%?1bNaDl?7at*&C7p@>Mx2p|95>} zWW?$I{Q*;+FPr7_fnkcTK9BD|iG^RRRwuAQPm+-8+QE}t5uwX-eY!+*u zTu~myR#}D<>ZGeYYv2=6=l;p@p@} zie>KDO{g|>^X}udY@HwA{BEIDVoI9k`u%*`yM*fPmg=+42%>rDT>XcgzNk|4K>=j=9VC(T(qbL|7UW9%JwbW#j2eLc0|rlG0@tEW$fyoUS1 zZI?PWyZ&3ldL`oKvOOhJ+P14nEjj(-D{ zY`R#VuKqoH_Q}U*e=ZAWX1DA;TFttT{b7FEm$rR&rylF(pck^9etnEn z0%Ih9K2>qy{J42`vD}XGH^JMNx`yREes_J-BblRpviolSi~n(BcYbK!)}ZJ$E(){q zFT`kF*3HxS+k5U-s^&{3FP<;m!dyJ2Ig+ZK2M&I16}6uA&Dx}(_Oz6Q%o)8d=ZBev zI?MeVrdo>so_qR=;qt~adfr73PxQ3deT%CNO>eDKVCI|6mv}<;LG{eN3QJ~AR`rlQ zan0eP)?(AG`!qKOFa5ftC}YNF8;1K!7WBQi`ruxLNOYnabBO7j+X1(NI_?IZUNGUw z@0db+OIzi+&3tPr4Z9XxRSlap>s0BVyN}f-3(E89pF2BgiOP(tbvw>+9Bg?kAyu)L zO=i#2X&Wt8&pdj&BkxXr{}H(pSN{ZDWRzgqA+mt;+$HrJg@5ZaE2azf7X8W!moDNw z5qD??qjm11eRr6*^Bf9jnY31_J+FP{)|)Rb{A{bA>~?%=!sYwho2=Cwh2Bj2y*X&@ z(anx;1y1rTy?)~J>({Jn%{Z$VUAC-?Vk(ps+@^Gxcgh0&r5)$E9>(y`_>wm(Kj~|Z zEBASWB|=}X&;ICIyvIZ$_pVXq;lK0xqdY%O=e}@J;N$0Pg^4=zPp`Oq{(GUR-?RzCHV;n*B=-K zX*b(!jee~pHtQDGPHUaRdsufp_RMGfp0>0kXsr=5|8d5q7r4Me%Gf@GrrvNTc~p(-?Xh#vtVD6{gS`UFP~-|*xcG9 zv#MBdy4znSfO~7ZEq|OpU6^GKjG__pM|QZ zl&_bVdP1OpU&*WRdHKJMvUhBQVpbj&J9i~W+Fwa%^_LIgE!WLAJg@5z-tSmxc8hcL@zo|0ehT+mSAsPb5Wf9@Ogr{yn78;?C^ z^}5F3c-(c*&h4K4%`d)ZADFRjYyV8=2Rk#^=Kff{EaFd=th};An1}Su+LKePR#xnY zi9D^ob?t$#wPKEP4Q%VqUo>Ept9rEJ`|ZP4GS~N;Pg-mIL)Ox#;APw#`IXn_F-z_W z%)iAKw#c%ev2_Ap*>XwM8R^eiA87Ag@nRF3&y|vOFK!>aJBK;WEY&heD0%AVT-$Xs zB0Kb_w1_Oo`BhuhePf5=?hli1u-#tB^(Ju3B=z}5GuT~kbWQt|W^SvrUiNeKmp#G< zq*rY-ycqgM)9vaO4ITZ(vo!K9&3=5y)Z)nhVkw5%AH8;`{bRbiV^RGV@6Bz$RF`d% zU*euS;nvk!*AK$C{xP^WOrN;>7^7=b!ZLHOfJ3#1#WWmx7i}6h_|Ws-yfC2fyrj>{HObbE9U_Z!UqyN471wzEMSSqsyFI zeR^5#54HOHW52y%TrkzD?^12onZ3%F9qwJ5V7%&VZp2%LO&7na?qzs=Yxeh9y*2aK zmGjA^9-DMyyMSABmqFP_*86LZuh=@LmW!1~Q7@SJ+Y+gz-wv>3$y_L3RHdR4fAw8> z)#Hl?`^s<4HT5g)P>WUPiL6jQZum~n*U5q}_LWxS+r9%S(I(-}N!)MeFD?|HmbNSL zSHoRP;LFP&EnE=+W!2xpwnvw>PT`;Odv`AH@5#@W@3q*nt>SW7!Yz(7y669h zxaI2I%UQqh*ZJr2_4faN{QNWDeed#B(aG)8-j}W|^3Ys)?Y`~(%>T>Od%u`E22b;> z{2_NL_m^adGjq4pgy~mZ`Fbwy$(Ly0{qbsh{JZ(<_P>5^^<@6Pk5`%ARanQ#rl(dP zUVeOb`~36u|G%IAZ3^1Ejj+w6PuZr}a8_v5v5SL1M4H8qE6>D@i@TR*RE%ey8t`)A|(E%DWVH$8p-R`{}!)Wf&yeRlDef-AY8271ZZt-{4A9b%;CG?S1ZfUmp5#I-V z+>d{s{N~B^U43@RM@GF#dbjp&nYBz;ZvNKZxV(TF)~g?^+a00x{R`J;1OD^&^&fxU zez0zD5ciJaN!2mh!B_mx-LVSbNt)D=8*m1`o3pJqpXha zl~}-0^KM@JyZP(i^;%oZx4Zh#HuTWKzu8ZJUO%+y^?td6!p}_VLQ~c?*B>kM>O8yt zczyT5y^N23C|14Yl59J!dHz&wdD}|a6^j@C+uHX0_}qhg7o_d7$((k7=Ov5q1uO5m zZeiT@?!nf2=B~p6lg=>Le5v@iQS{E)`Ky9l5A0^>K6v6mo$}q}puYvvHA5I`KGjBk zV7Hn4;nvOwVZkQ*T>08p0fnVZw-44XUTOA?aru(hpKN!f*-M;UJ%4TGMZJCduQVoV z*(XfolX${#+Q#?V(lfhu*ZuqW!`{B^|JUp9>aXNyUrGMVeDA|$m*vgePxr^v*Z=(f z?$^hO7x#)SJ6ZNj=)UA~-*>U-V%e((8F8+A;?D+cs`zrVCue;??Ww-v9sl zw|@6^Kdt2-y}wAizfWIRx9ZeO8E<4K{a~BBmcQA03R|V`k;Bu1 z-SVgWhOGtIRqp%v&AKfg*FV3r)Lq77DHS(k?2N)ygFE zcEPqXk<)Xo9$WjMZ!WjPR8Qq?x=$Qtd8jPhar#17`}OVoZvxlpF1Y#dj55=ixsl6n z->!~Js@lW))1Uv&`Ha5AO@FRObnL1r-ctR%<-Iv--K_ z@hH>Izx%>7Hu^WnHN7zGTmEU6Rz|nk^^hsAzq#gKcitgxcK3>LWsbwXP0WNoC+V+G{k8Z7td4w6?w(*;p?2tnRi3XZ|E)Cw%|j|6qo!dA=gZ+ zjAF%3E!g{mzmaLz=B|dqe!1X1zlH=lbVsmFh?(7#`JK` zt`?Sgw-nbap8WT^;lypdwCRanoHFir%5f?72Qcw#L0MjJ4{)Kkon6C62Fd+fox@o^rHnsE=rwB)|&lw@~_Wo zt-Oo6uQe#OcDz#(wfJ^pjopj;)#`q?TiKV-^G}#{?Qer2-}7(p!zxVqino<-*Z*#F zT-RO8nqNk2>Kumrh6|7G>Q?do-*=^@S?~La$8o+&kemB%LsA9r-k#zgD*oZvSvJ|-il;d9!f(wM+NvEt z@pZ83^g=h$dPlSD{ZSLxE+4(AmAR$*=_0P>SJ$}sugT{-$E)cVsPFyihq1|riBb%S zW;?^Z_Wn)hiGwkEomH#Bt zVgCu;qUC?rO6CP+FJ8U+t#-nLXW}w1Ht%-Z%@SW-xckoJ<+l&UmPSmIDbeVOyt{qM zY|i#`aV`IVU`0MR4S@i-*6gS+MG?t>&_`#gn`iwXQLjd-d|yRoxmstwW#R zbmiTBGGX$9&L3R67W}oW`5pPrzB|tA{ko4<-%=M#^uM-k(fk)H`GfO#o0>nX)OBa( z^;a8?&t^9WvMp%R<$CVWC}a17)y;64c3uxlS>d1i8F=y^Rdi5|8`Vrv==w4IzLz>y+i77=Rdwg zEj@$WsVSRpmgQW{JYqN_vTMymt*@S!IL>gDMV{Mi#8{Vl=T26l52KScqj6!KYm=H- zfVI+Fv00uU!7$*C%nzwJ2x$v7yVaoSM>pY=aI(pMCf zpD}**&F%G_i?e?&wyNT=?=;<5daXxV>~VF*gTp2Q{b4gyYHoRInS2uX)sp*H(D2&% zhg)s_d_N_A=pf5M7T%-=oxKuk~JRmMPoD*GHs_c23ltlznn#^&^hcn*+Y@c`+w#+GDr( z0@=%2k23!H`hE58yYI@rpV+%_&$Ykn{vF+&8#GgB{{}S%x-CKK)q~w;;+Glnmuu_3Hv1yZsCl+Tb&1vG z4ex(n{r+D6{@!^EJ60Uu=f?l(ySsQn?WZp`ljJ+U^ggT)FumpB{panr84DPFc4!H{ zt>}=x;*dHebyL)K%_mICJS^47shmd%7D1y{uPR*4%!&)hSSL zS3%|09XGf`4V>1`&tMCiTkw9}+|AN)CcN&%GzZGc(t$dCKh5;%QUX&M3Kd&%EycDYeVdR*|pQvfh1T z{k>+bY)D<^{T;uj-`;(8{fa!6yiEJu7dq-Tp18T}>lR7fHSg_~$F^GP#jkmI?eh%D z-$pl{KmKQVY>Vv0_7Ii78_L&jRd-D_R;&8{%%10U>gP{enwlOp`ce%=;ncN|jIm>mAmGIZEE)`a~7F!*0D0KcCvx3EIGZe0#@RxpW zTeExD`9%)=(-U@H3SvJx(>>}UQ#}(mOBwIO$34CIrEOu1d9kh0=MQQI@x3@M;rG1i zu(-*Cwqq+ir$3Jr*gN^$?l~e2m$rYBeC$5u&gbP91J4u+@)w_HC>KxJ)7SZ8(xTMz zvsD%q<<(!`{`&QM>$d}rB{#2J+9B(6`h|YJcEzrDzuvw4`K)mHSx4LS@;?F*@5^@U z&Snmt8ym3cWlG-W%2OX#O?P`d|L&apD?v9w^@^R;0oLXu z*7G}!MXxaCpJSeXplau?dodzzoZ;^n^1eAIIXQ)>#xd+(J>6PO!)531((2ETpW5$k zfB$`Vm#c16+M)Y*?$z!7FD`qgO?k$>2R}qN?vLR7WPHxJ%-W9ez+vXKKk{N7^`=y( z=$q!sFS}bdhvCj%*52K`>aM8|`F9)l8y}cE?Mhn1ycw60 zDkeAP-xUApc@soB21VY|NNv$F2I}bItL!o$sQy z9A5t6*YV5!^1Jt6lAf;a`{rbW&yBEO)j{bVAvSS;zkc{M{oC)Ot8B_13a&QoWjb&6 z($kc;X<=irNrU#S#6tfVF?G`zcD^mOU4J7Y*6R01o=jQ(&AoPqJgem%DZ7J*8f1Mg zOh_yL{rYL@_qXfo@4x*bkXO|5-|pkPckgcBEq8r9rJzjLXaC;IkM(_(H{6^O&9J>e zB6r1cCbRQ9R2vgZYhSI*&FbZ0zj$-ihip5>oWD_r&(H6-uYXr(w>RT(c-o`2jt_U$ zPj!s9Ne%6i`g$hqT@K@Wwy47;3){D@@z_40hHb}h!~B_!U1gW{Uf`;|qL|q}r#`#n zba626`K_G->(gH*JU9OC=O9*X$$fsF{FRj(B_A~fY*sP*QyO0R=RsJzWL^0z8P~5n z#5_|yCN!G7i`?^BBK)1r4gdMP?@acIZOYDx$hb??<>}>1)AH5fG%X7j5ZRbD*pQk2I1hqF_^Y8C`^zdck z_XWD=rS~5zpHx&|y8hvVzi;OhMO{hC4hwD8M)X&y6{p15)Q&#%Jev9Es$YUkywF~7%9bY}7PB??o+*EGa0kT@xN>Q~ja zdHHPRw_Nv{P1(u5J^SsQ+&g>s)O@d+x8{>`&MAYibh)OF84)WuSGZ3;cl*HI%S!B3 zF*);7mSiuL{vx|L_t?Wt9BIN`ZhsX|8%iHk+8q=YwJ-3p$>T@yAwR#qxqCNfv7hv& z6>(>Rnsx-wZxdJgH~VF2uIqxGt3rIsb(ef!mKka_e}Tj#rIr7lOqrv6sCUi6#`4Pz z2UFfp=Y1n%elp{*TB=a)y4%U6b0QWV{oO4!{lw$>`!gdR7sb6=_oCb(>-VQ+4?kr^I;2Vnvtv%!}Th32#)6|FTuB|DR^b)Bb9WJCCj$RKC+GG`)KTo7_QT7PcMg zT%32@w`%1x&$%}9$AiUx7z@6hv~z!SjA2iDLi{v-t(tLw4_E#H>WZYBkoH+)+OIMO9nmcglf=gy^bO?IOYl-v9Xeq4Wa# zhdBq#S$Y(9PF;T9>CL5i3OtWL8gZ2EdY;I_5TzQc$nk`cH{&-uQ)B!6+x?FxeR*~> zc$=a|)QV8qvI=+B8!fLNPPoT@`l;2r%k|%lmW1G|O1WNO-00H2OHWFCYjz*^J^bR@mEDH+ z@5Dp>Wgi_&-@81QM?&~_z^OTLn$=A^BI8Xb`TWs+8?bBIwjJxArD+xCPAL&J@Y-#$ zIq1doOyfI~L}yNUJ=wTwb?`39pU%wlBbhfFtbSaq6zI6A{~yb#liO0B?9<;Cb|Co~ z>!yYSOG2F6EVs+KIfxsJR!L6mD4(}UiizXTI!Dg`mWMl7xf(iyk3=r1FMXta@NY** z-h#lO`0B6k91HYcyEU^po?d(Y<+Nw(R{eKd=vLNp>$ByCzk6I??Avy9r$f1&E5|3# z{Q5srR(Rg{xIC@m=jIE&bMme(kdWFDz$?Jc*TAe{-LcQ}UY2w3!iQVEf{lb`9Qm#2 zF#QrQyV{8hi;pDvZ#d2U{Z+&9ciUcWEuTbI;87;gMq|Do|q&v;|}MNj~B1Vs?SSh zKm7NhS8;xsdB3N}xBqgFzl&Eeo!hYXq3@PLBa?!iQU)yVly@9E{!qaEVlewx_o%4( zOXtq>QA^X7YDw(8q-PLa#eIRZ%Ev+Z^17-^(@uQX;Eh-zuu#zU?U{yoHd+tF+NM&&;fIS8XaWwp}Z7>qFHkW&a=iLEh=f zbKL`^52fYYH=DJ4`0t&=TjcXqzqhzNGg#{RLv7#7Ej76o&u_4odpSL?l>U74d?tgu$qdKGYq~P0 zuHXMppx}Is)PuR#E(tulWBV`j+0Y4Y(3`eM(lJ3SZfJzwj^3Y)>WUc}FcdVw?Q+%nlB-l1KRo8ZVL}o+n5A zaL9RX`Y>FsBYPpgg3yBC?1~c%Cl+#=Ud?CRDXx5T{f$?TzZaOxY3)qB_#|c7(ocPJ z1+FTbJ{WoMjA-6lIa{KPkI@85YVhxKHv>)ITz_@8_&4OE#7@nI(Gs(M>p$n3N#?#A}6EXZq8K6K7_*E&1*v{9fT|p?r9% zihr3SZ`1sl()rf~RO~Of*B35wTz{fYcZc_?$j7`hv%)6tSbSk+$nop@Y!B|d?6mu} zwJ%%ii91h4Sl)4)@>x1cNo~B)l^JSq)?z`#q@ttQ{N3T#g8BY_ZR6?}m9KPWp1!D2 zN<~zA*6Y_SAKo_2n)0q_Ypa}h?jj%lO-GEAOdfWHuzWrEBVUhMh~3=CN86~Jcj2ym z&x^kPDymA(sJPXWS!}s&*&en#%3{}E^7V)QozL9!{F1Nl{G*~P{}`+0GjH7eaiw$q z7S3q#dpxs5OV(@ct*$y^`nCP&z2B|u52BAxBn1A~9$IH@8?t9-a z%8p>W{QG@aW!|r1&Q%*$t}UOzxVuFB&>0uza{u5IC$)#`e{z;B)|$dsC(te|mDgc$ z_m!$|j@NCjch_8>&iE|1S0{zF{C?At?x#MIRs0fMZzWb8+q~Q9UA~{a&r-K98muqh z{tIr`S-5@jQM>ygcV#yUFN$0}Pve$(R@0TW@kd{7VP&i4-=I9>+q92-do`u_-@bkj zvtBJ*?$m4n5m`mgm1ntTu2`3B;MdN!ZvtCE$?j^mzRIr^{_;kbmsAO@%;AI$$E1W%r8%u*;2lWQVFVR)llKuF;zrEbn?LK>Ne|Tr|*U@}IwxCU1cDG?}*OJ9{+S@Gy zgC;&(@MMRC)DI;o4-bo?KbrQ=%dS~+y`HFXL3FlFrox`gBcDr(|0aKTzEKqveoOXW zUHSUljE3-F_7LVxA@>wma?DmtJrVPGuA|~^K97d^yZ1kgnU*`^o<0sdk># ze_n6DOBTce(%8>;Hd!y}#~s{C)8=d<#E(&;P$`_x}H7 z=a23Gdod*PZ9|Ry&9l!PZ*PnI_%D{{>*=Si#%Bb6ghiSe?yLJ#{oVPuQTh`()*rXU zT%}#D-x<%_sw%Wy=gRWg=DQbb6kQImI-;c@xBbGLS+@W9cx#M!eHNeJ$Defb?p9qn zX(KfYuYfB7`YU6E_-^t2`T6jl{-Hz6iyyatc=G?I?cHs2?_XcJb>eCBzYX{Qey_Lv z8*MKoXrW|aEOFJr`1c)w?G2n$y|>)4T~gZTk)pFz9%r`rK}zUEG(a zeJl_Ee%}1P=enpRm#lI&R8I8d-|&Cm&ySyfy`Nh)ZyEcw_v{RZbFA`rgw+a7-PDxT z`1`8gZktUHKfPJI%7eL9-A8}Te8ww>oAf>Qhm5J=;@>?fwJC^$^Gx=>OXAbk$H!|l|>Pe)1e!ILxg=@v$ z=+(P4mTa+^vhl>7(%tr#wyd}K|Mg3}|D*F3aknq5o>BMMk=eOCTlCK5i76XyxaGI6 zjmi2PbZg}^z3218E*I^bXk}txVqo&&{G|iO^j>V%NNuRzc;w-Y$D3!QpD+YTXqtYg zV}8S*eNXbTk-XaB_h~vZ^PPX5@;U#0TJ9Bd69bb1PN^LYfq(3)p6GRy|K@*lxgWlwfgp7oY2gxP}9(>%~ct)J%`-+O$i&7^w zPyM!7`iI1I`IvULeSK_v8(2@Qu>bS-T{g0@Z;FXt> zkdl!4AuILcufE~Vn%bHz4r;Sc2e`jF z*>-wgntIyXcgNnHNzM0ARhXuKI;=0%-CD@|lv-td`$IQbXXbc!X0Fw`!Ao*n51;*! z8TG9w(b}LaM14)7ziQ6fJc|$OjD9}foBAN;$F;X9P7y4^*7@7O$XKl#@Wsvtq z`PzZ?JNN=bB>$)f#w|@c?8wMkt@NwBI&aJRr@Ga>A5E?{yQNF!GE8LP6#o##pgqa{ z#}9!5dtKvI*Zgu7-exAfpHR0{w!~jHN%O?B>sDvXrY^a#u#54#`>ziUCBe3Cjr+E< z&OXL^s<=pjMeP2QsmopDe}WR3y6J+A(r( z?4oNn~}-)fWrF>=QiARMY3=C)YJIh_-${? z!p84c80_mer-~e{xU*mF;ml7p=9X0&1@RZ1suhpDwuoE$Q*-{IBNB%zeJjqp?Gs*a z&;5>jRZNb!*4?i6)u;V`J#2nAOM2zbNHKvs=R^KhS9VW&Xj^Qjy+pYZl)rMN67o{K z4^*0khDzRFe#205XLVRxvhFeOb%`3!JF8+#4&?~04*633?~iAJ`_$Q@LG_1TwM11| zFa;{g;2iw;B6F3Yy-uuiM1;Tir$WCMa^!vlFA5yT|rCfb?dV_*;m}Q$XYOu^|BIw&6dfb@9GU6`#1fT6qb^{C|j`I zXu4Wp3a`=Rqs~*~-nvixSN!F0{RMBgtIo{xU6|$e%JyEzggQ0V4+m-guySR&|(FIy#*mVmpc7=<$FFgHbeFxWA}#=D#p*$#tilzV5qzRbBmdfoZG!versi+1UC3O1;DGzF$I<%GurZx;kuf*-`vPex38@#R2ej3tO%@sKyLwOm@4_Ux%c?h~ z#wRf_u#0%QIELuv{7`$y5Y6Y_q&-zvXVZm$!TwW1U2j!BoA8`#dcW^Jfr9z3>LWF` zb>-feFY$&y{gJrNt}`D)vfi_^+ZC>QZ~|0-SIlMG#yabHeBT%5N0$~nDlPKy?p*A8 zTkZaqFYGb#96RKbJ`37rc{d!A{0b}^3`&liuKYg1!m4o`%ENooZ=qqKRo+1A3 z+w=m5uW~P0%sfSv%ohIgIsSaoGvmy(6Gq@#wBVqW#Dltn$D|kW^Mb0IHJJ$wzh|Yn z{km`f1X;5a8h*1%=XcnFRc~0<$oMXMmgGxNCUIsKU(?9=PCRFiB2@J(Hntt>Gt-tp zjEdR7#i6;)TqUyK|N>_m+g-IF?-M4Dy%JCdfo!mi~!+( z8`!kO_DigMUSKQw{@p9rAOAl6`Bd}u|Mudt)4k0BJl_tU{JsCpw?kVSrLDc}msK^)Vf7IkMsUBTH*n5q;Jo9%z~5i8z{B*d<=Jg| z#VTi_3&Nh~Jdj0qRW$!Ms_#9w)aZ_|v&jg#J zHmOlndamhSpY;y!48FbeML^lil9hW|_WQ4O=f3lPvn0$C1?8EscY;rub~Tsl``o^~ zV)HXa$La6PXO`@&*4nd=Az@y|MX$iKg+U2>yFsp+aX^KOgTTlG;+GeXBp#r{E~lkHC>G`@>c~-|=A2f%zTf9}0wTeGpV{d0$>9 z@f~8>1eRx&Ki7lFg?1yUKRcjsoy*u6i`MllfD(`%X_bmAJ zbN|9>u>0g$L}n^axHxZS^28ITH>A5b>(Bq%le($re)>B*rOGB-CAs0b_C1@Kzx(TX z$`c@gr}BZnSMDM=f5`uE?ISO4*%oj7RlQfO{Z35g6*aJu|LqPw5i+*yMthEhO_$;4 d3lIM%{YW;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs2A>>H7srr_TW{uOmLz|z{J(z5 z>ebpWy>{J7^}P0|HY|;;Ew!P=fyqZYYSV?5Ne&*r7umj?ucrPobC!7StjlWpv*rl| z6;&~{PB8Pd6cAD{;5lu;EIA{QZBLKww&UF?(c4nq?k*`UUHZR!`5g=6ZSLPHE`F-v zYd7AO8u{zxzkT0-+OA#_wN}V9cx@P~V~5+~i5^Fue|}oDGkCdQ>gJm(SFWtEk?TJ` z`DDtn{#@)`eB3X@%4M7)_$wno3{C8iqXjwqfVEg z-^G)*+M7&2E!uswwY4=sLxii9snKC!z>N9x^+mW&rWj2>T_~f@acI^SHpdCt?C);M z9DiD5xiUnGt96Rk(-$vR1g-R08e}&6Y})3VZ_8#ayP8$ndtP&8t$Ke?&yTGi)Z&;MjI-)m{XQNbmOD?+q>*4WKIudk!S!o;{U zMsK1=j9z$nxVWRhYVX5cVa{f==gyl~_x*19{o3z$|NZ;tq9n-Gy6S4y&X{AO?i1RY zRXjUgk~ZJ`QuX)W-{1K=9=1v6?O3>YadYB~t&zM<3M!L5_uscSFfg#SoqIN|uuyPG zVdLyyckaX}O`PDNlAD`rUG_$RCGlwd3cceqjnn1o{}j&kbH8k|PP55G-o*EH$*$w_ z^?%OHG(O$MQ2El*NucH6!GkAHo-Eqg)91#L8D{RXGiKhLIVv2BcJGc>n;cuSX@`dv z8#}xI9E*jQUuN~!D{)*}u;OagT)*;1M>-E4JSe)Bts{8f?{~ZF_RoK8u|-^9$;*e8 zaRM#M?tK+D^WMFCw^Y#g)|0qkK$mhsa;1OO;mQjSNr|0 z)4~lVogcr49o|{|{9g6@z5o9Gd-*am#)u_TcG7rz4ZT*{_v-fJ2>Fl$7{QUKgrSBWe^eNgY6VBxr#k(^m z&uHepkG=Uk{QT*gZ)R=PS{t_dXwt>^-;X~oocDZVo{(eIgsiQnKG)dDegFOUXwt^0 zwUe3@baZrVzFrA_et!P(UmPr%zNelRX-&1N{Z*nixo~HU)m%TRUN`536V5;PRuS6a zz;Wr6iV)}g^Wt2si!N$NcDgu7akVn(@iuKSI+-%*@s0qEl+8Ci=ARemV7c`2OIE8G zN7ELDqe&B=|8!7TaQWql7`^hqRm@EaYdx0+tqjp>byA#u`lJls@h@M#ym+Cpj=M>L z#c{^jXC+p;XVW&nNOcf!SpqULa%R}-UKgeA?(Q8*98Cf&3xig2wK7TeA1~f1qsQK) z;Gi~nWr&v1&KSO4)k0SR7DWyxwaFiC^jC*y$sA8Kj$mb;<0T#zWjwXb;HF*bcoA{o7TGV`SLD*`^wuKsAT2o(rt!h$O5~S%UAawGmcI4Wy z)mO8$rar2a`=|S_2_;GCwMJ2n(4DLr0f53 zjjm;x;Lu+hv~tG=p-va2i5Xj?cE;%aoRB)-c>3vsx58FmZEbB0S}D?hoYiqfh*pK_ zb-qsTfXAXb(@%$LP4!!T`DKZTulLfR)mOD9dQ6MkC+_LIG$>F*M1kdl?2o{O0Rk+J zN)tcW=yN#jjM1BZTES4aJbRLdiV&ygBo)striGvcFx6>c#I9{0@)uv^*tMt2WXa{s zfG1u{CwZuZT^D3o+qRXH(KRq^_0^<}U%q@X;CcMD%5zf4>Z>Ncmrd4&t$wI9&1_K>6P=^^^Irp94~xWup>f8tox{sTCm>qv}k9H-z1d?-lCl~D+ARgpHvazbPZHEb$Xvl#H*l{AuB_;TAg;r zoJ-rx&CUJ!^XJ2d53dYawSRy8${^(o)0j9x6`@YI#S>3IwVHb_$85Hb+Tx2V!d6F4 zn|d;Z=dgwd*Q{j^|G8Z@x${v^o407^AEitM4yG*)&wm!})Zt*N(VTwTd+DSQt)~`! zk1Y&(B->Vk68Tgw)p^ekzSwcXrY&Er`>5`|7m1$_o9%m%!^*^UX+elq;`z-w+~34q z12?QPn%Se`xiVx`fQE_?=L;qeW}Wv-FEQ9hc}gXm)$CdoqNU==)ub@_q}S4*tx;#6 z7TwG-n|=0^&3q4)uA@pT%;NrN@UCXuzOVN8x6G}#Vt1EiZjD+S#$9eX`>flfC2orw za~0yYK59%V%@kl^{I~audy_ K#1y3pEG*Q%{ZV{OUTY)X`D#t3iLdo%$ceAEg^K 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/menu_light.png b/docs/html/images/icon_design/menu_light.png new file mode 100644 index 0000000000000000000000000000000000000000..93ed38bf6785a9f9013cc2ed5fb75523093a7eac GIT binary patch literal 28415 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 Wce(X9?kEET1B0ilpUXO@geCxCmlDqa literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/menu_palette_black.png b/docs/html/images/icon_design/menu_palette_black.png new file mode 100644 index 0000000000000000000000000000000000000000..fba096f301f9b55744bcca8247b41d6d7ac98380 GIT binary patch literal 3291 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4kiW$23787oeT^NoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/menu_palette_fill.png b/docs/html/images/icon_design/menu_palette_fill.png new file mode 100644 index 0000000000000000000000000000000000000000..7079bda6f7785dafe49f1732cf6edba2f1764d23 GIT binary patch literal 3331 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4kiW$23787oeT^NoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/menu_palette_gradient_medium.png b/docs/html/images/icon_design/menu_palette_gradient_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..a806adb09dbb454937bc8e8be847cb6abd0ff104 GIT binary patch literal 3334 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4kiW$23787oeT^NoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 F0RUAYF2w)< literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/menu_palette_white.png b/docs/html/images/icon_design/menu_palette_white.png new file mode 100644 index 0000000000000000000000000000000000000000..8d7ac41e5efc110a65d7ba0c6ec1c1987813a907 GIT binary patch literal 3166 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4kiW$23787oeT^NoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_notify_alarm.png b/docs/html/images/icon_design/stat_notify_alarm.png new file mode 100644 index 0000000000000000000000000000000000000000..1b01b850619d2030e952203949d29eaf22dedfa6 GIT binary patch literal 1035 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=GU`JzX3_DsG(#i}tvjC}KbRbDcUnclzh1@DvmM3jSs} zrMBu01A`UqT`7(aX4`&E(P!o4ThzY7!DEs6M@o&$-3>if6w1@FC#ex1hhqle)UPinX=1w}1ck%_u23dH=WX-}iGa zS+HTlhjYJvRTXArtWZ`|e3)Ba{{8y`mDJSK@UpTpIafEgS&Wl5Y}hb&#flZ|YuB!| zb15w?E#J0nTim;M@7fM)+`M-$kDs4E|J~cSf1l_s|M)L3Ha2!?(8_tsmoAkoE-F${ zRc$>`uB@zFRv&jjpgJ({qIJ#tvuDqq{PAN)WnJArrY|;c-n@D9$-C)-O?PK!Ajg)d zx6iL$y?UIPnK}FN<;&s5#>VsCyni3xGDGh6%8MCqK78SJ`nqVrf(NBVMMc7U_Vwi6 zxpAX{ZKlwE6|1@Drp})2{rWy1FRy7|Utg3!+i#BPnzpvFixw|tJ;j>RcJ{3A;aj(6 zv0l3$6%kP}b^7%1<=0=&7ZVr1FDETs%*qpS2 zECTw<$-t^pxiiqy-nJ!9mmd}f~tI5q>Tb7ym(u!f*jvW@Jk95EAaVokk z4op~UG1pI0Mn=SD!-1?Sy$`2&``3DUddlCvbxUk-=_-HwXK&uTv21x%=i<^bODsGr ztm|sl)LFBnBIDx3x{ofZ`8oUfp5-!6JC*-!@spp_+}xaf!a#UiN^0sw(^uBD-)HD7xVwqQSrOd%;>7- zk$m#pxo>%vmo8m;6#R3_Vs(wQNtWk@^sIHv1g>1ZT-?;Mde5Fa?JY&~420yrJe=4S zA5n2fR#x^=fkoZTW0n4v{B1uLsH}Lxw>9c-@4C%5X3d_Rnw51*pYeR9zvU@m_dheA zaqfD-%#gDp$26*Kl4IKD$W^OWvGfM1sjDwtz1sWM?b}mzynTF9&MHLZY43V}+SuQ% z`QQh+k852;+2_`{_ioNjOMA9#f3>f|gGY}R^{wntRFR4MW8{1BGK=l2ALi|%<~>(g zFNscQk)3w+OvK~Y2jtp5J+5RjvStglD`UGn*ZK8!PcLup+@C*xdVO}b-fn7YT5F+u w`ND+)=HM%*yxdoB|6Bh*?BADPiU$}zocM8XFOy0d0|Nttr>mdKI;Vst09(!Q@c;k- literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_notify_calendar.png b/docs/html/images/icon_design/stat_notify_calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..4433a16ae5b5c8e83ea9d3751b28b59718e30233 GIT binary patch literal 533 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=E9hJzX3_DsCnH`TyUZc`c(bvn&I5PhxU%^8a67U$3kG z|8HjCn#}ov$LNN<*EPwZ|MEh1opsPQroEs6W5Ha_?4E;Eb7-c5aSm(1eFuSX4MR zvCMYep>zECWc&Jm2~nRuKld+CJF=|s*O!+GR>sDYHM||t61TEE5e{%W60WuQ^uy1b zMJpSH)X$tb6LM17LYMI;OL&3cYvUB}3Ek>FGXA{Y36A}yJ2)bpyyhrGGwH8!SjlLa zo6H;)6%}#wMop7(>Bh~Qjo;kd+wbiw&ukT!qn3x!+*JJ~O6>%{; li&R+;t2^)WWD!VUsC{nGagJ}5BLf2igQu&X%Q~loCIDR)Y@5i`hh03Fr&*DmFE; zX{xX>1vaz#TOfH-;UOp>Qzu#=^1Q2(IX|E z?NNcnHHkLMYZ)eQ&YU@O;!22?=#E{xRwdv0nqcr_>a!i!9vwMyMDKW^j@`qD4--=a zKDnQ|@%#7hSebR@4GIS?{rF+=V39@H?zfnU|f41tWPYBRB@?}Z4RQH+p-w&TU<<*{SBE>rW^j8gr zr`zOX_is4%GivR%>3XvkpQ}5w!CxcJm90r=(vhR$Pm3aT9G73VoF$gSQCpUU6O=5MFuoSnN%crKU{`$t9dGnZd?%cVvcgowRMV2R0j0$RNZ6_Q_aClHD z_w4!eg9!!NLr>@~Bt=1$uzDJCY?FlEdB^Tv%Azb)*& z_PTUM*y@tl6aKes1-p;Bu$R>MdZt8%EjgTF66B=K@n+$>Wrh0E94%fV)kixR-e-KT z+AHUyCS3SeSbu5w&75!6Pje&~pH|%|S~6+Au2}cEw9SIwnY_NY*Vz4+V`Q0BvS(iV zuHqDhMu!E3B_&_P-cOot@u#Wwv*t`6CQ*ll0U7ffH2&`Yzt*PpuUG;D=kqkn>fejX R7#J8BJYD@<);T3K0RRq5e=7h0 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_notify_disk_full.png b/docs/html/images/icon_design/stat_notify_disk_full.png new file mode 100644 index 0000000000000000000000000000000000000000..9120f00375095442f0bce4c97321d1c84273de11 GIT binary patch literal 842 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_notify_musicplayer.png b/docs/html/images/icon_design/stat_notify_musicplayer.png new file mode 100644 index 0000000000000000000000000000000000000000..fd92c1888ec4496b58e3ef938d0dc9b074fe885f GIT binary patch literal 771 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=B+5JzX3_DsEi~+n+6MC{m|qKIdRFkKUY&>CIwQ7c`w0 zurG9eG3mcT%GvuDG#8%~;Aow+GQq0kq}&c3RlcPKjoVb551b3w!N+NKqrhCmPoPoz z<&w=QcP&*eIH{hQ{B-&9_qFfa@60%x_F?;R=q_jupgRxR=1K=xv@@G65WC(b32ySz9oQ{p!ka=P7koM55U*k<%n zAYopo_s_(2wb$+J&o>$g&vOkwmp0k#C@Yts`4LkIE#{Y-YFQPQ@01nJvo3$izePai z;<4GhJ9g}9IQVqIo%~HJr2~IotNJL^*Rp#Jzn{AR%Om3&vz8YoO(nCq*1zxReYQ0D zqQXjnb;d`R-DY{B_)xU2Z(;qN_8-+Y?r%f96VET|7MmjJIDO+MnQ6kZ&qB2s_H-&% zNIH~=I2O$n=~Rl;IL~C5QOxsQC0g=q*O`a&Hbh=}zUx7yT+3R4n)~f9ESi3ph_M-) zg{EDrnsonJ*uLZLz3}@&^ON+Tv}cQKoAvIl_|R~LJ*=`diepb7 zd-KBsAuASp2dG55yjs$rv5DX6^VggG#xLHLDb8KO>iQ|C)@O@Su;Ip{xUBx=$rcs$ z3QhL<#+$ugT#-DwLgb2~ZAI4l`YY}4cI%}~KEt%IIzY1G@PaqqPK%VD9=o1=L7?cGUS^Fk}W|2+3px99x&bKBP*`2W4W d^B;!+gI-IYrzof78wLgj22WQ%mvv4FO#okXW&r>I literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_notify_sms.png b/docs/html/images/icon_design/stat_notify_sms.png new file mode 100644 index 0000000000000000000000000000000000000000..b437d5b7720642a57e35a2da8f5cf363ebc61921 GIT binary patch literal 526 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=E7LJY5_^DsH`*wm<7ofXFfbNnCnDOkA3!MM0AyjW}xA zYgwN+cq{lT?E1kG8~ceZlFM(d@-HT*g9lxY+IN1NcYw3gJoi$Tx8`4mz4Nlq=|A87 z{GP^~^XWhGIzKS~vYudFlf5;n|Mb(M3ah!Z%y(A@)~pQCx|U*8$)~tUr~mZRO{+Ax zM7Ua4Gai2|7`8fea&6zu>%Rqpw5DE3+Q>02)p7B~9a2WK&n6g19LU=qth~EPf#Lr5 zVn(aEd=`C^J8o{{o%g&oIrjR(`|sO-8sxKB%J3<0I7vwKx*5zrzw^o0D%q;NatoGD zS8}N7vHU3Nc)_{JW73o;#-lS?cj`DZJnL2X{Z}sI`RrvsA0EB^c3SsB*TUTz>5GJT zHhepqdOdCP!)FD&daa_xQ!gl`-rO3uzW8RVK+K;Ik7==)Qew*<~>Y-=c>Z=X5c4C4@40_fr%k<9)+I#hL%iTBHt9NxLKm6Z+ gWPS4FVdQ&MBb@06Es{A^-pY literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_notify_sync_anim0.png b/docs/html/images/icon_design/stat_notify_sync_anim0.png new file mode 100644 index 0000000000000000000000000000000000000000..0edf69200c680ca7dbe892e9c7bcd0cdcd31f496 GIT binary patch literal 1076 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=GWIJY5_^DsEi~i_~}%DDgjS&CTf>+d3qoH}wW7B~22N z+f$+7TPSZ6G;gZryeYfno;9-De0;#F$(x$#a>~qi+nSr3PFubEZhcqqyM6MV=+|Q& z)5;cIzj$G>2pm&KtSL$%Mq6)mtP(+?{)i}s4v{m;pgY)({t6% z+zqkXo;`c^`Oog{+sk!0CQX{;u{O-v>SS(vTic0~Cp-E0`A=q; zT)KB}p2Ds@drUTR-B(jnJGM4$`pukmg@uKkskNGRcJs8fwOJV*>SUKLU0PC8<1=yM z#3@s!x-ML}u%+07UuL!DoXL|Hr}3|nk(G6A=dg7`YADq+G(XpVto!v-+C!b}Gh*@`TZf@_LJ9jkn^xoNa z200x%$aTnF!iYPQb8qG5yW1Eo9h+`M%wd}6qBre1hvQ-1va&K4S8Wk4!|mxObWXG` zIwE6nV6&L8@@8)T9pV?yp5=9Qcdx&2KZ%>0`;boY63Z;MO^JLm4b>h@iwvC zY})o|UP5K%PhYh&hYuZEv0#D2nTeTVJP$lQcGSMuIpNHOva~ce84gZP$G-yQ42&5@ zGwqHr8Ln8pTG(7tT6*!rhlzsH4;cKNjI6D#Pwl+ReO|DC;zYr~mz`$LR3-7cyFi_aS&&Ri{uaA$DlS}O0 z_AOgFW*xGe!+vgg?2bi?nD)l(-o1Nug7ACxPx7{0DQnlR&99c0l49X}#QySzU**oq zf`Wkb@3t$~t-H3tym!w3jndN6N~ZVUH_wrflaq6jOGyj~nbNs=)!yaH-M>GbzH#3^ zyZO?oyyB^%+Y2qDEUQH2G_SZMBrG_gW2WM*FI-+;TH5>n+UIOZUtiy>Z#SMvpAUL@ o`_`?0Z+ic~|EKy(@c@I})PVbIOeJPBFfcH9y85}Sb4q9e0BsWQkpKVy literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_notify_sync_error.png b/docs/html/images/icon_design/stat_notify_sync_error.png new file mode 100644 index 0000000000000000000000000000000000000000..3078b8c56af578651845274e0204360e0f311858 GIT binary patch literal 1146 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=AwXo-U3d6}Rq$d3r346j=A?Snc%;wm`w@66OU5Ssimk z&UPrhI_T{n%lXRn%O$7k>kYMm0&FS$xUPn6O~y{{8jscTGY}R|$RPUL|?; z$)iU}F%c0G|J)TcH8m~!`};#HI<8&69{%CeC#Lf9@`8ebhUwGAckJBRc>1)rg}wdu z1%h||{QTyprKj8fH}S~ITIHuUc`rW)M}Q)Of`9}M+q}y!OU$GN8yX(``0>Nv=JDe* zXL=sCE6kiZ(`rlD`}gnHfB5o+MP6Rs!^^Ab)vK(`!u)*wn3$Lg2RH2B&%b^9_JYz< z*5%8WtG{^Ke)6PebL@mSZ{En{)PMi>Elkj%rp6}2M2hR~Y+hz&<_9lcaJ09#Cz#D{ zycXi;q_rn)2 zI1U{;q+n|+d+pk_2QOcCiuSggIN{;p=eMlVRO*6%b<3JHI=uIq!}O+qW_|wr`R79$ zHyXZp^QMM5C@6@@ZL#3B>(>=kR9Yr82)Axsv7$q?myMsFzo4}A>tfp?M}d0_vu|+Z zI7UTD>FDY@`up?0dHePzgNT?|k@q|wAD@Pxl_~rlLc+oe7cFY~y?XU(1ABY^^XJe1 z(LK)hu|c=9yZf>4nPiq6bmQ#*sZ*!UXFm8tvomGM6wN8qMDj0QeSh-WwP|-tS(MIkc6@8qn`?99 z?%h;3Z4s`2|0c4rvU>hqf3zyb!NfR~Sut6+>GkXEj*gBAM#rL_KYJE&G~cUuDJk@1-;L)Q+XBiJ3JUC(YZ0)nbtOBjSu01G9St=-b=gG5YYCgWc zjv*l;M~)q1`o!+$<~HNt?c2A_!i4Ozva?nFJvyvi0u`T>9y!LNYM$DQIX74>yQ<4skHNuccjNjC9mXUeRjdLPbi1|!=w{PD*CZ5erucm5z5ou{}4}N+7_$T3<@4fk1S(g?ZExTXAGj-$I zwYd_9|7h>CuUA-DzwuuGl^@)f|84*G@1Nq$|Iens$Y*3@$a^@~VH(5w=?n}E44$rj JF6*2UngBekC{+Le literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_notify_voicemail.png b/docs/html/images/icon_design/stat_notify_voicemail.png new file mode 100644 index 0000000000000000000000000000000000000000..658fa0520cae598a61005f6c3f33b11e4e2e1d7f GIT binary patch literal 655 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=B+$o-U3d6}PU0S$8Wr3apd#Hwkt*TFUEk(Sg}8(&eD@ zQ3sa#hR&1!+WrcDSLfTz%Ug3q`$rUyNTB0|6O)gIzq$Q3>qTNo+V?iu?+>`T=FR-I zYu~DO-?Ddp{>gJc*X9rN?}KuSF1|Sbv*zFH5-Zyk>*hRl7XvSMJ@dU?{<3wl}Un^uWi8kjtzI3um7_rWUEU$*1Z5 zp(B+nlMX+0h~7Ij(T}+xPy|gd-|4(edlAS6|C8G5>A2$fVaz+3(WHwVo;d z)1?wamc%AS3eLWp*B+q3@}zFUkrRKJ&!!2dZN9l&<|Fo&u2B+A#7Wge^-jjc1U)0(K5jtMaHrPzM{ItMg*^{(A^L^A-smSMtPCw1s zee}`!606dfH=L2*-50If&v{~5*=5g(`7WLEs&oH*ukXCaD#7sM+DT@C+PEVO3=9mO Lu6{1-oD!M literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_notify_wifi_in_range.png b/docs/html/images/icon_design/stat_notify_wifi_in_range.png new file mode 100644 index 0000000000000000000000000000000000000000..e9c74b481b05dc0f21ae4af960137fa4dd42a7e9 GIT binary patch literal 1075 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=GUyJzX3_DsEi~d#$}BQN;ee(Yx&%-JDwPEcMX77LXNe zr=#jS&41bl@f$&(&YHhvzvX-SSy*(?PqNoncdhjPsJKS|}PmZ|30J?ZX= zb?Nhy<%>&7WMQ&dd z^XFeadD6ni&)+(K-aMrnzh};zskhtF$jHbpCO$s=*YDrKK|w-Cj~ofe$k1SAW1F;o z{d$hJ!@O+Fxw*L)fBmx3)zP`|yjm5;w%+1@|Tj}xK zxw2MPR!aW<{!U9*7#JB%di3ZKOUsSvDl2y`U3&D7MoegE=z59U`4Nk|wr(|@EgBOO z)A69;{lUgbChLP%u5xp8V_R#sZ_%Ph+|$=EK6}9}?3f}WBjaOdXSZelet&6c>5%Yn z_dE7MT2q$I-6J+ANcwC ziO9S^*=>FaOP4O4AEBPVknus@**$yrYO1KTT)K40WA)Xp zy?_4HXzA&Rm81y;=I5_Z3I4ct?b_7J%1W)Y%dfwDDQQwyQws_R5XjBTyL9D>h^eXR z#JKh1b=&0)RB9_LGwatBuzF4D{WN*<^MA z_A26G*0uf%ryo36@Phxm$wlrSu@}s2Obd)8oK=1ud{ebYeZ!eEXBd`!@=w{aef#$Z z*4@)0f|KsvyQk+Ckes|Y;`9YyA0LnYzF!L$E{tEjdiB|W%9yW_Q!7jCJ}EIgStW$xt3$s7C2 zS=_gsJ9o~+z(65QrYVuXZvRKKW`k!|_V)IShhrz-WM&V!z|Avj;`jM7Ewfi2jd3#G zy=&JI)>id0LT_urZ)2Bt(RlpMQ2mf>u~q zm<}Jy<3ooJ8#YC3pMB7ui)r=Bm72+KK3A?xyKX2FwNKD|M(X^Xml}TWf4<<@&6_vP pZEbDi=gU0V|8x3_?F`Hej8}v{O!Md{Wnf@n@O1TaS?83{1OSk1{$T(B literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_sys_battery_100.png b/docs/html/images/icon_design/stat_sys_battery_100.png new file mode 100644 index 0000000000000000000000000000000000000000..d280aebb08bd18f8279394b150780faafee795a2 GIT binary patch literal 738 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=B*yo-U3d6}R4mI%Wtviv0DQX2r}_uJ}mr%LBP81CPvW zN~&L<>|Oq7WqE7WyQS6|!m%l1N{pOyz_P?K>uYdpEKhs3&;Cs2$AIy*6b3VGUd(tn*h}g)rUw-{vt#QPR zNyoTB(kbEPEB`_l31jwoY^L?A_ujW;QZ7Hq6~BnV{F>LJ2%QrPZ8-KUcyo2n7l|G_ zkNNQnT{xfc7s~8^94fbU{&xH4#)14w^OAes?pPQ7Esas?_3q`1SlM~v?nVdij%#5l zJ5f^YBDVsXqPN5=62)SRHHrPdom@ z`(vG)++EHsi@99H!=)FBg`AJwE@+-y8k;@)ZhR6@7HUcC}(72I1^UttZM(uje&uI!PC{xWt~$(695Z9QtSW# literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_sys_battery_empty.png b/docs/html/images/icon_design/stat_sys_battery_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..4a5e99e75cc6ceb68dbb258e424e3cf5ba7aa9df GIT binary patch literal 1034 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=GU`JY5_^DsJ5g^UV=<7pXJeZM-|%`dDWy`y>Wd#i=n& zE4_nVT%B2`t}1w~di+jxi*R{f%mjxOfqWhc>-H8b^ySXdSUTymv&a;SPGLtWEv8QM zQl<5K?GNucyROhj>1xo!3lr@!)AqcteP8d>BJg3Kcq{*gjvF&~h%I5PU2$&e2c{pd zuF7)EXc22LeW5EfCA%Sg;Wgn1w!6l&lJ1{b@nn(n!-&NTGrt{KJCFDMse|F)7THXj zu)-|HLt^fq2)q-pn*2#sJkN?P8@hHBmMkmrjLToKb>XBi zbz!a&*C!{l?Ri|DvN9?uilybGe!Ti!r}{bn&sbFl(~SoY$-H{{e%ErlAdZMt7IM!_ z*2t+`?%vk%H<>$N$?d$GjJtApJ3@B9Y&ax0WBvO7H&6Moaq4;{Xk1eXWB#$wFui!6 z%~u7@^IWf%A8hO2y6N&|w!N<`m;|JMS_ZhQeJZJ`Ye?B=WZy5nMquG}`DIs)8=v!O z@lKLn)U!#!vnAY@nX}q)JMYt?u1Uo}}$sCV`Bq(#1q+<)nEcAZw|H3`W-rVHz${acDm zKZOeQ%sV^#vgM^Zju=^XJ3ImRh{=r~Pb1>u?{D}Q#pd6As9V=Npl~zGwHogRi+k#7%RbGvzbCuF%sXv0!#0-( z$7=nm!j{fC&huvK)nAM++ns$?!bRu$I_X?fJ);!!IOWy**n1`-ceLAs+If<+KSno4 zxBL;9EIsKS`y6TE4L_Nj-|RJ3m~M3Ux%Y4Dyzpt$7tWc_zCGg4b>>M+FE5aP%aSJH z&v#e)U2snI?S>lbSBo#&w(9%OEj6Cmy&&^$Z%<{-sgtKp=_db}u6^?6Oq|g$j{*%2!B=3&P1tleO)`K}tQCAnat~=5g)|_|9H9+EEPmhF3R_f2k=WNCA zEq;^fpUC#?z{9)W-}M*o|6KcA!=0mXe=hR}ejmlJ7vGlE>xy+puMIn``Fk5Pvwe?S z@{d1%{_I|(U^Vw$N8W?u$B#R%45^b?5V!vD-@kh&+x5SAtsd#PB}&)c#-?X`bJ}Lj zy6+V>2MT3WCZ8-5X%Js^HEYkCl7$i(t7hys+Z)IK`SWK3OH0n(yLV6eog&=-VdUMA*woe47X+=mVZ*j#-@Y~n1%{U;zs~-eXDRsSWW{H?s3hq#k^&id@CwS7Rq19QXUyz6lv7QaA41W7~gUf0^?9^M{WdVUdxO zYdZY!hXCj5OJ&=m)*i{*KKbd>)JdnGa!5_pwY0EEc${G1k+e}_VW#qz1R=imn^kwz zOXI>-jE#*GHbx}W*UMkKetluo+D(-;eZ9RK3wOq(J$fO@dH(Z}95dtPx$!cW>yA#i z@GDUxFE5W{>Nbo1-%HK~mrOF4)Lm9tsaYp(W%Nx?C*%zWKR^GYnri2_Q6E>Rt@%-Q zxUHkCtc-1n{>|8kO^@8&+&E5c-Mb?!JUsHl-o1Ovt2YD$9_sJ!pR-26WWRkTZ_Tn( zuY8_q9~N_&%35AtzJJA@{U^Mxzj^b9>+PERB3!Kc-_7SO`%!K-J9gsSb^kxkF-=_h#R{nIp^8_34?1>r)52r3} zx$SVSeP?j{!Q$ow9f>JYUis~{(-jT{a!2*OpWs-h#C=p<^@M-g$q9v)ebd)#2h@hM zZjEn!wJMX6 z@Kih38piF0J8bJ*s|5~p9iO>tR#EWvAich~YjbZsKI4;e=WMTU)qA>lb%-T`E`m)Tdp$ztnVoo0FOM zGShQX;=6mbnV0kKbJ|?&Tb`(-TOCxS!}+R#>#2C^jM?=H!40Clt{sa@4`gTGpJKLe zZ~WhdY@G{k%Vm_gY++sV;?!)e^#z+_g}KVPU3iMGx9I3cWS{3MeN>j#+N7|fYcb0k zhL1UQ#;&`SB`2S8Uhwh?`=hmwSk748Qczxauk^_$&i#tvP5bsNeUksgIsUlK&MR5j z6Kwy<%J;g(E?Kc+`aAJSc8e$H{fzv1qnrCS|D)sCE7V0)CVIS4{Ux0KYWLR%Mz6{~ zCq^kBzcZ&Mi&-k-_ceaMubUrQ*XdZE{rOkx_Uusqs^g!lvaamEw%q#C*Zcp4{)#0q ZEUoAjaxwrKzW literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_sys_data_connected_3g.png b/docs/html/images/icon_design/stat_sys_data_connected_3g.png new file mode 100644 index 0000000000000000000000000000000000000000..a1092807a9cf60ca5b73bad605c1b1f684a6b073 GIT binary patch literal 832 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=B+Qau~O_zeEh`B^uJoIj%6Camt#LXrr zCb75$jTWEFCciT~`R?0=eFAYtpVRi48{glv-N~<@003bB@nD@IAC-aXCxi zWvz6s=B47^6J4KfPmQSG&v#Qga>hPe*^A=u#2t1tsV`lA+qzyiR^nZLXz2Ot^;d;oX3SEHn08gVOWgV4nTTZxF-Bnl zhd59C%G_#sCgxl~V(Q&BbIUBfjRn}5vaGkBQ{X-?W)^i`E~VdJXYoEmV>JooHk;LF z1cSw_7?dnU=PX*Edp&B$gJUL-HwNBa$>eRw>Ch*ceCdLOnM(5(Mc!?8d8SV|8q(!& z%;V+J_f+vOVP9Cl8aGv6bVW{h!ncDtD`wT()Ti9_>3(csrneKB zuUHm5vEC&3L0afkX3F|h#{Hg0R&6W!THfU{kLhflntM(|t5w&8UyN)H%X%(l#F#9x zvB=robYk-w%gGo2-Lw0^E%U~{OhbF0)}eRr^gbx^UE}8#o3GdQB|n=v>)4Lj#rxW~ ze4D!Ek@9M(?Lu=6AO5>@*fQ%$o6PmevNzfH3Dv87y8QF?I~W0%qlV8Fuf*3>Z$C?$kMkrtn7T2bn7fp+OoI2`gw!+ zd%a_yZiq0Kda=e{Z~Xt{vqZm&?8T#&?21Axn|JE|xwd+3$s)t+-`=cfd)3KXcdW6G zY2HGQOEU|~MDxUICOj_r(LZ5BX43S_8oFnD8JOA43&Qp^wmEF!TZSeGAxNxY)Ffb#=w593F94_|v{7n{2 z58ennB~)<6R@9hySj^6n&kk69Jt4JHb=TH^IeX*pE93{p08X{eTnsL7u&aT>#orF@P&8tnx|bp@GIxwv+lDV|28H&v>U!$oOz4$ z)UD~8H}$XLvinro-|~C4fA~uU_QEsEtyb}0KegmbP0l+XkK)pLiK literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_sys_data_connected_g.png b/docs/html/images/icon_design/stat_sys_data_connected_g.png new file mode 100644 index 0000000000000000000000000000000000000000..f7edb49954c417478b925c95a91f957a3fee3684 GIT binary patch literal 838 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=B*!JY5_^DsEi~JD)8aC@^n|?we+oGQ~sDTM`uH%&s_d zJrkJVv{2z$3YXj&PY&Cw!3XUfsxEzd6zatvq~WwDl*`Gng@t!XJ4bcEiGyBDVr2&p z>6IkTt(<-L$<04O0UvZv@0n}`8T{o2t5uIE6&?dG@?nYnif%nXJj?Lg$q-uID zM9t)hM^S1i>#6Ujl!F6e*B>h@F}Pm*^NgwE%+}eYj6dv01w#c{&)|yVcB$XFb9V*Rmf4#@I2WK4;C*J>;rXqWvQPV5F zY|5K}vbXPe6kfPET(qt+T6p;DrMr{XyuR(qerD#*0|q?@A`I*v)Kuo|%5eG9f9&Dx z!`{ogvjlFw(v*$pVr**oeOPya-m(&z&eyvXJem@=WpnTRom8&0`^3F(xt`x9zT`VP z#m{B$>WbA87apzO`Tw%x#BHCGE=ti zzFhLW!@;XPMPuqO#I-#?wdGz&{*{II)*L?e%Wcn=uPNCN?)rB>wn&s;Z1%W6TU+^t z;8rommTrM7mgPsxHwpHb-0SQ<*y+7m^~Jo>&d{J;&(vI%b~)^?6=0a1{!z-+mdKI;Vst06~F<`2YX_ literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_sys_data_usb.png b/docs/html/images/icon_design/stat_sys_data_usb.png new file mode 100644 index 0000000000000000000000000000000000000000..2d0da4c8ec1b35742584997bb6239721939cd3fb GIT binary patch literal 786 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=B+LJY5_^DsCMKv&~Qn6qskqrn0~=uhi?s^QGLmgt?KRNjfjm^tvixqcKGR2)x!5rpR!ubJ!fY-@8TnNr4App zU{4jHFKlj$FWzzIBXau`n&T{`%pUFCvE?8r->e zk4x@fkU-a>X;P1W{Q1KZwp#R0-T#vNdE5WXo;Y`ouVQap+C0DI3**)sTe=?-EKToj zetqPSu_OOPTRDD-UbnWwzU&x*b!UXKcMG(HIz0>HIJfiI8sno$g74nFd+_U*l#Uqp z`G27kk0cqs_*%vDxW;VK+qbzL#~&}an6V&i^+yJ=c_$MLW<2}(>>1mtt6CXbqn>?w zD3|@FXy<_xBggHxTSK&t8ca{SeByQN?%lg5Pn|k-<(kVc6(*l-2+?X?y;|GC-oD*K z<{?rYE4pNXn=vuTxWoi0r)j^E;5)?KGu zr#1Cd|BdAyakp~JZrr}zT(py?)hRJgK0f$OWywYpIXO8yK}Q+BQUA2AR v$C6X^7sYS7PXDp}|M%^m;=V*TFfvFVR%^S?ee?$d0|SGntDnm{r-UW|v#W6( literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_sys_gps_on.png b/docs/html/images/icon_design/stat_sys_gps_on.png new file mode 100644 index 0000000000000000000000000000000000000000..a2c677d9ec39ea738710686b77b30f670aa9c73a GIT binary patch literal 1035 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=GU`JzX3_DsEi~%g&e`DpBXR&Ucocsp$^yEbG<6Zr*db z#k|eiGNL_B&)B~5Z{ndfk8T7!dm+!R#G`h(*Kk+f+T80e=kx9gJmNU>0qfDE4ILs~ zVw$(gqAsZ#=FY17J4yfe^DB90*0t)+ZPK@yGw1u9_crf;?|Ckyxb(>WT(v*!X*=(B z=EsT5o2i+z?S|n6xk<<7PUyHj@%7yN7E8&a{+F+RNHA;GRPOEfyms}bPWyYQlN$vS z(>_aYbo{#b@qzjE44*f@C|z^#-Zk;3S5|pWsr|4y;`Fo7N0E!1em>eS9B!z|QZ_GZ z(! zoajGv@S&N~jB6eyZ7eF==GMgV-8DS9oB7d4AF2CkJ1&?^Rlg}?U-|k@U1e0S{J*$4 z37_4x7*&!bjAlNt|JZXS+(y08;laG6Dlr8Yavb~bvfkY-sBxF6{c`WNfY}!H3;b^w zSw(d)N`HQ|hwI%wX6>{~H*V}u6Y5mC!QXcHVX?Qm+^?XDDJEJKhZc6NTYll!L+v8_ zAOFzE$nLr+CiLSYYXY1=W{{yKg^>`SC|Esbk-=qq|CV zy$>B__uOPV)$6XrlSivEi=OVjwmyD)-fn}Le6M!ZMOtoVvr8_X6JUN&{Z#oU%b(r1 zl(pZj`}OPB@=u>XuRrp*Fr~6)y2N_EjqCUC|1Xp}#d5#8&bRARlvXYZzj>#}MQLMM zQqrRD3w>wLnz`}B%q8pB`zLQ%cr@xyv&vk*!#QTFb#KH41zlQ`S*-MY`ox^k1=eT3)I;_iU%5CP_b-X@YpZ&v%hOwL%S2|MbvsbDdueq>)!u)+XWk!v zXrOOB>1vkh&iNiH61{Gpw_Sg2yX5lA+esTOYRouK9D4Kpcl|d-|B^FLi{6~<6jydU zxhGD4rr+}YU)ttK^0eu{ExWDS{ba%a`D{XlV%@Ee5+F`X&OWQQSLVFn1MU7J874xL zPr5w(SmCk#_EHv$N52Z%7~(5ctmgJPgmOEqd@ys8gF?ZUeuj8Yp=n08Nm*NGtq9S& z<)^~!yYk4bm+P-*AK(0%CGLuW1drX#=^HGf*Ip~vl)vb4?q9V~_tATfum3T$m_Oe! zCH3Zcnd5uchpnE^BDCUx_43P=tm|8{YPuHIOg{O9t?L`#wDqh)9=AkQqF!uB?`XMK zsUp6Cf5GIq@4st*`TAXwpR(ch+Z%ao?kWL$Bj=z0ZYbCP`FRJ+yuSijTGbb?mrmU8 dV$UkUu+!W;@WG*@i3|)344$rjF6*2UngEXYIfMWJ literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_sys_phone_call.png b/docs/html/images/icon_design/stat_sys_phone_call.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5369399221da11993a047a12ba4f1e17fe1683 GIT binary patch literal 772 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=B-mJY5_^DsJtW7VRODD02M&=GSo{TR6jXKW>Veu`N;P zqBH-_-vI%RuKa-tGxoW0D7x5&d=6q!+9%026JOP@wx}21*eP8w^^d*6T&A?;4CbM&w`KQ>dR+XJQg~Iy#w207 zdq>EO!$r%(!)(QjFK>!SJ@b++YgVI*`SNwaiXu~|tE_v!XW1HA_El9Iy6x8X@ov03 zV@~~=U_L2=nLPx~nc+-IM^{IWs$ncM5%#IvpavefYjhe~3pLu#hFj_D8e=6*i$r@?67k>gkQvT+!8E?BgLS3TO~KzD(;Q*e)wxc{aK@zev{GHuG? zA8Nkn1ZC=SDa{gjyfxh{C}^GU4p|dD`A)6tb9ntql5^A|3id7$YqWl@QaiW9DeiRH zmFvry+?06s`LgSZKJ|)^D&veQGp+cOv3l={JH?t}`G+)avUoy6+y^HR4iBjJkSG#ZN z0lgpciJp1F{`bq)-n`CrPH(C0VaC8yTIc2K*#u`w2ELoTXX}|ww`Df%Un3Z_`>;B* z(U09HRxM!d+ZrQpdEi@+zD=rMa&+h4pH9aXH=pS8mj2gUexv*1tqQKvsq8D){@=c7 f<~RQaMg{|y8UBB#&kA5*U|{fc^>bP0l+XkKilt%Y literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_sys_phone_call_forward.png b/docs/html/images/icon_design/stat_sys_phone_call_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4b6ec1289f8e079cb405d722c1c4c8e33baacb GIT binary patch literal 835 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 Y)Svj`@TOft3=9kmp00i_>zopr0L1}yi~s-t literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_sys_signal_null.png b/docs/html/images/icon_design/stat_sys_signal_null.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa23f6c7348bb667d8ddde6d88340ede768288a GIT binary patch literal 730 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=B*)o-U3d6}Rq$*=8p>itMdhDij!aB2C;eFfh=BFTTmzGO8kZiUK~F{BO>3PYHGYv_uiV>_>8f?>diM|)eo)C zeY{tlc5be@|J{cL3-;$${bEl$;%+qa&#oA~{cpej-pwDmGtR!iYVOtJ$B(~nI+C?@ zo9KsIX`3gWO!=kUbT-XdUthoc)QzxZ^IKxXx?2T9R)=~mzr5x4+m__Gl_4QBrtQ9) z=e0EG$@kx!TLXes#b>SeaBXyGu-x~(%Jx*+<|(J2Mm#9nZM&O!`st&e_QdI*O*5Xv zKV@Qm;KhkiYsEynT~9s#ti!0xW07=DvMb3wZS%~dr#@;;%G-XrYr2=JmI#;5f}1%( z`|t0+!TqFgQ?ih)dgS`+KJ@|zqNiz+%b8441cMv(Fkz^}2PrEzT*uVLnb8GO=CF_{mvjx!1B1tgzoPiuA8FPx?I?JG|8~b zMag8QPn>77;LfNU+Cuj%bPpfyWNpYXkjPjU#XVVEw<^g%LPM^9v)baH{{H?-oa^r7 zFM3cod8@%pm#=eLoD{!3e*1Q<#s5EfkF=*4#szR&|2*igN9b$6;; zc@!5He?I)Mpl06r=i=+Xc(<8rubcb)`SbbRM;~>+@Kl;u!O?!0_vyS{|2oR|C|zCu ovgFr-TPN#3PJgkTftlf2`8I=NH>CI&7#J8lUHx3vIVCg!0L`FO&;S4c literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_sys_speakerphone.png b/docs/html/images/icon_design/stat_sys_speakerphone.png new file mode 100644 index 0000000000000000000000000000000000000000..642dfd4891539131dc8023b169aaa075e6c4ddaf GIT binary patch literal 978 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=GUAo-U3d6}PU0-PXGi5 z&#bN2)@=Ru{kPu!_tA@Y+|B!wyYYd1M`-kvDN|}Jt*w85`}gnNk1bEdPWS)#@nik! z)vNFGDg*`wUM?&w%<}Q!`SbVhe~AZApR$IBhw~Zwch5It_DD%tA|)c?687Nj+qc`h zii(RT&Y02h^=oNNTwGNZqtTa-9|KKWy<0rx_bu78N5<6Dl!KG=;r-Oq)EBQ`AO84p zd}-V$z_9a`=Fgu$GjemU zuC1@AxNu!6prpja&)?s7=SQwZ8eI>QGBY)A-MUqwJEQ&JLB~1s=O<@mbbNpJ{{6!e ztBspCKc31U-?U`evPBCQHePRUZ-4RbUD{HW;NV~nPtSuVPH;5;PMXR2a0mfqm=Nt$Vib-P`;3 zZ|&bRSz8yaSiy1j?AbTDj*g6MY-}rzNgR1tuz~Sb?RteLX|ArU+6pI6pFaHNjn1UW zlYjQ?@bB8TZJU6E#ECQ3mX;4=f(j=cU&K+{?(MuhYueGY%?o$zm~lQYKmX$W`~7$C z#y)xSL_u4dJ3BkOX4<@YeTx?>$Hd3~{^oM}aHXNy!^`?mSua$3WfK*m%b5*_ZVLT!ZT`6o7RNLt`H9I% zs~)hQQRk>TP?B>gUSaY~DXF}yZL_7{u(7c%Qfm6~W^M6Jv8iFp=FUsy>e}>v?Qz@X zd8OJfclpKZ^8Mof^tVf-`)HWi?5o~OgHC(R`EqgIl`K=&NlWJEZI8b9{yTS^7cX0L z>spV#FhVQ>k3yVpkl!kefh=5~GZ@QbZaqBJTlBb`4{(4xj zVn>YLtsFC_^Q`AJT59cl=Kj^5*7c;w@=OyO%L2BO3!W#fY0Ud!IIG;-)ndodgI$iN z_bLU5G}fz44zv$Znd)V0*k%4KO2uG>(c;qqi|soeS3I>^etOAGsR}mU>&uV#e8_ga z@p|v)(}$itRhv{{^Y4`3jCb9WrEa|~Yn5Mf)9#VLd=HgZ%Zi1%kEWbqSv;ZfN#H}J zfHP-4msrKdC?s;-`*G^j^X)IAZof6_J)WGH|FeK^MN^HqhtooVcR%>=2qix_lVUf2 zex1A0#OnN<^ z<(ExnpUp6u>9PFS>Q$@mFFv)3f%Ewko!YwnfA>$_&&0zZczws7mdW<53=9kmp00i_ I>zopr0F~PwHPoYa`?e+4NuJX4k)8#)bDmr?( z`TK)hi#xmZpU>HQJu>@!vFI_0f7`A;l%L`E`tgk$Grm82_U!oc=g&8kY%4AO*w@$h ze)jCyfh!f*niFU08*JaY)p7mx>pUMmer#-SZ%_Oe^X#4ZN`jH{*P z%G08S0U8h9zV#LESfu)JvAft{xK?mz0|7I`L6U#}eb^ zh87ka+i&X{ZM&JH!ewJ;r!>`zvt{@0-8b&t3%l;AJafj31YTa=7q4F*{`1F1#C2s? z)3x(w&nBj)yUTq3^=p@n(5AzOo!`8F|M@ReCF|I3#z2?+@f3U_bc z7G~Vnl2TGKMf7!Z#m>EZ*LE#gy_!2bJUpvtV}y^Kr=i8wLqC34u(ln4+;}z1)oQMr z(!>S48#iuTxbF1x&!2Kzmv~IlnRWmD@e3Cwyqa8+X))LDL)EX%3N0<)b+5)pMG1Ws z>UCqa|NHmvhpN36_V(g2B5O@H&YDvY6j@ul_toXy*Vv9kYu+?z?{=Oy`IN7x>%jy8 zyZQVN3nCV1Uvt0cb_cO$k@dK>^DOc8zFa3yoH(KLevf^r)!fK$eb3#$ oc9%bi%vAaRRR3Z=BOAjE+q>-t=KB6)U|?YIboFyt=akR{0I6A*LjV8( literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/stat_sys_wifi_unavailable.png b/docs/html/images/icon_design/stat_sys_wifi_unavailable.png new file mode 100644 index 0000000000000000000000000000000000000000..53dd45b31c55fa8cd66fb23310a34e658e43b59c GIT binary patch literal 706 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlR=yk*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=B*uo-U3d6}QfW?LHOdC?NOsMn^~2_6(Ll0oH@>++93! zm6ghp6#wWaOm076-O{cYiH zz2$hZP5m984J}JTLIRl@8A4;Ozb^Gq5t`tm_Hz5@pMMO39rbE^`aE~WwE3tpuMFv8 zdU)d7#c3x$R@B>PNXyZu3o@C6_aIg=?E0bNIxWD9$L z2kl<&xMbGpr!VRj1~g=C^>P=vvwwT-s+ge6?YA$yELjk=@`7n!lY)bV%)XuMmI8W` zi!ZKN(IUU+LDbr5UWIBw1>0})`YjjcaCBUM{czrP=1)ooYV6uymi#*Hw{GrEh4#aZ zlX^O@zh<3&nl)|n%xRq7Dcf(a6qKBzn6R54}O}!6S>T!<7Un>juvk>&F+~=?Hk1o!4!=|Nt6TaSvJux|Nd-syvKhM1pEf-h3SKfW}kyQWjP3%jX)-xAn z?u|Ro;b^b5>xYNRCn>Jhu9gbErT$!+SNSJBeEt9H_D{>7E@xn7h-lpP%|_+ce+C8y N22WQ%mvv4FO#oOzN<;tv literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/statusbar_light.png b/docs/html/images/icon_design/statusbar_light.png new file mode 100644 index 0000000000000000000000000000000000000000..ddebc2dcb1fa8a31e65f41b65c6cb63306f22226 GIT binary patch literal 10981 zcmeAS@N?(olHy`uVBq!ia0y~yV2op6U`*m*Vqjn}{HQ*gfq{Xuz$3Dlfq`2Xgc%uT z&5>YW;PTIOb`A*0$S=t+&d4uN@N{-oC@9KL%gjk-V5qn?H#j{c_@$Wb_j_NQygM4E zc;^R+awr5jbvKAiRMS%A6!7X$TzFG7@SvcpD~t4r1s%+NeGNULfjT^0TsPRCC@$)2 zUfj`j>i5Iy#o5>Pe1CTK-`4AP&)0mOyZJo(0S=yN9>#&D4LmEI8^l^Gd+)Y;f*D;;3p$G})|nVW;*fbZ-B1~Tpc`CmEBjA3kOVLVVW z(ZZXfL4?7fs?TW|gM%Am!`vBa!3+yn7!pn=Cp~5e&}B$auYY!#p<(WinbnL8(Nh#f z85c}sP!LY-aAC->W>|ARtjm=l!hk^}&HIQY!wp>q1JCd@4~7lf84jEi;NHZ*!NXt> z*wL!Vz*5bSa6(zRf}v$5gNWOwaGQ_X>ja)_F)&oj++?#;#nQDgnnSmcJv>}bPUD=X zxVDH{B2(fl2fag;GbN20P52*tKEuGUV4|qtgXYhFE6(w)J9o~kZyR5{?yLQ5|CN%G z9{+oKeszHZ1H;3Tx{LpG^fya2ShF?c{#&H_jwK_GdqL^z#w#e-g}EoK%h+auRUj zN@d<#}gdF ziHf&67?Zjpl>0cuXSV)OJm|q9)UBd$vO^?L$$O%yhhb1xh(f4`>?hkICd>91w_Ovh zPcRrY{b}3dZaAfJQ=sh?o~_P1SC~t+xGmzokWyket6yxv>5WQjcvc^i+7Pyed3Wd6i_@Hwxh3$By3*to-dogm3I04Hkz{1p9^s**d`+ld zSYM#J!}*B0icqJsk^0UFOr9H;gj^E3yx=p4nHw|BK<`1Q#9AyB!|K!KY|}=1f9zAl6)%g)Z{5!>I@^t(8aTY?yguEB52wl z<+OI;wxIQa?JI;$N@rP~Z5H$NUb=SC)XP#C;u+sF*S{#)C3ttLoZs{d;g?Robbm4Z z1@o739^N+5=Hngd8j`am*d@{>%O%#&@L48#xm)shh=IA`>lx2y^3Ti>SC5BnVUcU}^>U}OB_J;xNdlO;D-=qP6Mu5K%BG(DoW@$Ai- zGOgV+{>tv|wq3Pyp{292mvQ*!pwCm%?AagBDEu*}#E$>iVyw`lBDZR|Z zXQyFmO!lg2)2BtO_E;Ub+WqxjvvqHm&t10Hb$8_NMn1>mUg|OG?&-1J-FO^=n+ogPe-tu=d=Ix7XnCFwf{9fhW=f7lX_5X(a&Hc6ft2<8w z+h!gWw%a`CBy5hF7UtW?>L0)TG0-{ou!Hl`#HoqXAGS=~dC_L^RkvO@{+`TZF^^Rq z=N`*Fwpfi#O;OF;_m%IvSwX%#muW7u_ObRke)i1SMQ5+gG@Wg0c-`pv?B}zu&%VDs zA*v!uXWNQxJ5oJ2J&9Tt`EJ{uyw)ho$fXgXQL&rd*3Mn4dTsaG-OB}+@ARAOw|d^S z^urrIZacYc<#x#pPj9f@UbiiGTWw-`l6d;|qw5a8o4j{&?XKG1zqahW?Kk;W%SOr8 z6>ljLu?n-gH|yM-clNbMzf60npB`~u;QS5a$J>NYYaYp*8$A26d%Ae~&f@0J9o?PY zO{evy+v&}gK6dxS-X~rqUkhU&R$cl!clPGlhu*HZz5boqyUcg(cjlilnXfr7(zy7- z;SSmx-;3LQvn!ha*zU27 z`8}h1k@08D4{SfN{j~q#{CV-M_nqsN|EK(~`hSsOd4norI&){EV`DVa?;lk)iu?QQ zt!}4&+jR4-W6y$}j-rnJO>3K;9$c%KapKK{wTj=L&p0>nTqa*@K;4UL7uXY@C3YXK z<56#IZw+s=?2hUf0W1%Wjokmd!2mT_(Hi zkLjgFp1B$^H^MW=TgFmPYn@qM&c6G9-hOU>H1`qr<7)94`X^!wDi@wR^rdyV*h)Pi z9jj>$J{^7*Q$9EfXsrIbBr|m!6dCGFy>Ur8{-=5ig z>h=WlIq&EHe=BrI=;5SoOWVA|b!8)-?Ol^)xyh!m@;29FQC97?Ft#-|JG!=MuGE4>pR!q#`;I-N8aC>_^WNMw4G>Y*E*5g z;?qUzZ)n`9cq-kVe`^2CJ5#o-TzzC`%K5ZQX)mAM)14R1H*MAQXVdxecyHd?!h1h# z%iFKtTyN`7KdW(jck?#qos0L|?AVjK{N%Z_*7hMwLcWCj3Nd?k>F(CV>p$`?zLT!r z^UdVV)!Wf~zW=p5x$kx;W2o=dw5zGVJ%4ZhZojT`)yp5#e&@!n^~)`Mdz|?a^Ivvl zzHQfcUb!lJ$u=aY|C;t|cfRBD`~J;+U#`n*#v9r@=h!3V0+-4sFTZo%|1QUCb*rqW zdd)-j%kpKi>9YD+PP0DEa+@7I>vwcg^e+E1b{DU`x>xnb{kA;+921+!O0Ul$Co^xo zY`Q!-{nPoLxl`xX*6IDclW=>{w(94}=k90m=fB@2Q1bAS>;LZO)_bha#eCXP@@doU zr^4Yo!e_0wiqCyj^2+AlO4!^yL&%Z<$pi={p)?PyLCnCf6txXeY0Hs-P%3=d*Z)1ymh?ke7F6oee}OOH{Rc= z&pJ@P;Pb^h?%&y3o6rB7__d$knYDjr|LHc~w%7A4>?|!G*%$qN`DeNF`IPf&^Thux z`geMrxR`$3kE^e*pSw8Y;=<{lrcd6VTeI}abLoIzdcxf zr(E{^;`{vmPihqEHU4M(-1s&4!t&pfB_~h*&%!+8^Pgm6-P;Td3<}8}LB0$ORjLdO z4b2P;KmRi@G`wVBC^cYUc$L7wU^Rn*K|Fs_{82Xs1_c367srr_TW{{>21q~OY5pO4 zwX1fdwxUCWgNDMP?gLv5SFSv4VW8*#_sfOMEdQY8#m}}}K4NTZXPo|MW)08V<$lM1 zR#?5WS$^_l&*M!0=S#|NA8}r;Qs`Cn$7sf^E5{_x>^|V3;J~D~c0$;jb@TYWIY}tW*%Xgf4q_@>3bjxy+>of9~_*yMG{lK`DOe2 z(j7mSg&+HKQPWXqLq0>9$gD+kr*(b0lhwX+&B7l6oUg0)Toj0YY&Y}O9?SC7zS)9H zOr1I!lRmvT)FjjHIzRnd^!I?AzH<{Iy%-(Rf>gFn^IGQ>{ zWkp^Q;lZA-uWQdUf43gCkR0m*i_13PsF*)-pAvYkA3)a$9wN5p(fbvQ@HsZ7&wwE&sXcdu@D5ko$_7 zT`w{(-{V@WK40(Nng0w7`*f1LB7~kT7dkBb@t|s=qU#c)?5Ba>KORnX-=AU9@`zjB z@87@mo9jD2BnqdlGnZdu^!D`P?xGU5E3ygU5#FlPTU$T=I1sQ#U+?Iep10Xc-SBRgd$gZwP;hOQ`{*OV2a##P2``e%O z>3goF)SibEKbQYYR(oXndhPEs=c~TiBwxH85YrH=tJT&X{@+Ysx1g}H-s;~^|E}Me zyEVFlEx+PPJ==Ymc)3llKJ#yAe|?6X*NQEb^+H2R*M9NWyU)hwIeI|I^|BY9G&J z{d!@)^T*cve0yz$KSq81d4iR}_tNVxddpr-__`u=zP<3re`PP;2Gl$hy!heallOZc z3U0nv)nMBb!*HR@N+yAS_SdldiYJFp-q&_(o*}gEx8DEKZ~8o`chc*&ovRVp$*|yU z$qHlnJLz@P7WUN7{d>CfeyXAB375l3It4d>*R}BPo{@EaUV6b@L5I&gR>w9!mlO|{ zeRz2K-uL>)n2atKRPQ@3KGP)dS?#m5JIh&42#M{@oxk&@%gow|CvShY<#%_^>HU58 zgQe`kS7+HTUT2vQdTPe0s?UzH3+v2l^tK)Q>ugeEbX9ZdlA2vBPHo|z%5=gkbXo1s zl8I9$+0A_Q$3{x2W=H+P>DMmmEj#5VzQ~8+<}o+%T{E_xk@_ z6zAmO*vI_YnkmIn_M+$$3l7D7E2eX;J16X<^ULN6E5oHgftb0=57l%CBwdRR6k+gi zcbvf=7-;9ianpID1{cGU#R{j|HRF5)oD7^z7}mHm>Z`5z@>#QxSBT--Vh1lzkt{|A zX+pVrn^nd3ie>{wV9F>Z3ItE;Q5v{Y1?#c^kj-E-c!r>uIm zC6fi5IGi`r=rD;lNw zN_g3KeVaZvL(BeUfdvoS;V)lIR<&m^eTptH70qUG6APkr%n}=3#*GP(ER!HCtGu(SWV1>C>hK_{*3!xQU2}2sq{W?cZFeF_+shFUPE=d*RJx zpTg&CJJ#EMcaEJqho+X6lVRbN1)5C?Yu2tk$yX?Iyl~DNf%Bgysl5F*|8CMo6Eib6 zVaEC&*N$CWcd!p+XU3wn+YUd@(BEpB7h^PwgJq|ob+oOuwKQM5>F0w95^al~{CBXD z;aj>@E=$PSZ_G}%u-YgVsbz58#veaVXp<@-L*?OiT3|LFV! zYx!^9)N=ALQM`Zj0dMT)%~$LHJeIfr_apgijX{jw^h@u5p4Q*LW=mLTsHmSt!u8dw zS1Y%$B=_&oezjhnABlop66ZGITtGU3;+swpDZr5w1|gk}HgaY&W4j=mdq+mYj? zoaN?wGMpW3C$h@6{famo*_O83{oIMTeg+rjjDTI;8ylwD+ook~t9?JSM30AkSIE8N z4x2U7zB$Ad)Wes%G=K zUxuyV7S}s-=FEbg4z>#mE?&I&WutR+uKVwM#$t<|Qxm%{UflQH$4dO%eEa*CFE=x# ziQZXwLeJLL)^7g$cKbgIZ(n`1Z95P9u00D^Z+;m4`s~G*yJx&>n)YR)tA>bG{l7mi zUTAo=XE5~6o;ma9&GU8N{(L@fZf;&J^Y*p6_(hio2OoD_y?XWCyLa~gf1a26@lI1g zDq*vgH3;y_SOf$IKQ7wIp=fGqYHV!$v7#m|Ev=*^zL>7~ zqOhVwBjdr!GO1*<*}7ugZzja855Ltf*6q4dIw>!Y@2_U0EN{P0``UF(@nI%Uo;^Dy z&k#Jt%VdSgp2YW$TbQtx^fz{HTJh9#Wxc1!(bz9Ct8|uM%2x24bgAyj>#ts$Kdq=S z*tF-NZucTb5!aiFbN!Z^uviz^r(M|P7C7aSOPrQ`kIw&)2T-GhyJVN{+4JYY!RFG^ z(v}IkcI~=)_3F!)FOMEQTK)aq*RNk68X7cYoUke_Ew%q~kpI-_)7RrUi;{VASFQ$u z?A%=2(pOieYKQ;(&~C4zr?)7kA>+b6+v;y~tV&-!IN01W;pT_64}a>_{|GY?jEFyQ zF08ui_T6vOu7N@P|6kYTYd$c(V(Vb*o$olus&v(!JvJwLW9R>9wXey3Y~+~tM#{V_ z_tBewn}mIzs$XUo&)@r1Y!!P4+gUmNJ>PC+x3;z(Zd~_TIQ{y3=e1Az-apFuQ5OC7 z_1d*-TLhLcD@e@~@SHR+<@Dt$y^{VpH=k%Z=Di8}|1z03Jvusi`LboZcJ2D`a?0KQ z+t!D>PO&rV`bR$W+-6hzI{N;q_3QbIl4qZ9HHmw$%l)3kwSsR)#pB<+eS0+2^XA_f zjwUP4e{7$o9{D2sMxDCf9EFw=-m(*YMkc@STwdO9K4Z*dJd~Jo3Ic z-n$U$gB6a--`?Hz=HM)P ztih@vm2mhd(?n-M26d6$%_^Qv3Mcqd%T~u+yKzH8@yN{T2hWo4JzJy7;l%cqO{>WUB}HmJ^lIJ-Q|Iv z4kj6I4?OHOzt?dzDR-;vY=8E)wAK*G+8ZZh#IVS5_MW)+{&k-wmso9iZ@akY zuHxCuY@2HZ*K+eC;{{Dy^u?p*ZQK0xrDJk(^7{S%e)ZS?NiHuu{XJLQohkP3KW^#$ zE8lM0zJuG&`s<6AFMs|#U%$_|c;Si_FHTHU-sG$b0-x5(6obJg=VmaFd~=+qY}%=) zMH-8qYOY@FxcB8#L(}a(K0bSXy;^;|U*5j#&5eJXgnys*a}jRLNa_>c@ukpZdt0yAOLVYR z^jw#%`#k&pp8x-T-~VyU98}rY|Nj?s`}y5~&!0atGc%j#-MMjcAp=M$W8uq7OTDM- zE&U%E6LY3eMo)ub5#zsufBx8XF<8sI3qWd-HoR?_w*2^w>kCxf7H{0RF|h1Jijn5p zrv(;8#l@-ZYHDgmFEmf(Oj8dOnR-jx;B@ddcjii^%{G}c;?{4!nX}1R%b&+os+Z@m z25)M>x1M5|%{C9A1r>U0_r}ysOV>N58p(T3`ch?U$JMX1An5u8uDO28uY8?wGx@hm z;F$%|OuGIZY^GlFnsfcyr!9A{lKE?Iz3{2$)4~~%|5hHT;awn`xBd3pGV8g1-A6b5 zQ#${do11&{=FN5c?PvNd^6Fqap(NM8eC5haTfwx$+po2A-N>4L`f1V5YuB#1xw*Ny zy9)|*uwAfgOT2aK)}_za_`p@%y$4s@r)}JPb>5?IQSQIP_kEhWY15{A_wGG?nmUE= zB16=<*5u=TH{X6!Fu!K|sqK<*Tl1Y8rg?9kec8F~7T@;0OV_SlyL-3v%LRPq`ia+{ zA1YYj{rBYK`LQJeJJucS%N9;AE-Jcp>(-}Fp8}j+m@_UsJly`aY`1yE*6Jrcmy(a0 z?|Qs@hF`mLJD(&E+Z4fz46`1USlPG^XBQl{C~^uNSt`hw&>aKZQWb9 zZWVD|2u_}Vf2L+s-tu9TcaKZorW&^T>dO+gof~`ie}4VXKezoV5}c=%IqDeIkY(}JQG|6=X<@@nncwJX#YF>Wbd*eI}RW4&VU z!kgP}_1*licET&$ZUysW+;@!6+cZ}xNjWHA3clzj%y{$Swp)BoC+3?MRvI1Y-Kf(I zmIKx6Cqa3B+x9zi?3RnjNKc(IWdW#_cdD`Zkm|87iq5Hyr$4rBX3a5GeDdM)`YM^X zTKT5t=IvE^EpC}NY8PExaWyNnvnS~GbN|a5H(wP~?&B8VoxrLzvE%Z~Et{`O&tClh zbA9x+|Gz5^-wcXgoD=UH#Teb|+?LbN7AR6VZ@T^RMJsro=~qpv`*nG~7H{qE+xMr{ z+KO;}{qp4mpRcd)Tn`5Y+L_ccG8C6%OXsEU63x@E$@e{~^3 z7a5|g3w9JfW^>;Bw)*^vns6sYajQ2uU;q61bL0q%R%ZqSubc%BFYnEpuabGw%`4wb zc(?GI#jWYnrWH(OyvQ)?>%(^WWtSf=UBB=1iPwC7(T~03Yt`p+%h!GpRO=6Iw-(v( z`m&->r_Jv-o6pYqO~OSk^|_3K{E=d)|~J>0h4rgPDZgY)wo1yY{Rj*5%>cX|H5lE1&c zu3Duv{q#|Tp3_e^2^>Fki0S<2?(S~8`T3cdp5LAa-RjAme}n5H!-uC4k&!>YT=uvB z`{iPZwU%L_V?^H8? zA(MkiM*IZn*K(E0EB-Wy)&H1gUvoM$`_J;V=T~t#6s%30{tVRbJ?Lw*)^|bwU%r>$wWIEhf@cuh?G1<1E32OT*KVGs?m4O83d3$@{eswLS?S_~ znb}_~Zr%MRc5`+Ao&&W8HyU3t_DPw%?)#r)@{xb@yr`bO$GrP13du9)->Y-~`>=M|r|=NHAeNmQ+12CO4+J)gu_R}iOTEb{4L<7WbVByN>(cHi zn;+iRP=2t&G23a*qsRC9&FA=*n^!i6=ljhMj?y`Feqm3;;x?V4+(+Wq)z0y;@4EAC z8vFa;Ji8c%OeWsdDDA_hQ)1n&nA^vz{=N?z<~uh&)P#3P^A{!W zIbdj#oxa*Tw|Cy7vZbC&gI9*I-QMt4*I%pJrB-*TpUPA}wyPL0g&9r)hyymYulU5n@a_`00U!!BaQx9p2HYvPm30hI2@$~6aLmp-8 zDU&BJ-qNad^~9%)1Dvc_2kSN{Crnd!ni4I2=wX3@#1z?6r%xM8@N9Cvm=W^wUbWH8 zGY|51UNRGK>gw)JjgOCx?siey)T%(yO?G}B(S#bd~7qRL3-xT8YlINSXY--d~Ha513dDCUBik^5RCN6w) z;lzm(mo80ubK%q}FSc4c(1?MQRpFzSAe*mWziQ^jvEAOVWy_K+lGWeetzExNWSFela_z;77oR?Dx>Oev85vmR zzmzi}M6K-<+pch{|N4qgSby)gn(4*+f6n{8-|tnw->V+a^fYoFs82uZCyV2WPkB4< zer$Q68r_Yn?IsS?JX)rKc$1>o$AvneRbg--I(TU3L zDeYn5;ZtXc&#QW+x%B6(ka-%c*1dkqgI{HDh+1oDX}QUnm6f%lZA}N;>Z@ATB3!Lb z3n#pppwaar`;yt-xb;({OifKK7BV1(8e;JEf%i1sT3)xshW7ULtDRqDU$U8+r?J$Z zb&+GRkJ{u*ECrR7l|OhHaV0f`K}b~?XiWDajmDOV8m(@~U}$*L!PaIb=yWZ}CX12b zrA9)A@YK^!1f7zE+7~f6SaB82v^jN5M8GL2iN%$%p+w}y45m~2md_9n5}ghnQg5vF zHw;ZH6n1jTZWQrcsK;!40^`?L*!?|~elg)( z;{Ml`GnFm{tT}(&e^C&_&BMq2`Hubya{0CH`4Y?azwH?cEixK;dYi+JExqBeMqR5d zP`@EZK=d&4#(6tLv^R&zY2?M#|NWeyVPf64t3O)uHjlm8o?qrM{VW&uq;$#0{k_d& zpO%{Ae)l-{S-zPW7hb;r&DVuhwM-Xc-YES&sW!>WeTy#53T3C7e&ez6&EG{uRtlnvGxc~mMb;pl%+z$JF_LR7M)Psi^ z8U~`Z>;Jjyt+rOu`|75rEX%NE7WdwXrv(d7rk2*P|L4xSY*G8Pi%Wxy;&*&$bN`qA z;q1q!imUDZGgR+5S94)OazFq>ZcO|RwAr{j+ivxCpLBP&l0A3-XaCHO>ua{ZGq!(y z^K*}DzH=mF+13>ja&doeJG^o8>DjU7-SqGK)n;>NU3B1(#5Se)hza|YqNeT|G2WI5 z0W}W~pS%y6d=s?GS#;*>v*yrcwUs4-edijSnBQ<^uY9s;gMpm9MAz4&OJ_{oSPSZN zX~*BGs7>U)IH3&t%xT?+Fm{GFCOBtK<#)bYw#d!P%7&)H)lH@=HZkG!*V+VZY%Q=UnE?%krfdGU|` b_6)D=uV}7a{g{)1fq}u()z4*}Q$iB}Meu_5 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/statusbar_palette_black.png b/docs/html/images/icon_design/statusbar_palette_black.png new file mode 100644 index 0000000000000000000000000000000000000000..fba096f301f9b55744bcca8247b41d6d7ac98380 GIT binary patch literal 3291 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4kiW$23787oeT^NoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/statusbar_palette_fill.png b/docs/html/images/icon_design/statusbar_palette_fill.png new file mode 100644 index 0000000000000000000000000000000000000000..bbf652c5af522ddcc8d54aa0dfe91e8adb690df0 GIT binary patch literal 3342 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4kiW$23787oeT^NoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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�PV*|l=S%D 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�PV*|l=S%D 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 PFfe$!`njxgN@xNA==%VG literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/tab_palette_selected_fill.png b/docs/html/images/icon_design/tab_palette_selected_fill.png new file mode 100644 index 0000000000000000000000000000000000000000..7079bda6f7785dafe49f1732cf6edba2f1764d23 GIT binary patch literal 3331 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4kiW$23787oeT^NoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/tab_selected_light.png b/docs/html/images/icon_design/tab_selected_light.png new file mode 100644 index 0000000000000000000000000000000000000000..3a87c5b1ed630ef9ce7ba693e5c13443b566e884 GIT binary patch literal 17477 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 literal 0 HcmV?d00001 diff --git a/docs/html/images/icon_design/tab_unselected_light.png b/docs/html/images/icon_design/tab_unselected_light.png new file mode 100644 index 0000000000000000000000000000000000000000..f888161875c3b19c4891041b2541a055eae97e2f GIT binary patch literal 15605 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

        -
        -

        Developer Announcements

        -
        -
        -
        -
        -
        -
        -
        -
        - -
        -
        - -
        -
        - +
        +
        +

        Developer Announcements

        +
        +
        + + Google I/O Developer Conference 2009 +
        +

        Google I/O is a two-day developer event that will take place May 27-28 at Moscone Center, San Francisco. The agenda includes a number of great sessions on Android topics by team engineers and other developers.

        +

        Learn more »

        +
        +
        +
        + +
        + +
        +
        + +
        +
        + +
        +
        +
         
        @@ -116,10 +120,10 @@ home=true 'sdk': { 'layout':"imgLeft", 'icon':"sdk-small.png", - 'name':"SDK 1.5 r1", + 'name':"SDK 1.5 r2", 'img':"sdk-large.png", - 'title':"Android 1.5 SDK r1", - 'desc': "

        The final version of the Android 1.5 SDK is now available. It includes new APIs for Android 1.5, updated developer tools, multiple platform versions, and a Google APIs add-on.

        Download Android 1.5 SDK

        " + 'title':"Android 1.5 SDK", + 'desc': "

        Android 1.5 SDK is now available. It includes new APIs for Android 1.5, updated developer tools, multiple platform versions, and a Google APIs add-on.

        Download Android 1.5 SDK

        " }, 'mapskey': { diff --git a/docs/html/robots.txt b/docs/html/robots.txt index 085b79dc1b68..7046373e9570 100644 --- a/docs/html/robots.txt +++ b/docs/html/robots.txt @@ -1,7 +1,8 @@ -User-Agent: * -Allow: / -Disallow: /gae_shell/ -Disallow: /assets/ -Disallow: /images/ -Disallow: /sdk/preview/ -Sitemap: http://developer.android.com/sitemap.txt +User-Agent: * +Allow: / +Disallow: /gae_shell/ +Disallow: /assets/ +Disallow: /images/ +Disallow: /sdk/preview/ +Disallow: /shareables/ +Sitemap: http://developer.android.com/sitemap.txt diff --git a/docs/html/sdk/1.5_r1/index.jd b/docs/html/sdk/1.5_r1/index.jd index 438ee4bb80ce..405f56ce960a 100644 --- a/docs/html/sdk/1.5_r1/index.jd +++ b/docs/html/sdk/1.5_r1/index.jd @@ -1,6 +1,7 @@ sdk.version=1.5 sdk.rel.id=1 sdk.date=April 2009 +sdk.not_latest_version=true sdk.win_download=android-sdk-windows-1.5_r1.zip sdk.win_bytes=176263368 diff --git a/docs/html/sdk/1.5_r2/index.jd b/docs/html/sdk/1.5_r2/index.jd new file mode 100644 index 000000000000..15342a433992 --- /dev/null +++ b/docs/html/sdk/1.5_r2/index.jd @@ -0,0 +1,87 @@ +sdk.version=1.5 +sdk.rel.id=2 +sdk.date=May 2009 + +sdk.win_download=android-sdk-windows-1.5_r2.zip +sdk.win_bytes=178346828 +sdk.win_checksum=ba54ac6bda45921d442b74b6de6ff6a9 + +sdk.mac_download=android-sdk-mac_x86-1.5_r2.zip +sdk.mac_bytes=169945128 +sdk.mac_checksum=f4e06a5194410243f213d0177713d6c9 + +sdk.linux_download=android-sdk-linux_x86-1.5_r2.zip +sdk.linux_bytes=165035130 +sdk.linux_checksum=1d3c3d099e95a31c43a7b3e6ae307ed3 + +page.title=Android 1.5 SDK, Release 2 +@jd:body + +

        For more information on this SDK release, read the +Release Notes.

        + +

        SDK Contents

        + +

        Development tools

        + +

        The SDK includes a full set of tools for developing and debugging application code and designing an application UI. You can read about the tools in the +Dev Guide and access them in the <sdk>/tools/ directory. + +

        The tools package in this SDK includes updates from those provided in the previous SDK. The tools also require a different project structure. To use the new tools, you need to migrate your applications to the new development environment. For more information about how to migrate, see Upgrading the SDK. + +

        For more information about the new tools features, see the SDK Release Notes. + +

        Android Platforms

        + +

        This SDK includes multiple Android platform versions that you use to develop applications. For each version, both a fully compliant Android library and system image are provided. The table below lists the platform versions included in this SDK. For more information about a platform version — features, applications included, localizations, API changes, and so on — see its Version Notes.

        + + + + + + + + + + + + + + + + + + +
        PlatformAPI LevelNotesDescription
        Android 1.53Version NotesIncludes a standard Android 1.5 library and system image with a set of development applications. Does not include any external libraries (such as the Maps external library).
        Android 1.12Version NotesIncludes a compliant Android 1.1 library and system image with a set of development applications. Also includes the Maps external library (due to legacy build system issues).
        + +

        SDK Add-Ons

        + +

        An SDK add-on provides a development environment for an Android external library or a customized (but fully compliant) Android system image. This SDK includes the SDK add-on listed below. The Android system API Level required by the add-on is noted.

        + + + + + + + + + + + +
        Add-OnAPI LevelNotesDescription
        Google APIs3 Includes the com.google.android.maps external library, a compliant +system image, a {@link android.location.Geocoder Geocoder} +backend service implementation, documentation, and sample code.
        + +

        Sample Code and Applications

        + +

        You can look at a variety of tutorials and samples in the Dev Guide and access the sample code itself +in the <sdk>/platforms/android-1.5/samples/ directory of the SDK package. Note the new location — the SDK now includes multiple platform versions that you can develop against and each has its own sample code directory.

        + +

        Documentation

        + +

        The SDK package includes a full set of local documentation. To view it, open the <sdk>/documentation.html file in a web browser. If you are developing in an IDE such as Eclipse, you can also view the reference documentation directly in the IDE.

        + +

        The most current documentation is always available on the Android Developers site:

        + +

        http://developer.android.com/

        + diff --git a/docs/html/sdk/1.5_r2/installing.jd b/docs/html/sdk/1.5_r2/installing.jd new file mode 100644 index 000000000000..69b2c1bef533 --- /dev/null +++ b/docs/html/sdk/1.5_r2/installing.jd @@ -0,0 +1,332 @@ +sdk.version=1.5 +sdk.rel.id=2 +sdk.date=April 2009 + +page.title=Installing the Android SDK +@jd:body + + +

        This page describes how to install the Android SDK and set up your +development environment. If you haven't downloaded the SDK, you can +do so from the +Download page. Once you've downloaded +the SDK, return here.

        + +

        If you encounter any problems during installation, see the +Installation Notes at the bottom of +this page.

        + +

        Upgrading?

        +

        If you have already developed applications using an earlier version +of the SDK, please read +Upgrading the +SDK, instead. +

        + + +

        Preparing for Installation

        + +

        Before you begin, take a moment to confirm that your development machine meets the +System Requirements. +

        + +

        If you will be developing on Eclipse with the Android Development +Tools (ADT) Plugin — the recommended path if you are new to +Android — make sure that you have a suitable version of Eclipse +installed on your computer (3.3 or newer). If you need to install Eclipse, you can +download it from this location:

        + +

        http://www.eclipse.org/downloads/

        + +

        A Java or RCP version of Eclipse is recommended.

        + +

        Installing the SDK

        + +

        After downloading the SDK, unpack the .zip archive to a suitable location on your machine. +By default, the SDK files are unpacked into a directory named +android_sdk_<platform>_<release>. +The directory contains a local copy of the documentation (accessible by opening +documentation.html in your browser) and the subdirectories +tools/, add-ons/, platforms/, and others. Inside +each subdirectory of platforms/ you'll find samples/, which includes +code samples that are specific to each version of the platform.

        + +

        Make a note of the name and location of the unpacked SDK directory on your system — you +will need to refer to the SDK directory later, when setting up the Android plugin or when +using the SDK tools.

        + +

        Optionally, you may want to add the location of the SDK's primary tools directory +to your system PATH. The primary tools/ directory is located at the root of the +SDK folder. Adding tools to your path lets you run Android Debug Bridge (adb) and +the other command line tools without +needing to supply the full path to the tools directory.

        +
          +
        • On Linux, edit your ~/.bash_profile or ~/.bashrc file. Look + for a line that sets the PATH environment variable and add the + full path to the tools/ directory to it. If you don't + see a line setting the path, you can add one:
        • + +
            export PATH=${PATH}:<your_sdk_dir>/tools
          + +
        • On a Mac, look in your home directory for .bash_profile and + proceed as for Linux. You can create the .bash_profile if + you haven't already set one up on your machine.
        • + +
        • On Windows, right-click on My Computer, and select Properties. + Under the Advanced tab, hit the Environment Variables button, and in the + dialog that comes up, double-click on Path (under System Variables). Add the full path to the + tools/ directory to the path.
        • +
        + +

        Note that, if you update your SDK in the future, you +should remember to update your PATH settings to point to the new location, if different.

        + +

        If you will be using the Eclipse IDE as your development environment, +the next section describes how to install the Android Development Tools plugin and set up Eclipse. +If you choose not to use Eclipse, you can +develop Android applications in an IDE of your choice and then compile, debug and deploy using +the tools included in the SDK (skip to Next Steps).

        + + +

        Installing the ADT Plugin for Eclipse

        + +

        Android offers a custom plugin for the Eclipse IDE, called Android +Development Tools (ADT), that is designed to give you a powerful, +integrated environment in which to build Android applications. It +extends the capabilites of Eclipse to let you quickly set up new Android +projects, create an application UI, add components based on the Android +Framework API, debug your applications using the Android SDK tools, and even export +signed (or unsigned) APKs in order to distribute your application.

        + +

        In general, using Eclipse with ADT is a highly recommended +approach to Android development and is the fastest way to get started. +(If you prefer to work in an IDE other than Eclipse, +you do not need to install Eclipse or ADT, instead, you can directly +use the SDK tools to build and debug your application.)

        + +

        Once you have Eclipse installed, as described in Preparing for +Installation, follow the steps below to +download the ADT plugin and install it in your respective Eclipse +environment.

        + + + + + + + +
        Eclipse 3.3 (Europa)Eclipse 3.4 (Ganymede)
        + +
          +
        1. Start Eclipse, then select Help > Software Updates +> Find and Install....
        2. +
        3. In the dialog that appears, select Search for new features to install +and click Next.
        4. +
        5. Click New Remote Site.
        6. +
        7. In the resulting dialog box, enter a name for the remote site (e.g. "Android Plugin") and + enter the URL: +
          https://dl-ssl.google.com/android/eclipse/
          +

          If you have trouble aqcuiring the plugin, try using "http" in the URL, + instead of "https" (https is preferred for security reasons).

          +

          Click OK.

        8. +
        9. You should now see the new site added to the search list (and checked). + Click Finish.
        10. +
        11. In the subsequent Search Results dialog box, select the checkbox for the + "Android Plugin". + This will select the nested tools: "Android DDMS" and "Android Development Tools". + Click Next.
        12. +
        13. Read and accept the license agreement, then click Next.
        14. +
        15. On the following Installation window, click Finish.
        16. +
        17. The ADT plugin is not digitally signed. Accept the installation anyway + by clicking Install All.
        18. +
        19. Restart Eclipse.
        20. +
        + +
        + + +
          +
        1. Start Eclipse, then select Help > Software Updates....
        2. +
        3. In the dialog that appears, click the Available Software tab.
        4. +
        5. Click Add Site...
        6. +
        7. Enter the Location: +
          https://dl-ssl.google.com/android/eclipse/
          +

          If you have trouble aqcuiring the plugin, try using "http" in the Location URL, + instead of "https" (https is preferred for security reasons).

          +

          Click OK.

        8. +
        9. Back in the Available Software view, you should see the plugin listed by the URL, + with "Developer Tools" nested within it. Select the checkbox next to + Developer Tools and click Install...
        10. +
        11. On the subsequent Install window, "Android DDMS" and "Android Development Tools" + should both be checked. Click Next.
        12. +
        13. Read and accept the license agreement, then click Finish.
        14. +
        15. Restart Eclipse.
        16. +
        + +
        + +

        Now modify your Eclipse preferences to point to the Android SDK directory:

        +
          +
        1. Select Window > Preferences... to open the Preferences + panel (Mac: Eclipse > Preferences).
        2. +
        3. Select Android from the left panel.
        4. +
        5. For the SDK Location in the main panel, click Browse... and +locate your downloaded SDK directory.
        6. +
        7. Click Apply, then OK.
        8. +
        + +

        Done! If you haven't encountered any problems, then you're ready to +begin developing Android applications. See the +Next Steps section for suggestions on how to start.

        + + +

        Troubleshooting ADT Installation

        +

        +If you are having trouble downloading the ADT plugin after following the steps above, here are +some suggestions:

        + +
          +
        • If Eclipse can not find the remote update site containing the ADT plugin, try changing + the remote site URL to use http, rather than https. That is, set the Location for the remote site to: +
          http://dl-ssl.google.com/android/eclipse/
        • +
        • If you are behind a firewall (such as a corporate firewall), make + sure that you have properly configured your proxy settings in Eclipse. + In Eclipse 3.3/3.4, you can configure proxy information from the main + Eclipse menu in Window (on Mac, Eclipse) > + Preferences > General > + Network Connections.
        • +
        +

        +If you are still unable to use Eclipse to download the ADT plugin as a remote update site, you +can download the ADT zip file to your local machine and manually install the it: +

        +
          +
        1. Download the ADT zip file (do not unpack it).
        2. +
        3. Follow steps 1 and 2 in the default install instructions (above).
        4. +
        5. In Eclipse 3.3, click New Archive Site....
          + In Eclipse 3.4, click Add Site..., then Archive...
        6. +
        7. Browse and select the downloaded zip file.
        8. +
        9. Follow the remaining procedures, above, starting from steps 5.
        10. +
        +

        To update your plugin once you've installed using the zip file, you will have to +follow these steps again instead of the default update instructions.

        + +

        Other install errors

        + +

        Note that there are features of ADT that require some optional +Eclipse components (for example, WST). If you encounter an error when +installing ADT, your Eclipse installion might not include these components. +For information about how to quickly add the necessary components to your +Eclipse installation, see the troubleshooting topic +ADT +Installation Error: "requires plug-in org.eclipse.wst.sse.ui".

        + +

        For Linux users

        +

        If you encounter this error when installing the ADT Plugin for Eclipse: +

        +An error occurred during provisioning.
        +Cannot connect to keystore.
        +JKS
        +

        +...then your development machine lacks a suitable Java VM. Installing Sun +Java 6 will resolve this issue and you can then reinstall the ADT +Plugin.

        + + +

        Next Steps

        +

        Once you have completed installation, you are ready to +begin developing applications. Here are a few ways you can get started:

        + +

        Learn about Android

        +
          +
        • Take a look at the Dev + Guide and the types of information it provides
        • +
        • Read an introduction to Android as a platform in What is + Android?
        • +
        • Learn about the Android framework and how applications run on it in + Application + Fundamentals
        • +
        • Take a look at the Android framework API specification in the Reference tab
        • +
        + +

        Explore the SDK

        + + +

        Explore some code

        +
          +
        • Set up a Hello + World application (highly recommended, especially for Eclipse users)
        • +
        • Follow the + Notepad Tutorial to build a full Android application
        • +
        • Create a new project for one of the other sample applications + included in <sdk>/platforms/<platfrom>/samples, + then compile and run it in your development environment
        • +
        + +

        Visit the Android developer groups

        +
          +
        • Take a look at the Community tab to see a list of + Android developers groups. In particular, you might want to look at the + Android + Developers group to get a sense for what the Android developer + community is like.
        • +
        + + +

        Installation Notes

        + +

        Ubuntu Linux Notes

        + +
          +
        • If you need help installing and configuring Java on your + development machine, you might find these resources helpful: + +
        • +
        • Here are the steps to install Java and Eclipse, prior to installing + the Android SDK and ADT Plugin. +
            +
          1. If you are running a 64-bit distribution on your development + machine, you need to install the ia32-libs package using + apt-get:: +
            apt-get install ia32-libs
            +
          2. +
          3. Next, install Java:
            apt-get install sun-java6-bin
          4. +
          5. The Ubuntu package manager does not currently offer an Eclipse 3.3 + version for download, so we recommend that you download Eclipse from + eclipse.org (http://www.eclipse.org/ + downloads/). A Java or RCP version of Eclipse is recommended.
          6. +
          7. Follow the steps given in previous sections to install the SDK + and the ADT plugin.
          8. +
          +
        • +
        + +

        Other Linux Notes

        + +
          +
        • If JDK is already installed on your development computer, please + take a moment to make sure that it meets the version requirements listed + in the System Requirements. + In particular, note that some Linux distributions may include JDK 1.4 or Gnu + Compiler for Java, both of which are not supported for Android development.
        • +
        + + + diff --git a/docs/html/sdk/1.5_r2/requirements.jd b/docs/html/sdk/1.5_r2/requirements.jd new file mode 100644 index 000000000000..4ed38a741261 --- /dev/null +++ b/docs/html/sdk/1.5_r2/requirements.jd @@ -0,0 +1,39 @@ +page.title=System Requirements +@jd:body + +

        The sections below describe the system and software requirements for developing Android applications using the Android SDK tools included in Android SDK, Release .

        + +

        Supported Operating Systems

        +
          +
        • Windows XP (32-bit) or Vista (32- or 64-bit)
        • +
        • Mac OS X 10.4.8 or later (x86 only)
        • +
        • Linux (tested on Linux Ubuntu Dapper Drake)
        • +
        + +

        Supported Development Environments

        +
          +
        • Eclipse IDE +
            +
          • Eclipse 3.3 (Europa), 3.4 (Ganymede) +
              +
            • Recommended Eclipse IDE packages: Eclipse IDE for Java EE Developers, Eclipse IDE for Java Developers, Eclipse for RCP/Plug-in Developers
            • +
            • Eclipse JDT plugin (included in most Eclipse IDE packages)
            • +
            • Eclipse Classic IDE package is not supported.
            • +
            +
          • +
          • JDK 5 or JDK 6 (JRE alone is not sufficient)
          • +
          • Android Development Tools plugin (optional)
          • +
          • Not compatible with Gnu Compiler for Java (gcj)
          • +
          +
        • +
        • Other development environments or IDEs +
            +
          • JDK 5 or JDK 6 (JRE alone is not sufficient)
          • +
          • Apache Ant 1.6.5 or later for Linux and Mac, 1.7 or later for Windows
          • +
          • Not compatible with Gnu Compiler for Java (gcj)
          • +
          +
        • +
        + +

        Note: If JDK is already installed on your development computer, please take a moment to make sure that it meets the version requirements listed above. In +particular, note that some Linux distributions may include JDK 1.4 or Gnu Compiler for Java, both of which are not supported for Android development.

        \ No newline at end of file diff --git a/docs/html/sdk/1.5_r2/upgrading.jd b/docs/html/sdk/1.5_r2/upgrading.jd new file mode 100644 index 000000000000..bb5fc60e67f8 --- /dev/null +++ b/docs/html/sdk/1.5_r2/upgrading.jd @@ -0,0 +1,395 @@ +page.title=Upgrading the SDK +sdk.version=1.5_r2 +@jd:body + + +
        +
        + +

        Upgrading the SDK

        +
          +
        • The Android 1.5 SDK uses a new project structure and a new ADT plugin (ADT 0.9).
        • +
        • To move existing projects into the SDK, you must make some minor changes in your + development environment.
        • +
        • The new ADT plugin (ADT 0.9) is not compatible with projects created in previous SDKs.
        • +
        • You need to uninstall your existing ADT plugin, before installing ADT 0.9.
        • +
        + +

        In this document

        +
          +
        1. Install the SDK
        2. +
        3. Update Your Eclipse ADT Plugin
        4. +
        5. Update Your Projects +
            +
          1. Eclipse Users
          2. +
          3. Ant Users
          4. +
          +
        6. +
        7. Migrate Your Applications +
          1. Future-proof your apps
          +
        8. +
        + +

        Migrating references

        +
          +
        1. Android 1.5 API Differences
        2. +
        3. Future-Proofing +Your Apps »
        4. +
        5. UI +framework changes in Android 1.5 »
        6. +
        + +
        +
        + +

        This document describes how to move your development environment and existing +Android applications from an Android 1.0 or 1.1 SDK to the Android 1.5 SDK. +If you are migrating applications from an SDK older than 1.0, please also read the upgrading +document available in the Android 1.0 SDK package.

        + +

        There are several compelling reasons to upgrade, such as new SDK tools +that make developing more efficient and new APIs that allow you to expand the feature-set +of your applications. However, even if you or your applications don't require these enhancements, +it's important that you upgrade to ensure that your applications run properly on the +Android 1.5 platform.

        + +

        The Android 1.5 platform will soon be deployable to devices around the world. +If you have already released Android applications to the public, you should +test the forward-compatibility of your applications on the latest version of the platform +as soon as possible. It's unlikely that you'll encounter breakage in your applications, but +in the interest of maintaining the best user experience, you should take no risks. +So, please install the new Android SDK and test your applications on Android 1.5.

        + +

        For more information on new SDK features and system changes, +see the Android 1.5 Version Notes.

        + + +

        Install the SDK

        + +

        If you haven't yet downloaded the SDK, download from here +and unpack it into a safe location.

        + +

        Before you begin: +If you had previously setup your PATH variable to point to the SDK tools directory, +then you need to update it to point to the new SDK. For example, for a +.bashrc or .bash_profile file:

        +
        export PATH=$PATH:<your_sdk_dir>/tools
        + +

        If you don't use Eclipse for development, +skip to Update Your Projects.

        + + +

        Update Your Eclipse ADT Plugin

        + +

        If you installed ADT-0.9_pre with the early look 1.5 SDK, there have been +additional changes, so please continue with this guide and update to the final ADT 0.9.

        + +

        A new ADT plugin (version 0.9) is required for the Android 1.5 SDK. +Because the component structure has been changed since Android 1.1, +the Android 1.5 SDK does not work with ADT 0.8 (or older) and previously installed SDKs will not +work with ADT 0.9. However, the Android 1.5 SDK includes an Android 1.1 SDK image that you +can build against while using ADT 0.9.

        + +

        For information about using different system images (such as Android 1.1) +while running this SDK, see Developing +In Eclipse, with ADT or In +Other IDEs, as appropriate for your development environment.

        + +

        In order to upgrade your Eclipse IDE to use the new 0.9 ADT, follow the steps below +for your respective version of Eclipse.

        + +

        Uninstall your previous ADT plugin

        + +

        You must uninstall your existing ADT plugin (0.8 or older). If you do not uninstall it, +you will get a conflict with the Android Editors when installing the new ADT. +(If you have already installed ADT-0.9_pre with the early look 1.5 SDK, you can skip this +uninstall procedure and continue to Install the 0.9 ADT plugin).

        + + + + + + + +
        Eclipse 3.3 (Europa)Eclipse 3.4 (Ganymede)
        + +
          +
        1. Select Help > Software Updates > + Manage Configuration.
        2. +
        3. Expand the list in the left panel to reveal the installed tools.
        4. +
        5. Right-click "Android Editors" and click Uninstall. Click OK + to confirm.
        6. +
        7. Restart Eclipse. +

          (Do not uninstall "Android Development Tools".)

        8. +
        +
        + +
          +
        1. Select Help > Software Updates.
        2. +
        3. Select the Installed Software tab.
        4. +
        5. Select "Android Editors". Click Uninstall.
        6. +
        7. In the next window, be sure "Android Editors" is checked, then click Finish + to uninstall.
        8. +
        9. Restart Eclipse. +

          (Do not uninstall "Android Development Tools".)

        10. +
        +
        + + +

        Install the 0.9 ADT plugin

        + +

        Only install the new plugin once you've completed the procedure to +Uninstall your previous ADT plugin.

        + + + + + + + +
        Eclipse 3.3 (Europa)Eclipse 3.4 (Ganymede)
        + +
          +
        1. Select Help > Software Updates > + Find and Install.
        2. +
        3. Select Search for new features to install.
        4. +
        5. Select the Android plugin entry by checking the box next to it, + then click Finish. +

          (Your original entry for the plugin should still be here. If not, see the guide + to Installing the ADT Plugin.) +

        6. +
        7. In the results, expand the entry for the Android plugin and + be sure that "Developer Tools" is checked, then click Next. + (This will install "Android DDMS" and "Android Development Tools".)
        8. +
        9. Read and accept the license agreement, then click Next. +
        10. In the next window, click Finish to start installation.
        11. +
        12. The ADT plugin is not digitally signed. Accept the installation anyway by clicking + Install All.
        13. +
        14. Restart Eclipse.
        15. +
        +
        + +
          +
        1. Select Help > Software Updates.
        2. +
        3. Select the Available Software tab.
        4. +
        5. Expand the entry for the Andriod plugin (may be listed as the location URL) + and select "Developer Tools" by checking the box next to it, then click + Install.
        6. +
        7. On the next window, "Android DDMS" and "Android Development Tools" + should both be checked. Click Finish.
        8. +
        9. Restart Eclipse.
        10. +
        +
        + +

        If you encounter problems, ensure your ADT is fully uninstalled and then +follow the guide to +Installing the ADT Plugin +for Eclipse.

        + +

        Update your Eclipse SDK Preferences

        + +

        The last step is to update your Eclipse preferences to point to the new SDK directory:

        +
          +
        1. Select Window > Preferences to open the Preferences + panel (Mac: Eclipse > Preferences).
        2. +
        3. Select Android from the left panel.
        4. +
        5. For the SDK Location in the main panel, click Browse + and locate your SDK directory.
        6. +
        7. Click Apply, then OK.
        8. +
        + + +

        Update Your Projects

        + +

        You will now need to update any and all Android projects that you have +developed using a previous version of the Android SDK.

        + + +

        Eclipse users

        + +

        If you use Eclipse to develop applications, use the following procedure to +update each project:

        + +
          +
        1. Right-click on the individual project (in the Package Explorer) + and select Properties.
        2. +
        3. In the properties, open the Android panel and select a "build target" to compile + against. This SDK offers the Android 1.1 and Android 1.5 platforms to choose from. When + you are initially updating your projects to the new SDK, we recommend that you select a build + target with the Android 1.1 platform. Click Apply, then + OK.
        4. +
        + +

        The new plugin creates a gen/ folder in your project, in which it puts the +R.java file +and all automatically generated AIDL java files. If you get an error such as +The type R is already defined, +then you probably need to delete your old R.java or your old auto-generated +AIDL Java files in the src/ folder. +(This does not apply to your own hand-crafted parcelable AIDL java files.)

        + +

        Note that, with the Android 1.5 SDK, there is a new process for running +applications in the Android Emulator. +Specifically, you must create an Android Virtual Device (AVD) before you can launch an instance +of the Emulator. Before attempting to run your applications with the new SDK, +please continue with the section below to +Migrate Your Applications.

        + + +

        Ant users

        + +

        If you build your projects using the Ant tool (rather than with Eclipse), note the +following changes with the new SDK tools.

        + +

        build.xml has changed

        + +

        You must re-create your build.xml file.

        + +

        If you had customized your build.xml, first make a copy of it:

        + +
        +$ cd my-project
        +$ cp build.xml build.xml.old
        +
        + +

        Now use the new android tool (located in your_sdk/tools/) +to create a new build.xml that references +a specific platform target:

        + +
        $ android update project --path /path/to/my-project --target 1
        + +

        The "target" corresponds to an Android platform library (including any add-ons, such as +Google APIs) that you would like to build your project against. You can view a list of available +targets (and their corresponding integer ID) with the command, android list targets. +When you are initially updating your projects to the new SDK, we recommend that you select the +first target ("1"), which uses the Android 1.1 platform library.

        + +

        A gen/ folder will be created the first time you build and your R.java and +your AIDL Java files will be generated in here. You must remove +the old R.java and old auto-generated AIDL java files from the +src/ folder. (This +does not apply to your own hand-crafted parcelabe AIDL java files.)

        + +

        Note: The "activitycreator" tool has been replaced +by the new "android" tool. For information on creating new projects with the android tool, +see the documentation about Developing +In Other IDEs.

        + +

        Note that, with the Android 1.5 SDK, there is a new process for running +applications in the Android Emulator. +Specifically, you must create an Android Virtual Device (AVD) before you can launch an instance +of the Emulator. Before attempting to run your applications with the new SDK, +please continue with the section below to +Migrate Your Applications.

        + + +

        Migrate Your Applications

        + +

        After you have completed the process above to Update Your +Projects, you are strongly encouraged to run each of your applications in an instance +of the emulator running the Android 1.5 system image. It's possible (however, unlikely) +that you'll encounter some breakage in your application when you run your applications on +the Android 1.5 system image. Whether you believe your application will be affected by +platform changes or not, it's very important that you test the application's +forward-compatibility on Android 1.5.

        + +

        To test forward-compatibility, simply run your existing application (as-is) on an Android +Emulator that's running the Android 1.5 system image. The following procedure will guide +you through the process to running your existing applications on an emulator. Please read +the following guide completely before you begin.

        + +

        To test your application on an emulator running Android 1.5:

        +
          +
        1. Update Your Project (you should have done this + already, in the section above).
        2. +
        3. Run your existing project, as-is, on an emulator running the Android 1.5 system image. +

          As mentioned in the guide to Update Your Projects, + you should have selected a "build + target" of "1", which compiles your application against the Android 1.1 system image, so there + should be no new errors in your code.

          +

          Eclipse users: follow the + Eclipse guide to + Running Your Application.

          +

          Ant users: follow the + Ant guide to + Running Your Application +

          During the procedure to Running Your Application, select a "deployment target" + for the AVD that includes the Android 1.5 platform. + If your application utilizes the Google Maps APIs (i.e., + MapView), be certain to select a target that includes the Google APIs.

          +

          Once you complete the procedures to run your application in your respective environment, + linked above, return here.

          +
        4. +
        5. With your application running in the emulator, perform all regular testing on the application + to ensure that it functions normally (in both landscape and portrait orientations).
        6. +
        + +

        Chances are, your application runs just fine on the Android 1.5 platform — +new devices will be able to safely install and run your application and +current users who update their devices will be able to continue using your application as usual. +However, if something doesn't work the way you expect, then you might need to revisit +your project and make any necessary changes to your code.

        + +

        You can check for code breakages caused by API changes by opening your project +in Eclipse, changing the "build target" to one using the Android 1.5 platform, +and see where the ADT identifies errors in your code.

        + + +

        Future-proof your apps

        + +

        There have been several API additions made for this release, but there have been +very few actual API changes. Only a couple (relatively unused) elements +have been removed and a few have been deprecated, so your applications written with the +Android 1.1 system library should work just fine. However, +your application is more likely to encounter problems on Android 1.5 +if it performs any of the following:

        + +
          +
        • Uses internal APIs. That is, APIs that are not officially supported + and not available in the reference documentation. Any un-official APIs are always subject + to change (which is why they're un-official) and some have indeed changed. +
        • +
        • Directly manipulates system settings. There are some settings (such as + GPS, data roaming, bluetooth and others) that used to be writable by + applications but have been changed so that they can only be explicitly modified by the user + through the system settings. Refer to {@link android.provider.Settings.Secure} + to see which settings are now secured and cannot be directly changed by your application. +
        • +
        • Uses View hierarchies that are unreasonably deep (more than 10 or so levels) or + broad (more than 30 total). View hierarchies this big have always been troublesome, but + Android 1.5 is much more efficient at exposing this and your application may crash. +
        • +
        • Makes assumptions about the available hardware. With new support for soft keyboards, + not all devices will have full QWERTY keyboards on the hardware. So if your application + listens for special keypress events that only occur on a keypad, then your application + should degrade gracefully when there is no keyboard available. +
        • +
        • Performs its own layout orientation changes based on the acceletometer (or via other + sensors). Some devices running Android 1.5 will automatically rotate the orientation + (and all devices have the option to turn on auto-rotation), so if your application also + attempts to rotate the orientation, it can result in strange behavior. In addition, if your + application uses the accelerometer to detect shaking and you do not want to rotate the + orientation, then you should lock the current orientation with + android:screenOrientation. +
        • +
        + +

        Please read our blog post on Future-Proofing +Your Apps for more information on the issues mentioned above.

        + +

        For information +about other changes made to Android 1.5, refer to the following documents:

        + + +

        If you have additional trouble updating your code, visit the +Android Developers Group +to seek help from other Android developers.

        diff --git a/docs/html/sdk/RELEASENOTES.jd b/docs/html/sdk/RELEASENOTES.jd index c44cef3a55fb..f3a1951f71fb 100644 --- a/docs/html/sdk/RELEASENOTES.jd +++ b/docs/html/sdk/RELEASENOTES.jd @@ -3,8 +3,16 @@ page.title=SDK Release Notes

        This document provides version-specific information about Android SDK releases. For the latest known issues, please ensure that you're viewing this -page at: -http://developer.android.com/sdk/RELEASENOTES.html.

        +page at http://developer.android.com/sdk/RELEASENOTES.html.

        + + +

        Android 1.5 SDK, Release 2

        + +

        This SDK release provides the same developer tools as the Android 1.5 SDK, +Release 1, but provides an updated Android 1.5 system image that includes a +security patch for the issue described in the oCert advisory below:

        + +

        http://www.ocert.org/advisories/ocert-2009-006.html

        Android 1.5 SDK, Release 1

        diff --git a/docs/html/sdk/android-1.5-highlights.jd b/docs/html/sdk/android-1.5-highlights.jd index e6c4f88e4d32..ff64e8c28cf9 100644 --- a/docs/html/sdk/android-1.5-highlights.jd +++ b/docs/html/sdk/android-1.5-highlights.jd @@ -1,5 +1,4 @@ page.title=Android 1.5 Platform Highlights -sdk.version=1.5_r1 @jd:body

        diff --git a/docs/html/sdk/older_releases.jd b/docs/html/sdk/older_releases.jd index ff57a36ec392..3c2bbd403129 100644 --- a/docs/html/sdk/older_releases.jd +++ b/docs/html/sdk/older_releases.jd @@ -1,37 +1,67 @@ -page.title=Older Releases +page.title=Other SDK Releases @jd:body -

        - NOTICE: -

        The SDKs listed on this page are "early-look" versions that were released in +

        This page provides a full list of older, obsolete SDK releases, including +non-current versions of active releases and "early look" versions that were +released before Android 1.0. The list is provided for informational purposes +only.

        + +

        If you are just getting started developing on Android, make sure that you +are using the most current SDK available, +to ensure that your applications will be compatible with the latest +Android-powered devices.

        + +

        Obsolete Releases

        + +

        The table below lists Android SDK releases that have been superceded by an +active release and that are now obsolete. If you are using one of these +releases, please upgrade to the current SDK +release.

        + + + + + + + + + + + + + + + + + +
        Release + Platform(s)Date + Description +
        Android 1.5 SDK, Release 1Android 1.5
        Android 1.1
        April 2009Replaced by Android 1.5 SDK, Release 2. Release notes
        Android 1.0 SDK, Release 1Android 1.0September 2008Replaced by Android 1.0 SDK, Release 2. Release notes
        + +

        Non-Compatible Releases

        + + +

        The SDKs listed below are "early-look" versions that were released in the year preceding the full release of Android 1.0 in September 2008. Because these early-look SDKs were released before the Android 1.0 API specification was finalized, they do not provide a compliant Android execution environment. Consequently, applications that you develop in these SDKs will not be able to run on any Android-powered devices.

        -

        If you have an older application that you built in one of the early-look SDKs, - you must migrate it to the Android - 1.0 SDK (or later release) before you will be able to deploy it to - an Android-powered device. To help with this migration, each SDK package below - provides information about API changes from the previous version. You can find - the migration information in the documentation included in each SDK package.

        - -

        If you are just getting started developing on Android, do not use one of these early-look - SDKs. Instead, develop using the most current - SDK release available, to ensure that your applications will be compatible - with Android-powered devices.

        -
        - +

        If you have an older application that you built in one of the early-look +SDKs, you must migrate it to the Android 1.0 SDK (or later release) before you +will be able to deploy it to an Android-powered device. To help with this +migration, each SDK package below provides information about API changes from +the previous version. You can find the migration information in the +documentation included in each SDK package.

        + - - -

        Android 0.9 SDK beta

        -

        August 18, 2008 - Release Notes

        +

        Android SDK m5-rc15

        +

        August 18, 2008 - Release Notes

        - - + @@ -58,15 +88,11 @@ page.title=Older Releases
        PlatformPackagePackage Size MD5 Checksum
        - - - -

        Version m5-rc15

        +

        Version m5-rc15

        March 3, 2008 - Release Notes

        - - + @@ -93,15 +119,11 @@ page.title=Older Releases
        PlatformPackagePackage Size MD5 Checksum
        - - - -

        Version m5-rc14

        +

        Version m5-rc14

        February 12, 2008 - Release Notes

        - - + @@ -131,12 +153,11 @@ page.title=Older Releases -

        Version m3-rc37a

        +

        Version m3-rc37a

        December 14, 2007 - Release Notes

        PlatformPackagePackage Size MD5 Checksum
        - - + @@ -166,12 +187,11 @@ page.title=Older Releases -

        Version m3-rc22a

        +

        Version m3-rc22a

        November 16, 2007 - Release Notes

        PlatformPackagePackage Size MD5 Checksum
        - - + @@ -201,12 +221,11 @@ page.title=Older Releases -

        Version m3-rc20a

        +

        Version m3-rc20a

        November 12, 2007 - Release Notes

        PlatformPackagePackage Size MD5 Checksum
        - - + diff --git a/docs/html/sdk/preview/features.html b/docs/html/sdk/preview/features.html index 392c0895ec25..a2f085cdce34 100644 --- a/docs/html/sdk/preview/features.html +++ b/docs/html/sdk/preview/features.html @@ -133,10 +133,10 @@
      12. Current SDK Release

        @@ -185,16 +184,6 @@ - - - diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs index 4b55b56177ce..2079dd8a62f3 100644 --- a/docs/html/sdk/sdk_toc.cs +++ b/docs/html/sdk/sdk_toc.cs @@ -26,19 +26,12 @@
      13. Android 1.1 Version Notes
      14. -
      15. -

        Native Development Tools

        - -
      16. Previous SDK Releases

      17. diff --git a/docs/html/search.jd b/docs/html/search.jd index 0a802a6bfcbe..defba3087af3 100644 --- a/docs/html/search.jd +++ b/docs/html/search.jd @@ -2,7 +2,7 @@ page.title=Search Results @jd:body - +
        PlatformPackagePackage Size MD5 Checksum