summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/16.txt4
-rw-r--r--api/current.txt399
-rw-r--r--core/java/android/animation/PropertyValuesHolder.java32
-rw-r--r--core/java/android/app/Activity.java2
-rw-r--r--core/java/android/app/ActivityOptions.java5
-rw-r--r--core/java/android/app/Dialog.java10
-rw-r--r--core/java/android/app/Notification.java142
-rw-r--r--core/java/android/content/AbstractThreadedSyncAdapter.java9
-rw-r--r--core/java/android/content/Intent.java12
-rw-r--r--core/java/android/content/SyncManager.java58
-rw-r--r--core/java/android/content/SyncOperation.java4
-rw-r--r--core/java/android/content/SyncStorageEngine.java4
-rw-r--r--core/java/android/content/pm/ApplicationInfo.java1
-rw-r--r--core/java/android/content/pm/PackageParser.java2
-rw-r--r--core/java/android/hardware/Camera.java131
-rw-r--r--core/java/android/net/INetworkStatsService.aidl2
-rw-r--r--core/java/android/net/NetworkIdentity.java11
-rw-r--r--core/java/android/net/NetworkState.java8
-rw-r--r--core/java/android/os/ConditionVariable.java2
-rw-r--r--core/java/android/os/HandlerThread.java2
-rw-r--r--core/java/android/os/INetworkManagementService.aidl3
-rw-r--r--core/java/android/os/Message.java4
-rw-r--r--core/java/android/os/Trace.java1
-rw-r--r--core/java/android/provider/SocialContract.java187
-rw-r--r--core/java/android/service/textservice/SpellCheckerService.java8
-rw-r--r--core/java/android/text/TextDirectionHeuristic.java2
-rw-r--r--core/java/android/text/TextDirectionHeuristics.java1
-rw-r--r--core/java/android/util/LocaleUtil.java7
-rw-r--r--core/java/android/util/MathUtils.java4
-rw-r--r--core/java/android/view/ActionMode.java13
-rw-r--r--core/java/android/view/Display.java9
-rw-r--r--core/java/android/view/DisplayList.java8
-rw-r--r--core/java/android/view/FocusFinder.java52
-rw-r--r--core/java/android/view/Gravity.java4
-rw-r--r--core/java/android/view/View.java153
-rw-r--r--core/java/android/view/ViewGroup.java17
-rw-r--r--core/java/android/view/ViewPropertyAnimator.java22
-rw-r--r--core/java/android/view/ViewRootImpl.java67
-rw-r--r--core/java/android/view/accessibility/AccessibilityEvent.java43
-rw-r--r--core/java/android/view/accessibility/AccessibilityNodeInfo.java150
-rw-r--r--core/java/android/webkit/AutoCompletePopup.java47
-rw-r--r--core/java/android/webkit/WebViewClassic.java119
-rw-r--r--core/java/android/webkit/WebViewCore.java18
-rw-r--r--core/java/android/webkit/WebViewInputDispatcher.java112
-rw-r--r--core/java/android/widget/ActivityChooserModel.java10
-rw-r--r--core/java/android/widget/ActivityChooserView.java46
-rwxr-xr-xcore/java/android/widget/AppSecurityPermissions.java632
-rw-r--r--core/java/android/widget/CalendarView.java52
-rw-r--r--core/java/android/widget/HorizontalScrollView.java27
-rw-r--r--core/java/android/widget/ImageView.java3
-rw-r--r--core/java/android/widget/LinearLayout.java4
-rw-r--r--core/java/android/widget/ProgressBar.java39
-rw-r--r--core/java/android/widget/RemoteViews.java8
-rw-r--r--core/java/android/widget/ScrollView.java31
-rw-r--r--core/java/android/widget/ShareActionProvider.java7
-rw-r--r--core/java/android/widget/SpellChecker.java144
-rw-r--r--core/java/android/widget/TextView.java11
-rw-r--r--core/java/com/android/internal/app/ActionBarImpl.java159
-rw-r--r--core/java/com/android/internal/app/ResolverActivity.java164
-rw-r--r--core/java/com/android/internal/net/NetworkStatsFactory.java165
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java2
-rw-r--r--core/java/com/android/internal/view/StandaloneActionMode.java1
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuItemView.java16
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuView.java20
-rw-r--r--core/java/com/android/internal/widget/ActionBarOverlayLayout.java31
-rw-r--r--core/jni/android/graphics/TextLayoutCache.cpp74
-rw-r--r--core/jni/android/graphics/TextLayoutCache.h3
-rw-r--r--core/jni/android_hardware_SensorManager.cpp2
-rw-r--r--core/res/AndroidManifest.xml831
-rw-r--r--core/res/res/drawable-hdpi/perm_group_accounts.pngbin0 -> 1745 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_affects_battery.pngbin0 -> 1241 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_app_info.pngbin0 -> 1714 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_audio_settings.pngbin0 -> 2008 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_bluetooth.pngbin0 -> 1579 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_bookmarks.pngbin0 -> 2085 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_calendar.pngbin0 -> 1419 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_camera.pngbin0 -> 1781 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_device_alarms.pngbin0 -> 2021 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_display.pngbin0 -> 1218 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_location.pngbin0 -> 1574 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_messages.pngbin0 -> 1634 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_microphone.pngbin0 -> 1600 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_network.pngbin0 -> 1826 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_personal_info.pngbin0 -> 1603 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_phone_calls.pngbin0 -> 1691 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_screenlock.pngbin0 -> 1383 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_shortrange_network.pngbin0 -> 1319 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_social_info.pngbin0 -> 2075 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_status_bar.pngbin0 -> 1272 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_storage.pngbin0 -> 1644 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_sync_settings.pngbin0 -> 1938 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_system_clock.pngbin0 -> 1794 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_system_tools.pngbin0 -> 1535 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_user_dictionary.pngbin0 -> 1386 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_user_dictionary_write.pngbin0 -> 1853 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_voicemail.pngbin0 -> 1655 bytes
-rw-r--r--core/res/res/drawable-hdpi/perm_group_wallpaper.pngbin0 -> 1431 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_accounts.pngbin0 -> 1471 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_affects_battery.pngbin0 -> 1116 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_app_info.pngbin0 -> 1426 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_audio_settings.pngbin0 -> 1582 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_bluetooth.pngbin0 -> 1355 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_bookmarks.pngbin0 -> 1609 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_calendar.pngbin0 -> 1404 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_camera.pngbin0 -> 1465 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_device_alarms.pngbin0 -> 1546 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_display.pngbin0 -> 1203 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_location.pngbin0 -> 1360 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_messages.pngbin0 -> 1418 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_microphone.pngbin0 -> 1319 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_network.pngbin0 -> 1434 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_personal_info.pngbin0 -> 1359 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_phone_calls.pngbin0 -> 1429 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_screenlock.pngbin0 -> 1272 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_shortrange_network.pngbin0 -> 1171 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_social_info.pngbin0 -> 1590 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_status_bar.pngbin0 -> 1160 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_storage.pngbin0 -> 1338 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_sync_settings.pngbin0 -> 1522 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_system_clock.pngbin0 -> 1408 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_system_tools.pngbin0 -> 1339 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_user_dictionary.pngbin0 -> 1253 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_user_dictionary_write.pngbin0 -> 1530 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_voicemail.pngbin0 -> 1326 bytes
-rw-r--r--core/res/res/drawable-mdpi/perm_group_wallpaper.pngbin0 -> 1240 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_accounts.pngbin0 -> 2030 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_affects_battery.pngbin0 -> 1304 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_app_info.pngbin0 -> 1839 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_audio_settings.pngbin0 -> 2489 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_bluetooth.pngbin0 -> 1948 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_bookmarks.pngbin0 -> 2657 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_calendar.pngbin0 -> 1680 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_camera.pngbin0 -> 2050 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_device_alarms.pngbin0 -> 2626 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_display.pngbin0 -> 1425 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_location.pngbin0 -> 1911 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_messages.pngbin0 -> 1927 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_microphone.pngbin0 -> 1866 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_network.pngbin0 -> 2190 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_personal_info.pngbin0 -> 1910 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_phone_calls.pngbin0 -> 2021 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_screenlock.pngbin0 -> 1561 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_shortrange_network.pngbin0 -> 1498 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_social_info.pngbin0 -> 2541 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_status_bar.pngbin0 -> 1407 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_storage.pngbin0 -> 1924 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_sync_settings.pngbin0 -> 2338 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_system_clock.pngbin0 -> 2284 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_system_tools.pngbin0 -> 1641 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_user_dictionary.pngbin0 -> 1452 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_user_dictionary_write.pngbin0 -> 2166 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_voicemail.pngbin0 -> 1971 bytes
-rw-r--r--core/res/res/drawable-xhdpi/perm_group_wallpaper.pngbin0 -> 1544 bytes
-rw-r--r--core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml4
-rw-r--r--core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml4
-rw-r--r--core/res/res/layout-sw600dp/keyguard_screen_unlock_landscape.xml4
-rw-r--r--core/res/res/layout-sw600dp/keyguard_screen_unlock_portrait.xml4
-rw-r--r--core/res/res/layout/app_permission_item.xml38
-rw-r--r--core/res/res/layout/app_permission_item_old.xml55
-rwxr-xr-xcore/res/res/layout/app_perms_summary.xml79
-rw-r--r--core/res/res/layout/notification_template_base.xml19
-rw-r--r--core/res/res/layout/notification_template_big_base.xml7
-rw-r--r--core/res/res/layout/notification_template_big_text.xml12
-rw-r--r--core/res/res/layout/notification_template_inbox.xml37
-rw-r--r--core/res/res/layout/resolve_list_item.xml63
-rw-r--r--core/res/res/layout/resolver_grid.xml69
-rw-r--r--core/res/res/values-af/strings.xml90
-rw-r--r--core/res/res/values-am/strings.xml94
-rw-r--r--core/res/res/values-ar/strings.xml76
-rw-r--r--core/res/res/values-be/strings.xml76
-rw-r--r--core/res/res/values-bg/strings.xml76
-rw-r--r--core/res/res/values-ca/strings.xml40
-rw-r--r--core/res/res/values-cs/strings.xml76
-rw-r--r--core/res/res/values-da/strings.xml48
-rw-r--r--core/res/res/values-de/strings.xml84
-rw-r--r--core/res/res/values-el/strings.xml40
-rw-r--r--core/res/res/values-en-rGB/strings.xml40
-rw-r--r--core/res/res/values-es-rUS/strings.xml100
-rw-r--r--core/res/res/values-es/strings.xml76
-rw-r--r--core/res/res/values-et/strings.xml78
-rw-r--r--core/res/res/values-fa/strings.xml76
-rw-r--r--core/res/res/values-fi/strings.xml76
-rw-r--r--core/res/res/values-fr/strings.xml78
-rw-r--r--core/res/res/values-hi/strings.xml76
-rw-r--r--core/res/res/values-hr/strings.xml76
-rw-r--r--core/res/res/values-hu/strings.xml78
-rw-r--r--core/res/res/values-in/strings.xml76
-rw-r--r--core/res/res/values-it/strings.xml76
-rw-r--r--core/res/res/values-iw/strings.xml76
-rw-r--r--core/res/res/values-ja/strings.xml76
-rw-r--r--core/res/res/values-ko/strings.xml76
-rw-r--r--core/res/res/values-large/dimens.xml4
-rw-r--r--core/res/res/values-lt/strings.xml86
-rw-r--r--core/res/res/values-lv/strings.xml78
-rw-r--r--core/res/res/values-ms/strings.xml78
-rw-r--r--core/res/res/values-nb/strings.xml86
-rw-r--r--core/res/res/values-nl/strings.xml40
-rw-r--r--core/res/res/values-pl/strings.xml78
-rw-r--r--core/res/res/values-pt-rPT/strings.xml84
-rw-r--r--core/res/res/values-pt/strings.xml76
-rw-r--r--core/res/res/values-rm/strings.xml73
-rw-r--r--core/res/res/values-ro/strings.xml78
-rw-r--r--core/res/res/values-ru/strings.xml76
-rw-r--r--core/res/res/values-sk/strings.xml82
-rw-r--r--core/res/res/values-sl/strings.xml84
-rw-r--r--core/res/res/values-sr/strings.xml76
-rw-r--r--core/res/res/values-sv/strings.xml76
-rw-r--r--core/res/res/values-sw/strings.xml211
-rw-r--r--core/res/res/values-sw600dp/config.xml5
-rw-r--r--core/res/res/values-sw600dp/dimens.xml4
-rw-r--r--core/res/res/values-sw720dp/config.xml22
-rw-r--r--core/res/res/values-sw720dp/dimens.xml18
-rw-r--r--core/res/res/values-th/strings.xml86
-rw-r--r--core/res/res/values-tl/strings.xml76
-rw-r--r--core/res/res/values-tr/strings.xml78
-rw-r--r--core/res/res/values-uk/strings.xml78
-rw-r--r--core/res/res/values-vi/strings.xml211
-rw-r--r--core/res/res/values-w500dp/bools.xml19
-rw-r--r--core/res/res/values-xlarge/dimens.xml4
-rw-r--r--core/res/res/values-zh-rCN/strings.xml76
-rw-r--r--core/res/res/values-zh-rTW/strings.xml86
-rw-r--r--core/res/res/values-zu/strings.xml108
-rw-r--r--core/res/res/values/bools.xml1
-rwxr-xr-xcore/res/res/values/config.xml4
-rw-r--r--core/res/res/values/public.xml36
-rwxr-xr-xcore/res/res/values/strings.xml121
-rw-r--r--core/res/res/values/themes.xml7
-rw-r--r--core/tests/coretests/res/raw/net_dev_typical8
-rw-r--r--core/tests/coretests/res/raw/xt_qtaguid_iface_fmt_typical4
-rw-r--r--core/tests/coretests/src/android/content/SyncStorageEngineTest.java4
-rw-r--r--core/tests/coretests/src/com/android/internal/net/NetworkStatsFactoryTest.java65
-rw-r--r--data/fonts/Android.mk2
-rw-r--r--data/fonts/DroidNaskh-Regular-Shift.ttfbin114332 -> 0 bytes
-rwxr-xr-xdata/fonts/DroidNaskh-Regular-SystemUI.ttfbin0 -> 158096 bytes
-rw-r--r--data/fonts/fallback_fonts-ja.xml2
-rw-r--r--data/fonts/fallback_fonts.xml2
-rw-r--r--data/fonts/fonts.mk2
-rw-r--r--graphics/java/android/graphics/ImageFormat.java16
-rw-r--r--graphics/java/android/graphics/Paint.java2
-rw-r--r--graphics/java/android/graphics/drawable/Drawable.java4
-rw-r--r--libs/hwui/DisplayListRenderer.cpp16
-rw-r--r--libs/hwui/DisplayListRenderer.h11
-rw-r--r--media/java/android/media/AudioService.java66
-rw-r--r--media/java/android/media/MediaCodec.java397
-rw-r--r--media/java/android/media/MediaCodecInfo.java213
-rw-r--r--media/java/android/media/MediaCodecList.java50
-rw-r--r--media/java/android/media/MediaCrypto.java62
-rw-r--r--media/java/android/media/MediaCryptoException.java27
-rw-r--r--media/java/android/media/MediaExtractor.java162
-rw-r--r--media/java/android/media/MediaFormat.java290
-rw-r--r--media/jni/android_media_MediaCodec.cpp8
-rw-r--r--media/jni/android_media_MediaCodecList.cpp12
-rw-r--r--media/jni/android_media_MediaCrypto.cpp8
-rw-r--r--media/jni/android_media_MediaExtractor.cpp10
-rw-r--r--media/mca/filterpacks/java/android/filterpacks/imageproc/GrainFilter.java83
-rw-r--r--native/android/Android.mk3
-rw-r--r--native/graphics/jni/Android.mk3
-rw-r--r--packages/SystemUI/res/layout-sw600dp/super_status_bar.xml6
-rw-r--r--packages/SystemUI/res/layout/super_status_bar.xml4
-rw-r--r--packages/SystemUI/src/com/android/systemui/SearchPanelView.java43
-rw-r--r--packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java121
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java47
-rw-r--r--policy/src/com/android/internal/policy/impl/LockScreen.java30
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java15
-rw-r--r--services/java/com/android/server/ConnectivityService.java35
-rw-r--r--services/java/com/android/server/InputMethodManagerService.java124
-rw-r--r--services/java/com/android/server/LocationManagerService.java13
-rw-r--r--services/java/com/android/server/NetworkManagementService.java10
-rw-r--r--services/java/com/android/server/NetworkTimeUpdateService.java11
-rw-r--r--services/java/com/android/server/ThrottleService.java2
-rwxr-xr-xservices/java/com/android/server/VibratorService.java12
-rw-r--r--services/java/com/android/server/accessibility/AccessibilityManagerService.java14
-rw-r--r--services/java/com/android/server/input/InputManagerService.java10
-rw-r--r--services/java/com/android/server/net/NetworkPolicyManagerService.java39
-rw-r--r--services/java/com/android/server/net/NetworkStatsCollection.java10
-rw-r--r--services/java/com/android/server/net/NetworkStatsRecorder.java19
-rw-r--r--services/java/com/android/server/net/NetworkStatsService.java145
-rw-r--r--services/java/com/android/server/wm/BlackFrame.java23
-rw-r--r--services/java/com/android/server/wm/ScreenRotationAnimation.java1
-rwxr-xr-xservices/java/com/android/server/wm/WindowManagerService.java5
-rw-r--r--services/jni/com_android_server_input_InputManagerService.cpp24
-rw-r--r--services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java18
-rw-r--r--services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java28
-rw-r--r--services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java7
-rw-r--r--services/tests/servicestests/src/com/android/server/net/NetworkStatsCollectionTest.java12
-rw-r--r--telephony/java/com/android/internal/telephony/ServiceStateTracker.java55
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java18
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java22
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java22
-rw-r--r--tests/BiDiTests/AndroidPrivate.mk (renamed from tests/BiDiTests/Android.mk)0
-rw-r--r--tests/HwAccelerationTest/AndroidManifest.xml9
-rw-r--r--tests/HwAccelerationTest/src/com/android/test/hwui/PathDestructionActivity.java101
-rw-r--r--tools/makekeycodes/Android.mk13
-rw-r--r--tools/makekeycodes/makekeycodes.cpp49
-rw-r--r--wifi/java/android/net/wifi/WifiStateMachine.java70
298 files changed, 8726 insertions, 3008 deletions
diff --git a/api/16.txt b/api/16.txt
index 1fc3b54140ef..62654ae60971 100644
--- a/api/16.txt
+++ b/api/16.txt
@@ -21779,7 +21779,6 @@ package android.view {
method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect);
method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect);
method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect);
- method public static int getAbsoluteGravity(int, int);
method public static boolean isHorizontal(int);
method public static boolean isVertical(int);
field public static final int AXIS_CLIP = 8; // 0x8
@@ -23502,8 +23501,6 @@ package android.view {
method public void requestDisallowInterceptTouchEvent(boolean);
method public boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
method public void requestTransparentRegion(android.view.View);
- method protected void resetResolvedLayoutDirection();
- method protected void resetResolvedTextDirection();
method public void scheduleLayoutAnimation();
method public void setAddStatesFromChildren(boolean);
method public void setAlwaysDrawnWithCacheEnabled(boolean);
@@ -27296,7 +27293,6 @@ package android.widget {
method public void removeTextChangedListener(android.text.TextWatcher);
method protected void resetResolvedDrawables();
method protected void resolveDrawables();
- method protected void resolveTextDirection();
method public void setAllCaps(boolean);
method public final void setAutoLinkMask(int);
method public void setCompoundDrawablePadding(int);
diff --git a/api/current.txt b/api/current.txt
index ab1819677ae1..300a69005065 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -141,16 +141,36 @@ package android {
public static final class Manifest.permission_group {
ctor public Manifest.permission_group();
field public static final java.lang.String ACCOUNTS = "android.permission-group.ACCOUNTS";
+ field public static final java.lang.String AFFECTS_BATTERY = "android.permission-group.AFFECTS_BATTERY";
+ field public static final java.lang.String APP_INFO = "android.permission-group.APP_INFO";
+ field public static final java.lang.String AUDIO_SETTINGS = "android.permission-group.AUDIO_SETTINGS";
+ field public static final java.lang.String BLUETOOTH_NETWORK = "android.permission-group.BLUETOOTH_NETWORK";
+ field public static final java.lang.String BOOKMARKS = "android.permission-group.BOOKMARKS";
+ field public static final java.lang.String CALENDAR = "android.permission-group.CALENDAR";
+ field public static final java.lang.String CAMERA = "android.permission-group.CAMERA";
field public static final java.lang.String COST_MONEY = "android.permission-group.COST_MONEY";
field public static final java.lang.String DEVELOPMENT_TOOLS = "android.permission-group.DEVELOPMENT_TOOLS";
+ field public static final java.lang.String DEVICE_ALARMS = "android.permission-group.DEVICE_ALARMS";
+ field public static final java.lang.String DISPLAY = "android.permission-group.DISPLAY";
field public static final java.lang.String HARDWARE_CONTROLS = "android.permission-group.HARDWARE_CONTROLS";
field public static final java.lang.String LOCATION = "android.permission-group.LOCATION";
field public static final java.lang.String MESSAGES = "android.permission-group.MESSAGES";
+ field public static final java.lang.String MICROPHONE = "android.permission-group.MICROPHONE";
field public static final java.lang.String NETWORK = "android.permission-group.NETWORK";
field public static final java.lang.String PERSONAL_INFO = "android.permission-group.PERSONAL_INFO";
field public static final java.lang.String PHONE_CALLS = "android.permission-group.PHONE_CALLS";
+ field public static final java.lang.String SCREENLOCK = "android.permission-group.SCREENLOCK";
+ field public static final java.lang.String SHORTRANGE_NETWORK = "android.permission-group.SHORTRANGE_NETWORK";
+ field public static final java.lang.String SOCIAL_INFO = "android.permission-group.SOCIAL_INFO";
+ field public static final java.lang.String STATUS_BAR = "android.permission-group.STATUS_BAR";
field public static final java.lang.String STORAGE = "android.permission-group.STORAGE";
+ field public static final java.lang.String SYNC_SETTINGS = "android.permission-group.SYNC_SETTINGS";
+ field public static final java.lang.String SYSTEM_CLOCK = "android.permission-group.SYSTEM_CLOCK";
field public static final java.lang.String SYSTEM_TOOLS = "android.permission-group.SYSTEM_TOOLS";
+ field public static final java.lang.String USER_DICTIONARY = "android.permission-group.USER_DICTIONARY";
+ field public static final java.lang.String VOICEMAIL = "android.permission-group.VOICEMAIL";
+ field public static final java.lang.String WALLPAPER = "android.permission-group.WALLPAPER";
+ field public static final java.lang.String WRITE_USER_DICTIONARY = "android.permission-group.WRITE_USER_DICTIONARY";
}
public final class R {
@@ -296,7 +316,7 @@ package android {
field public static final int cacheColorHint = 16843009; // 0x1010101
field public static final int calendarViewShown = 16843596; // 0x101034c
field public static final int calendarViewStyle = 16843613; // 0x101035d
- field public static final int canHandleGestures = 16843699; // 0x10103b3
+ field public static final int canHandleGestures = 16843691; // 0x10103ab
field public static final int canRetrieveWindowContent = 16843653; // 0x1010385
field public static final int candidatesTextStyleSpans = 16843312; // 0x1010230
field public static final deprecated int capitalize = 16843113; // 0x1010169
@@ -537,7 +557,7 @@ package android {
field public static final int imeSubtypeLocale = 16843500; // 0x10102ec
field public static final int imeSubtypeMode = 16843501; // 0x10102ed
field public static final int immersive = 16843456; // 0x10102c0
- field public static final int importantForAccessibility = 16843698; // 0x10103b2
+ field public static final int importantForAccessibility = 16843690; // 0x10103aa
field public static final int inAnimation = 16843127; // 0x1010177
field public static final int includeFontPadding = 16843103; // 0x101015f
field public static final int includeInGlobalSearch = 16843374; // 0x101026e
@@ -575,7 +595,7 @@ package android {
field public static final int itemIconDisabledAlpha = 16843057; // 0x1010131
field public static final int itemPadding = 16843565; // 0x101032d
field public static final int itemTextAppearance = 16843052; // 0x101012c
- field public static final int kcm = 16843696; // 0x10103b0
+ field public static final int kcm = 16843688; // 0x10103a8
field public static final int keepScreenOn = 16843286; // 0x1010216
field public static final int key = 16843240; // 0x10101e8
field public static final int keyBackground = 16843315; // 0x1010233
@@ -602,7 +622,6 @@ package android {
field public static final int layerType = 16843604; // 0x1010354
field public static final int layout = 16842994; // 0x10100f2
field public static final int layoutAnimation = 16842988; // 0x10100ec
- field public static final int layoutDirection = 16843691; // 0x10103ab
field public static final int layout_above = 16843140; // 0x1010184
field public static final int layout_alignBaseline = 16843142; // 0x1010186
field public static final int layout_alignBottom = 16843146; // 0x101018a
@@ -624,10 +643,8 @@ package android {
field public static final int layout_height = 16842997; // 0x10100f5
field public static final int layout_margin = 16842998; // 0x10100f6
field public static final int layout_marginBottom = 16843002; // 0x10100fa
- field public static final int layout_marginEnd = 16843695; // 0x10103af
field public static final int layout_marginLeft = 16842999; // 0x10100f7
field public static final int layout_marginRight = 16843001; // 0x10100f9
- field public static final int layout_marginStart = 16843694; // 0x10103ae
field public static final int layout_marginTop = 16843000; // 0x10100f8
field public static final int layout_row = 16843643; // 0x101037b
field public static final int layout_rowSpan = 16843644; // 0x101037c
@@ -723,24 +740,22 @@ package android {
field public static final int packageNames = 16843649; // 0x1010381
field public static final int padding = 16842965; // 0x10100d5
field public static final int paddingBottom = 16842969; // 0x10100d9
- field public static final int paddingEnd = 16843693; // 0x10103ad
field public static final int paddingLeft = 16842966; // 0x10100d6
field public static final int paddingRight = 16842968; // 0x10100d8
- field public static final int paddingStart = 16843692; // 0x10103ac
field public static final int paddingTop = 16842967; // 0x10100d7
field public static final int panelBackground = 16842846; // 0x101005e
field public static final int panelColorBackground = 16842849; // 0x1010061
field public static final int panelColorForeground = 16842848; // 0x1010060
field public static final int panelFullBackground = 16842847; // 0x101005f
field public static final int panelTextAppearance = 16842850; // 0x1010062
- field public static final int parentActivityName = 16843697; // 0x10103b1
+ field public static final int parentActivityName = 16843689; // 0x10103a9
field public static final deprecated int password = 16843100; // 0x101015c
field public static final int path = 16842794; // 0x101002a
field public static final int pathPattern = 16842796; // 0x101002c
field public static final int pathPrefix = 16842795; // 0x101002b
field public static final int permission = 16842758; // 0x1010006
field public static final int permissionGroup = 16842762; // 0x101000a
- field public static final int permissionGroupFlags = 16843700; // 0x10103b4
+ field public static final int permissionGroupFlags = 16843692; // 0x10103ac
field public static final int persistent = 16842765; // 0x101000d
field public static final int persistentDrawingCache = 16842990; // 0x10100ee
field public static final deprecated int phoneNumber = 16843111; // 0x1010167
@@ -939,7 +954,6 @@ package android {
field public static final int summaryColumn = 16843426; // 0x10102a2
field public static final int summaryOff = 16843248; // 0x10101f0
field public static final int summaryOn = 16843247; // 0x10101ef
- field public static final int supportsRtl = 16843688; // 0x10103a8
field public static final int supportsUploading = 16843419; // 0x101029b
field public static final int switchMinWidth = 16843632; // 0x1010370
field public static final int switchPadding = 16843633; // 0x1010371
@@ -970,7 +984,6 @@ package android {
field public static final int tension = 16843370; // 0x101026a
field public static final int testOnly = 16843378; // 0x1010272
field public static final int text = 16843087; // 0x101014f
- field public static final int textAlignment = 16843690; // 0x10103aa
field public static final int textAllCaps = 16843660; // 0x101038c
field public static final int textAppearance = 16842804; // 0x1010034
field public static final int textAppearanceButton = 16843271; // 0x1010207
@@ -1010,7 +1023,6 @@ package android {
field public static final int textColorTertiary = 16843282; // 0x1010212
field public static final int textColorTertiaryInverse = 16843283; // 0x1010213
field public static final int textCursorDrawable = 16843618; // 0x1010362
- field public static final int textDirection = 16843689; // 0x10103a9
field public static final int textEditNoPasteWindowLayout = 16843541; // 0x1010315
field public static final int textEditPasteWindowLayout = 16843540; // 0x1010314
field public static final int textEditSideNoPasteWindowLayout = 16843615; // 0x101035f
@@ -2917,11 +2929,11 @@ package android.app {
}
public class ActivityOptions {
- method public void join(android.app.ActivityOptions);
method public static android.app.ActivityOptions makeCustomAnimation(android.content.Context, int, int);
method public static android.app.ActivityOptions makeScaleUpAnimation(android.view.View, int, int, int, int);
method public static android.app.ActivityOptions makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
method public android.os.Bundle toBundle();
+ method public void update(android.app.ActivityOptions);
}
public class AlarmManager {
@@ -3752,12 +3764,18 @@ package android.app {
ctor public Notification.BigPictureStyle();
ctor public Notification.BigPictureStyle(android.app.Notification.Builder);
method public android.app.Notification.BigPictureStyle bigPicture(android.graphics.Bitmap);
+ method public android.app.Notification build();
+ method public android.app.Notification.BigPictureStyle setBigContentTitle(java.lang.CharSequence);
+ method public android.app.Notification.BigPictureStyle setSummaryText(java.lang.CharSequence);
}
public static class Notification.BigTextStyle extends android.app.Notification.Style {
ctor public Notification.BigTextStyle();
ctor public Notification.BigTextStyle(android.app.Notification.Builder);
method public android.app.Notification.BigTextStyle bigText(java.lang.CharSequence);
+ method public android.app.Notification build();
+ method public android.app.Notification.BigTextStyle setBigContentTitle(java.lang.CharSequence);
+ method public android.app.Notification.BigTextStyle setSummaryText(java.lang.CharSequence);
}
public static class Notification.Builder {
@@ -3799,11 +3817,18 @@ package android.app {
ctor public Notification.InboxStyle();
ctor public Notification.InboxStyle(android.app.Notification.Builder);
method public android.app.Notification.InboxStyle addLine(java.lang.CharSequence);
+ method public android.app.Notification build();
+ method public android.app.Notification.InboxStyle setBigContentTitle(java.lang.CharSequence);
+ method public android.app.Notification.InboxStyle setSummaryText(java.lang.CharSequence);
}
- public static class Notification.Style {
+ public static abstract class Notification.Style {
ctor public Notification.Style();
- method public android.app.Notification build();
+ method public abstract android.app.Notification build();
+ method protected void checkBuilder();
+ method protected android.widget.RemoteViews getStandardView(int);
+ method protected void internalSetBigContentTitle(java.lang.CharSequence);
+ method protected void internalSetSummaryText(java.lang.CharSequence);
method public void setBuilder(android.app.Notification.Builder);
field protected android.app.Notification.Builder mBuilder;
}
@@ -5638,6 +5663,7 @@ package android.content {
field public static final java.lang.String ACTION_ALL_APPS = "android.intent.action.ALL_APPS";
field public static final java.lang.String ACTION_ANSWER = "android.intent.action.ANSWER";
field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR";
+ field public static final java.lang.String ACTION_ASSIST = "android.intent.action.ASSIST";
field public static final java.lang.String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA";
field public static final java.lang.String ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
@@ -5765,7 +5791,7 @@ package android.content {
field public static final java.lang.String CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST";
field public static final android.os.Parcelable.Creator CREATOR;
field public static final java.lang.String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT";
- field public static final java.lang.String EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE";
+ field public static final deprecated java.lang.String EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE";
field public static final java.lang.String EXTRA_BCC = "android.intent.extra.BCC";
field public static final java.lang.String EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT";
field public static final java.lang.String EXTRA_CC = "android.intent.extra.CC";
@@ -6251,7 +6277,6 @@ package android.content.pm {
field public static final int FLAG_STOPPED = 2097152; // 0x200000
field public static final int FLAG_SUPPORTS_LARGE_SCREENS = 2048; // 0x800
field public static final int FLAG_SUPPORTS_NORMAL_SCREENS = 1024; // 0x400
- field public static final int FLAG_SUPPORTS_RTL = 4194304; // 0x400000
field public static final int FLAG_SUPPORTS_SCREEN_DENSITIES = 8192; // 0x2000
field public static final int FLAG_SUPPORTS_SMALL_SCREENS = 512; // 0x200
field public static final int FLAG_SUPPORTS_XLARGE_SCREENS = 524288; // 0x80000
@@ -8591,7 +8616,6 @@ package android.graphics {
method public android.graphics.Paint.Align getTextAlign();
method public void getTextBounds(java.lang.String, int, int, android.graphics.Rect);
method public void getTextBounds(char[], int, int, android.graphics.Rect);
- method public java.util.Locale getTextLocale();
method public void getTextPath(char[], int, int, float, float, android.graphics.Path);
method public void getTextPath(java.lang.String, int, int, float, float, android.graphics.Path);
method public float getTextScaleX();
@@ -8641,7 +8665,6 @@ package android.graphics {
method public void setStyle(android.graphics.Paint.Style);
method public void setSubpixelText(boolean);
method public void setTextAlign(android.graphics.Paint.Align);
- method public void setTextLocale(java.util.Locale);
method public void setTextScaleX(float);
method public void setTextSize(float);
method public void setTextSkewX(float);
@@ -9276,10 +9299,6 @@ package android.graphics.drawable {
method public abstract void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
}
- public static abstract interface Drawable.Callback2 implements android.graphics.drawable.Drawable.Callback {
- method public abstract int getResolvedLayoutDirection(android.graphics.drawable.Drawable);
- }
-
public static abstract class Drawable.ConstantState {
ctor public Drawable.ConstantState();
method public abstract int getChangingConfigurations();
@@ -11003,7 +11022,7 @@ package android.media {
}
public final class MediaCodec {
- method public void configure(java.util.Map<java.lang.String, java.lang.Object>, android.view.Surface, android.media.MediaCrypto, int);
+ method public void configure(android.media.MediaFormat, android.view.Surface, android.media.MediaCrypto, int);
method public static android.media.MediaCodec createByCodecName(java.lang.String);
method public static android.media.MediaCodec createDecoderByType(java.lang.String);
method public static android.media.MediaCodec createEncoderByType(java.lang.String);
@@ -11012,7 +11031,7 @@ package android.media {
method public final void flush();
method public java.nio.ByteBuffer[] getInputBuffers();
method public java.nio.ByteBuffer[] getOutputBuffers();
- method public final java.util.Map<java.lang.String, java.lang.Object> getOutputFormat();
+ method public final android.media.MediaFormat getOutputFormat();
method public final void queueInputBuffer(int, int, int, long, int) throws android.media.MediaCodec.CryptoException;
method public final void queueSecureInputBuffer(int, int, android.media.MediaCodec.CryptoInfo, long, int) throws android.media.MediaCodec.CryptoException;
method public final void release();
@@ -11020,15 +11039,15 @@ package android.media {
method public final void setVideoScalingMode(int);
method public final void start();
method public final void stop();
- field public static int CONFIGURE_FLAG_ENCODE;
- field public static final int FLAG_CODECCONFIG = 2; // 0x2
- field public static final int FLAG_EOS = 4; // 0x4
- field public static final int FLAG_SYNCFRAME = 1; // 0x1
+ field public static final int BUFFER_FLAG_CODEC_CONFIG = 2; // 0x2
+ field public static final int BUFFER_FLAG_END_OF_STREAM = 4; // 0x4
+ field public static final int BUFFER_FLAG_SYNC_FRAME = 1; // 0x1
+ field public static final int CONFIGURE_FLAG_ENCODE = 1; // 0x1
+ field public static final int CRYPTO_MODE_AES_CTR = 1; // 0x1
+ field public static final int CRYPTO_MODE_UNENCRYPTED = 0; // 0x0
field public static final int INFO_OUTPUT_BUFFERS_CHANGED = -3; // 0xfffffffd
field public static final int INFO_OUTPUT_FORMAT_CHANGED = -2; // 0xfffffffe
field public static final int INFO_TRY_AGAIN_LATER = -1; // 0xffffffff
- field public static final int MODE_AES_CTR = 1; // 0x1
- field public static final int MODE_UNENCRYPTED = 0; // 0x0
field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT = 1; // 0x1
field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING = 2; // 0x2
}
@@ -11058,43 +11077,170 @@ package android.media {
field public int numSubSamples;
}
- public final class MediaCodecList {
- method public static final int countCodecs();
- method public static final android.media.MediaCodecList.CodecCapabilities getCodecCapabilities(int, java.lang.String);
- method public static final java.lang.String getCodecName(int);
- method public static final java.lang.String[] getSupportedTypes(int);
- method public static final boolean isEncoder(int);
- }
-
- public static final class MediaCodecList.CodecCapabilities {
- ctor public MediaCodecList.CodecCapabilities();
+ public final class MediaCodecInfo {
+ method public final android.media.MediaCodecInfo.CodecCapabilities getCapabilitiesForType(java.lang.String);
+ method public final java.lang.String getName();
+ method public final java.lang.String[] getSupportedTypes();
+ method public final boolean isEncoder();
+ }
+
+ public static final class MediaCodecInfo.CodecCapabilities {
+ ctor public MediaCodecInfo.CodecCapabilities();
+ field public static final int COLOR_Format12bitRGB444 = 3; // 0x3
+ field public static final int COLOR_Format16bitARGB1555 = 5; // 0x5
+ field public static final int COLOR_Format16bitARGB4444 = 4; // 0x4
+ field public static final int COLOR_Format16bitBGR565 = 7; // 0x7
+ field public static final int COLOR_Format16bitRGB565 = 6; // 0x6
+ field public static final int COLOR_Format18BitBGR666 = 41; // 0x29
+ field public static final int COLOR_Format18bitARGB1665 = 9; // 0x9
+ field public static final int COLOR_Format18bitRGB666 = 8; // 0x8
+ field public static final int COLOR_Format19bitARGB1666 = 10; // 0xa
+ field public static final int COLOR_Format24BitABGR6666 = 43; // 0x2b
+ field public static final int COLOR_Format24BitARGB6666 = 42; // 0x2a
+ field public static final int COLOR_Format24bitARGB1887 = 13; // 0xd
+ field public static final int COLOR_Format24bitBGR888 = 12; // 0xc
+ field public static final int COLOR_Format24bitRGB888 = 11; // 0xb
+ field public static final int COLOR_Format25bitARGB1888 = 14; // 0xe
+ field public static final int COLOR_Format32bitARGB8888 = 16; // 0x10
+ field public static final int COLOR_Format32bitBGRA8888 = 15; // 0xf
+ field public static final int COLOR_Format8bitRGB332 = 2; // 0x2
+ field public static final int COLOR_FormatCbYCrY = 27; // 0x1b
+ field public static final int COLOR_FormatCrYCbY = 28; // 0x1c
+ field public static final int COLOR_FormatL16 = 36; // 0x24
+ field public static final int COLOR_FormatL2 = 33; // 0x21
+ field public static final int COLOR_FormatL24 = 37; // 0x25
+ field public static final int COLOR_FormatL32 = 38; // 0x26
+ field public static final int COLOR_FormatL4 = 34; // 0x22
+ field public static final int COLOR_FormatL8 = 35; // 0x23
+ field public static final int COLOR_FormatMonochrome = 1; // 0x1
+ field public static final int COLOR_FormatRawBayer10bit = 31; // 0x1f
+ field public static final int COLOR_FormatRawBayer8bit = 30; // 0x1e
+ field public static final int COLOR_FormatRawBayer8bitcompressed = 32; // 0x20
+ field public static final int COLOR_FormatYCbYCr = 25; // 0x19
+ field public static final int COLOR_FormatYCrYCb = 26; // 0x1a
+ field public static final int COLOR_FormatYUV411PackedPlanar = 18; // 0x12
+ field public static final int COLOR_FormatYUV411Planar = 17; // 0x11
+ field public static final int COLOR_FormatYUV420PackedPlanar = 20; // 0x14
+ field public static final int COLOR_FormatYUV420PackedSemiPlanar = 39; // 0x27
+ field public static final int COLOR_FormatYUV420Planar = 19; // 0x13
+ field public static final int COLOR_FormatYUV420SemiPlanar = 21; // 0x15
+ field public static final int COLOR_FormatYUV422PackedPlanar = 23; // 0x17
+ field public static final int COLOR_FormatYUV422PackedSemiPlanar = 40; // 0x28
+ field public static final int COLOR_FormatYUV422Planar = 22; // 0x16
+ field public static final int COLOR_FormatYUV422SemiPlanar = 24; // 0x18
+ field public static final int COLOR_FormatYUV444Interleaved = 29; // 0x1d
+ field public static final int COLOR_QCOM_FormatYUV420SemiPlanar = 2141391872; // 0x7fa30c00
+ field public static final int COLOR_TI_FormatYUV420PackedSemiPlanar = 2130706688; // 0x7f000100
field public int[] colorFormats;
- field public android.media.MediaCodecList.CodecProfileLevel[] profileLevels;
- }
-
- public static final class MediaCodecList.CodecProfileLevel {
- ctor public MediaCodecList.CodecProfileLevel();
+ field public android.media.MediaCodecInfo.CodecProfileLevel[] profileLevels;
+ }
+
+ public static final class MediaCodecInfo.CodecProfileLevel {
+ ctor public MediaCodecInfo.CodecProfileLevel();
+ field public static final int AACObjectELD = 39; // 0x27
+ field public static final int AACObjectERLC = 17; // 0x11
+ field public static final int AACObjectHE = 5; // 0x5
+ field public static final int AACObjectHE_PS = 29; // 0x1d
+ field public static final int AACObjectLC = 2; // 0x2
+ field public static final int AACObjectLD = 23; // 0x17
+ field public static final int AACObjectLTP = 4; // 0x4
+ field public static final int AACObjectMain = 1; // 0x1
+ field public static final int AACObjectSSR = 3; // 0x3
+ field public static final int AACObjectScalable = 6; // 0x6
+ field public static final int AVCLevel1 = 1; // 0x1
+ field public static final int AVCLevel11 = 4; // 0x4
+ field public static final int AVCLevel12 = 8; // 0x8
+ field public static final int AVCLevel13 = 16; // 0x10
+ field public static final int AVCLevel1b = 2; // 0x2
+ field public static final int AVCLevel2 = 32; // 0x20
+ field public static final int AVCLevel21 = 64; // 0x40
+ field public static final int AVCLevel22 = 128; // 0x80
+ field public static final int AVCLevel3 = 256; // 0x100
+ field public static final int AVCLevel31 = 512; // 0x200
+ field public static final int AVCLevel32 = 1024; // 0x400
+ field public static final int AVCLevel4 = 2048; // 0x800
+ field public static final int AVCLevel41 = 4096; // 0x1000
+ field public static final int AVCLevel42 = 8192; // 0x2000
+ field public static final int AVCLevel5 = 16384; // 0x4000
+ field public static final int AVCLevel51 = 32768; // 0x8000
+ field public static final int AVCProfileBaseline = 1; // 0x1
+ field public static final int AVCProfileExtended = 4; // 0x4
+ field public static final int AVCProfileHigh = 8; // 0x8
+ field public static final int AVCProfileHigh10 = 16; // 0x10
+ field public static final int AVCProfileHigh422 = 32; // 0x20
+ field public static final int AVCProfileHigh444 = 64; // 0x40
+ field public static final int AVCProfileMain = 2; // 0x2
+ field public static final int H263Level10 = 1; // 0x1
+ field public static final int H263Level20 = 2; // 0x2
+ field public static final int H263Level30 = 4; // 0x4
+ field public static final int H263Level40 = 8; // 0x8
+ field public static final int H263Level45 = 16; // 0x10
+ field public static final int H263Level50 = 32; // 0x20
+ field public static final int H263Level60 = 64; // 0x40
+ field public static final int H263Level70 = 128; // 0x80
+ field public static final int H263ProfileBackwardCompatible = 4; // 0x4
+ field public static final int H263ProfileBaseline = 1; // 0x1
+ field public static final int H263ProfileH320Coding = 2; // 0x2
+ field public static final int H263ProfileHighCompression = 32; // 0x20
+ field public static final int H263ProfileHighLatency = 256; // 0x100
+ field public static final int H263ProfileISWV2 = 8; // 0x8
+ field public static final int H263ProfileISWV3 = 16; // 0x10
+ field public static final int H263ProfileInterlace = 128; // 0x80
+ field public static final int H263ProfileInternet = 64; // 0x40
+ field public static final int MPEG4Level0 = 1; // 0x1
+ field public static final int MPEG4Level0b = 2; // 0x2
+ field public static final int MPEG4Level1 = 4; // 0x4
+ field public static final int MPEG4Level2 = 8; // 0x8
+ field public static final int MPEG4Level3 = 16; // 0x10
+ field public static final int MPEG4Level4 = 32; // 0x20
+ field public static final int MPEG4Level4a = 64; // 0x40
+ field public static final int MPEG4Level5 = 128; // 0x80
+ field public static final int MPEG4ProfileAdvancedCoding = 4096; // 0x1000
+ field public static final int MPEG4ProfileAdvancedCore = 8192; // 0x2000
+ field public static final int MPEG4ProfileAdvancedRealTime = 1024; // 0x400
+ field public static final int MPEG4ProfileAdvancedScalable = 16384; // 0x4000
+ field public static final int MPEG4ProfileAdvancedSimple = 32768; // 0x8000
+ field public static final int MPEG4ProfileBasicAnimated = 256; // 0x100
+ field public static final int MPEG4ProfileCore = 4; // 0x4
+ field public static final int MPEG4ProfileCoreScalable = 2048; // 0x800
+ field public static final int MPEG4ProfileHybrid = 512; // 0x200
+ field public static final int MPEG4ProfileMain = 8; // 0x8
+ field public static final int MPEG4ProfileNbit = 16; // 0x10
+ field public static final int MPEG4ProfileScalableTexture = 32; // 0x20
+ field public static final int MPEG4ProfileSimple = 1; // 0x1
+ field public static final int MPEG4ProfileSimpleFBA = 128; // 0x80
+ field public static final int MPEG4ProfileSimpleFace = 64; // 0x40
+ field public static final int MPEG4ProfileSimpleScalable = 2; // 0x2
field public int level;
field public int profile;
}
+ public final class MediaCodecList {
+ method public static final int getCodecCount();
+ method public static final android.media.MediaCodecInfo getCodecInfoAt(int);
+ }
+
public final class MediaCrypto {
- ctor public MediaCrypto(byte[], byte[]) throws java.lang.RuntimeException;
- method public static final boolean isCryptoSchemeSupported(byte[]);
+ ctor public MediaCrypto(java.util.UUID, byte[]) throws android.media.MediaCryptoException;
+ method public static final boolean isCryptoSchemeSupported(java.util.UUID);
method public final void release();
method public final boolean requiresSecureDecoderComponent(java.lang.String);
}
+ public final class MediaCryptoException extends java.lang.Exception {
+ ctor public MediaCryptoException(java.lang.String);
+ }
+
public final class MediaExtractor {
ctor public MediaExtractor();
method public boolean advance();
- method public int countTracks();
method public long getCachedDuration();
method public boolean getSampleCryptoInfo(android.media.MediaCodec.CryptoInfo);
method public int getSampleFlags();
method public long getSampleTime();
method public int getSampleTrackIndex();
- method public java.util.Map<java.lang.String, java.lang.Object> getTrackFormat(int);
+ method public final int getTrackCount();
+ method public android.media.MediaFormat getTrackFormat(int);
method public boolean hasCacheReachedEndOfStream();
method public int readSampleData(java.nio.ByteBuffer, int);
method public final void release();
@@ -11114,6 +11260,37 @@ package android.media {
field public static final int SEEK_TO_PREVIOUS_SYNC = 0; // 0x0
}
+ public final class MediaFormat {
+ ctor public MediaFormat();
+ method public final boolean containsKey(java.lang.String);
+ method public static final android.media.MediaFormat createAudioFormat(java.lang.String, int, int);
+ method public static final android.media.MediaFormat createVideoFormat(java.lang.String, int, int);
+ method public final java.nio.ByteBuffer getByteBuffer(java.lang.String);
+ method public final float getFloat(java.lang.String);
+ method public final int getInteger(java.lang.String);
+ method public final long getLong(java.lang.String);
+ method public final java.lang.String getString(java.lang.String);
+ method public final void setByteBuffer(java.lang.String, java.nio.ByteBuffer);
+ method public final void setFloat(java.lang.String, float);
+ method public final void setInteger(java.lang.String, int);
+ method public final void setLong(java.lang.String, long);
+ method public final void setString(java.lang.String, java.lang.String);
+ field public static final java.lang.String KEY_AAC_PROFILE = "aac-profile";
+ field public static final java.lang.String KEY_BIT_RATE = "bitrate";
+ field public static final java.lang.String KEY_CHANNEL_COUNT = "channel-count";
+ field public static final java.lang.String KEY_CHANNEL_MASK = "channel-mask";
+ field public static final java.lang.String KEY_COLOR_FORMAT = "color-format";
+ field public static final java.lang.String KEY_DURATION = "durationUs";
+ field public static final java.lang.String KEY_FRAME_RATE = "frame-rate";
+ field public static final java.lang.String KEY_HEIGHT = "height";
+ field public static final java.lang.String KEY_IS_ADTS = "is-adts";
+ field public static final java.lang.String KEY_I_FRAME_INTERVAL = "i-frame-interval";
+ field public static final java.lang.String KEY_MAX_INPUT_SIZE = "max-input-size";
+ field public static final java.lang.String KEY_MIME = "mime";
+ field public static final java.lang.String KEY_SAMPLE_RATE = "sample-rate";
+ field public static final java.lang.String KEY_WIDTH = "width";
+ }
+
public class MediaMetadataRetriever {
ctor public MediaMetadataRetriever();
method public java.lang.String extractMetadata(int);
@@ -21098,19 +21275,6 @@ package android.text {
method public int getTopPadding();
}
- public abstract interface TextDirectionHeuristic {
- }
-
- public class TextDirectionHeuristics {
- ctor public TextDirectionHeuristics();
- field public static final android.text.TextDirectionHeuristic ANYRTL_LTR;
- field public static final android.text.TextDirectionHeuristic FIRSTSTRONG_LTR;
- field public static final android.text.TextDirectionHeuristic FIRSTSTRONG_RTL;
- field public static final android.text.TextDirectionHeuristic LOCALE;
- field public static final android.text.TextDirectionHeuristic LTR;
- field public static final android.text.TextDirectionHeuristic RTL;
- }
-
public class TextPaint extends android.graphics.Paint {
ctor public TextPaint();
ctor public TextPaint(int);
@@ -22202,10 +22366,6 @@ package android.util {
method public android.util.JsonWriter value(java.lang.Number) throws java.io.IOException;
}
- public class LocaleUtil {
- method public static int getLayoutDirectionFromLocale(java.util.Locale);
- }
-
public final class Log {
method public static int d(java.lang.String, java.lang.String);
method public static int d(java.lang.String, java.lang.String, java.lang.Throwable);
@@ -22539,6 +22699,7 @@ package android.view {
method public abstract java.lang.CharSequence getSubtitle();
method public java.lang.Object getTag();
method public abstract java.lang.CharSequence getTitle();
+ method public boolean getTitleOptionalHint();
method public abstract void invalidate();
method public boolean isTitleOptional();
method public abstract void setCustomView(android.view.View);
@@ -22672,12 +22833,8 @@ package android.view {
public class Gravity {
ctor public Gravity();
method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect);
- method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect);
- method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect);
- method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
- method public static int getAbsoluteGravity(int, int);
method public static boolean isHorizontal(int);
method public static boolean isVertical(int);
field public static final int AXIS_CLIP = 8; // 0x8
@@ -23700,7 +23857,7 @@ package android.view {
method public void recycle();
}
- public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.graphics.drawable.Drawable.Callback2 android.view.KeyEvent.Callback {
+ public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback {
ctor public View(android.content.Context);
ctor public View(android.content.Context, android.util.AttributeSet);
ctor public View(android.content.Context, android.util.AttributeSet, int);
@@ -23720,9 +23877,6 @@ package android.view {
method public void buildDrawingCache(boolean);
method public void buildLayer();
method public boolean callOnClick();
- method public boolean canResolveLayoutDirection();
- method public boolean canResolveTextAlignment();
- method public boolean canResolveTextDirection();
method public boolean canScrollHorizontally(int);
method public boolean canScrollVertically(int);
method public void cancelLongPress();
@@ -23811,7 +23965,6 @@ package android.view {
method public boolean getKeepScreenOn();
method public android.view.KeyEvent.DispatcherState getKeyDispatcherState();
method public int getLayerType();
- method public int getLayoutDirection();
method public android.view.ViewGroup.LayoutParams getLayoutParams();
method public final int getLeft();
method protected float getLeftFadingEdgeStrength();
@@ -23835,19 +23988,13 @@ package android.view {
method public android.view.View.OnFocusChangeListener getOnFocusChangeListener();
method public int getOverScrollMode();
method public int getPaddingBottom();
- method public int getPaddingEnd();
method public int getPaddingLeft();
method public int getPaddingRight();
- method public int getPaddingStart();
method public int getPaddingTop();
method public final android.view.ViewParent getParent();
method public android.view.ViewParent getParentForAccessibility();
method public float getPivotX();
method public float getPivotY();
- method public int getResolvedLayoutDirection();
- method public int getResolvedLayoutDirection(android.graphics.drawable.Drawable);
- method public int getResolvedTextAlignment();
- method public int getResolvedTextDirection();
method public android.content.res.Resources getResources();
method public final int getRight();
method protected float getRightFadingEdgeStrength();
@@ -23870,8 +24017,6 @@ package android.view {
method public int getSystemUiVisibility();
method public java.lang.Object getTag();
method public java.lang.Object getTag(int);
- method public int getTextAlignment();
- method public int getTextDirection();
method public final int getTop();
method protected float getTopFadingEdgeStrength();
method protected int getTopPaddingOffset();
@@ -23921,13 +24066,10 @@ package android.view {
method public boolean isHovered();
method public boolean isInEditMode();
method public boolean isInTouchMode();
- method protected static boolean isLayoutDirectionRtl(java.util.Locale);
method public boolean isLayoutRequested();
- method public boolean isLayoutRtl();
method public boolean isLongClickable();
method public boolean isOpaque();
method protected boolean isPaddingOffsetRequired();
- method public boolean isPaddingRelative();
method public boolean isPressed();
method public boolean isSaveEnabled();
method public boolean isSaveFromParentEnabled();
@@ -23975,14 +24117,7 @@ package android.view {
method protected void onLayout(boolean, int, int, int, int);
method protected void onMeasure(int, int);
method protected void onOverScrolled(int, int, boolean, boolean);
- method public void onPaddingChanged(int);
method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
- method public void onResolvedLayoutDirectionChanged();
- method public void onResolvedLayoutDirectionReset();
- method public void onResolvedTextAlignmentChanged();
- method public void onResolvedTextAlignmentReset();
- method public void onResolvedTextDirectionChanged();
- method public void onResolvedTextDirectionReset();
method protected void onRestoreInstanceState(android.os.Parcelable);
method protected android.os.Parcelable onSaveInstanceState();
method public void onScreenStateChanged(int);
@@ -24025,15 +24160,8 @@ package android.view {
method public void requestLayout();
method public boolean requestRectangleOnScreen(android.graphics.Rect);
method public boolean requestRectangleOnScreen(android.graphics.Rect, boolean);
- method public void resetResolvedLayoutDirection();
- method public void resetResolvedTextAlignment();
- method public void resetResolvedTextDirection();
- method public void resolveLayoutDirection();
- method public void resolvePadding();
method public static int resolveSize(int, int);
method public static int resolveSizeAndState(int, int, int);
- method public void resolveTextAlignment();
- method public void resolveTextDirection();
method public void restoreHierarchyState(android.util.SparseArray<android.os.Parcelable>);
method public void saveHierarchyState(android.util.SparseArray<android.os.Parcelable>);
method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
@@ -24072,7 +24200,6 @@ package android.view {
method public void setImportantForAccessibility(int);
method public void setKeepScreenOn(boolean);
method public void setLayerType(int, android.graphics.Paint);
- method public void setLayoutDirection(int);
method public void setLayoutParams(android.view.ViewGroup.LayoutParams);
method public final void setLeft(int);
method public void setLongClickable(boolean);
@@ -24096,7 +24223,6 @@ package android.view {
method public void setOnTouchListener(android.view.View.OnTouchListener);
method public void setOverScrollMode(int);
method public void setPadding(int, int, int, int);
- method public void setPaddingRelative(int, int, int, int);
method public void setPivotX(float);
method public void setPivotY(float);
method public void setPressed(boolean);
@@ -24121,8 +24247,6 @@ package android.view {
method public void setSystemUiVisibility(int);
method public void setTag(java.lang.Object);
method public void setTag(int, java.lang.Object);
- method public void setTextAlignment(int);
- method public void setTextDirection(int);
method public final void setTop(int);
method public void setTouchDelegate(android.view.TouchDelegate);
method public void setTranslationX(float);
@@ -24188,10 +24312,6 @@ package android.view {
field public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
field public static final int LAYER_TYPE_NONE = 0; // 0x0
field public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
- field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
- field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
- field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
- field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
field public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
field public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
field public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
@@ -24242,22 +24362,8 @@ package android.view {
field public static final int SYSTEM_UI_FLAG_LOW_PROFILE = 1; // 0x1
field public static final int SYSTEM_UI_FLAG_VISIBLE = 0; // 0x0
field public static final int SYSTEM_UI_LAYOUT_FLAGS = 1536; // 0x600
- field public static final int TEXT_ALIGNMENT_CENTER = 4; // 0x4
- field protected static int TEXT_ALIGNMENT_DEFAULT;
- field public static final int TEXT_ALIGNMENT_GRAVITY = 1; // 0x1
field public static final int TEXT_ALIGNMENT_INHERIT = 0; // 0x0
field public static final int TEXT_ALIGNMENT_RESOLVED_DEFAULT = 131072; // 0x20000
- field public static final int TEXT_ALIGNMENT_TEXT_END = 3; // 0x3
- field public static final int TEXT_ALIGNMENT_TEXT_START = 2; // 0x2
- field public static final int TEXT_ALIGNMENT_VIEW_END = 6; // 0x6
- field public static final int TEXT_ALIGNMENT_VIEW_START = 5; // 0x5
- field public static final int TEXT_DIRECTION_ANY_RTL = 2; // 0x2
- field protected static int TEXT_DIRECTION_DEFAULT;
- field public static final int TEXT_DIRECTION_FIRST_STRONG = 1; // 0x1
- field public static final int TEXT_DIRECTION_INHERIT = 0; // 0x0
- field public static final int TEXT_DIRECTION_LOCALE = 5; // 0x5
- field public static final int TEXT_DIRECTION_LTR = 3; // 0x3
- field public static final int TEXT_DIRECTION_RTL = 4; // 0x4
field public static final android.util.Property TRANSLATION_X;
field public static final android.util.Property TRANSLATION_Y;
field protected static final java.lang.String VIEW_LOG_TAG = "View";
@@ -24564,7 +24670,6 @@ package android.view {
ctor public ViewGroup.LayoutParams(android.content.Context, android.util.AttributeSet);
ctor public ViewGroup.LayoutParams(int, int);
ctor public ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams);
- method public void onResolveLayoutDirection(int);
method protected void setBaseAttributes(android.content.res.TypedArray, int, int);
field public static final deprecated int FILL_PARENT = -1; // 0xffffffff
field public static final int MATCH_PARENT = -1; // 0xffffffff
@@ -24579,15 +24684,10 @@ package android.view {
ctor public ViewGroup.MarginLayoutParams(int, int);
ctor public ViewGroup.MarginLayoutParams(android.view.ViewGroup.MarginLayoutParams);
ctor public ViewGroup.MarginLayoutParams(android.view.ViewGroup.LayoutParams);
- method public int getMarginEnd();
- method public int getMarginStart();
- method public boolean isMarginRelative();
method public void setMargins(int, int, int, int);
field public int bottomMargin;
- field public int endMargin;
field public int leftMargin;
field public int rightMargin;
- field public int startMargin;
field public int topMargin;
}
@@ -24994,7 +25094,7 @@ package android.view.accessibility {
method public static java.lang.String eventTypeToString(int);
method public long getEventTime();
method public int getEventType();
- method public int getGranularity();
+ method public int getMovementGranularity();
method public java.lang.CharSequence getPackageName();
method public android.view.accessibility.AccessibilityRecord getRecord(int);
method public int getRecordCount();
@@ -25004,7 +25104,7 @@ package android.view.accessibility {
method public static android.view.accessibility.AccessibilityEvent obtain();
method public void setEventTime(long);
method public void setEventType(int);
- method public void setGranularity(int);
+ method public void setMovementGranularity(int);
method public void setPackageName(java.lang.CharSequence);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
@@ -25026,7 +25126,7 @@ package android.view.accessibility {
field public static final int TYPE_VIEW_SELECTED = 4; // 0x4
field public static final int TYPE_VIEW_TEXT_CHANGED = 16; // 0x10
field public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
- field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_GRANULARITY = 131072; // 0x20000
+ field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
field public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
field public static final int TYPE_WINDOW_STATE_CHANGED = 32; // 0x20
}
@@ -25067,7 +25167,7 @@ package android.view.accessibility {
method public int getChildCount();
method public java.lang.CharSequence getClassName();
method public java.lang.CharSequence getContentDescription();
- method public int getGranularities();
+ method public int getMovementGranularities();
method public java.lang.CharSequence getPackageName();
method public android.view.accessibility.AccessibilityNodeInfo getParent();
method public java.lang.CharSequence getText();
@@ -25101,8 +25201,8 @@ package android.view.accessibility {
method public void setEnabled(boolean);
method public void setFocusable(boolean);
method public void setFocused(boolean);
- method public void setGranularities(int);
method public void setLongClickable(boolean);
+ method public void setMovementGranularities(int);
method public void setPackageName(java.lang.CharSequence);
method public void setParent(android.view.View);
method public void setParent(android.view.View, int);
@@ -25114,27 +25214,27 @@ package android.view.accessibility {
method public void setText(java.lang.CharSequence);
method public void writeToParcel(android.os.Parcel, int);
field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
- field public static final java.lang.String ACTION_ARGUMENT_GRANULARITY_INT = "ACTION_ARGUMENT_GRANULARITY_INT";
field public static final java.lang.String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+ field public static final java.lang.String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
field public static final int ACTION_CLICK = 16; // 0x10
field public static final int ACTION_FOCUS = 1; // 0x1
field public static final int ACTION_LONG_CLICK = 32; // 0x20
- field public static final int ACTION_NEXT_AT_GRANULARITY = 256; // 0x100
+ field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
- field public static final int ACTION_PREVIOUS_AT_GRANULARITY = 512; // 0x200
+ field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
field public static final int ACTION_SELECT = 4; // 0x4
field public static final android.os.Parcelable.Creator CREATOR;
field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
field public static final int FOCUS_INPUT = 1; // 0x1
- field public static final int GRANULARITY_CHARACTER = 1; // 0x1
- field public static final int GRANULARITY_LINE = 4; // 0x4
- field public static final int GRANULARITY_PAGE = 16; // 0x10
- field public static final int GRANULARITY_PARAGRAPH = 8; // 0x8
- field public static final int GRANULARITY_WORD = 2; // 0x2
+ field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
+ field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
+ field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
+ field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
}
public abstract class AccessibilityNodeProvider {
@@ -26914,6 +27014,7 @@ package android.widget {
ctor public CheckedTextView(android.content.Context, android.util.AttributeSet, int);
method public android.graphics.drawable.Drawable getCheckMarkDrawable();
method public boolean isChecked();
+ method public void onPaddingChanged(int);
method public void setCheckMarkDrawable(int);
method public void setCheckMarkDrawable(android.graphics.drawable.Drawable);
method public void setChecked(boolean);
@@ -27943,7 +28044,6 @@ package android.widget {
method public void setString(int, java.lang.String, java.lang.String);
method public void setTextColor(int, int);
method public void setTextViewCompoundDrawables(int, int, int, int, int);
- method public void setTextViewCompoundDrawablesRelative(int, int, int, int, int);
method public void setTextViewText(int, java.lang.CharSequence);
method public void setUri(int, java.lang.String, android.net.Uri);
method public void setViewVisibility(int, int);
@@ -28423,12 +28523,9 @@ package android.widget {
method public final int getAutoLinkMask();
method public int getCompoundDrawablePadding();
method public android.graphics.drawable.Drawable[] getCompoundDrawables();
- method public android.graphics.drawable.Drawable[] getCompoundDrawablesRelative();
method public int getCompoundPaddingBottom();
- method public int getCompoundPaddingEnd();
method public int getCompoundPaddingLeft();
method public int getCompoundPaddingRight();
- method public int getCompoundPaddingStart();
method public int getCompoundPaddingTop();
method public final int getCurrentHintTextColor();
method public final int getCurrentTextColor();
@@ -28488,10 +28585,8 @@ package android.widget {
method public float getTextScaleX();
method public float getTextSize();
method public int getTotalPaddingBottom();
- method public int getTotalPaddingEnd();
method public int getTotalPaddingLeft();
method public int getTotalPaddingRight();
- method public int getTotalPaddingStart();
method public int getTotalPaddingTop();
method public final android.text.method.TransformationMethod getTransformationMethod();
method public android.graphics.Typeface getTypeface();
@@ -28510,6 +28605,8 @@ package android.widget {
method public void onEndBatchEdit();
method public boolean onPreDraw();
method public boolean onPrivateIMECommand(java.lang.String, android.os.Bundle);
+ method public void onResolvedLayoutDirectionReset();
+ method public void onResolvedTextDirectionChanged();
method public void onRestoreInstanceState(android.os.Parcelable);
method public android.os.Parcelable onSaveInstanceState();
method protected void onSelectionChanged(int, int);
@@ -28522,9 +28619,6 @@ package android.widget {
method public final void setAutoLinkMask(int);
method public void setCompoundDrawablePadding(int);
method public void setCompoundDrawables(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
- method public void setCompoundDrawablesRelative(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
- method public void setCompoundDrawablesRelativeWithIntrinsicBounds(int, int, int, int);
- method public void setCompoundDrawablesRelativeWithIntrinsicBounds(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
method public void setCompoundDrawablesWithIntrinsicBounds(int, int, int, int);
method public void setCompoundDrawablesWithIntrinsicBounds(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
method public void setCursorVisible(boolean);
@@ -28568,6 +28662,7 @@ package android.widget {
method public void setMinWidth(int);
method public final void setMovementMethod(android.text.method.MovementMethod);
method public void setOnEditorActionListener(android.widget.TextView.OnEditorActionListener);
+ method public void setPaddingRelative(int, int, int, int);
method public void setPaintFlags(int);
method public void setPrivateImeOptions(java.lang.String);
method public void setRawInputType(int);
diff --git a/core/java/android/animation/PropertyValuesHolder.java b/core/java/android/animation/PropertyValuesHolder.java
index 58f23f7517ca..5b1a7cf209ff 100644
--- a/core/java/android/animation/PropertyValuesHolder.java
+++ b/core/java/android/animation/PropertyValuesHolder.java
@@ -384,8 +384,7 @@ public class PropertyValuesHolder implements Cloneable {
try {
returnVal = targetClass.getMethod(methodName, args);
} catch (NoSuchMethodException e) {
- Log.e("PropertyValuesHolder",
- "Couldn't find no-arg method for property " + mPropertyName + ": " + e);
+ // Swallow the error, log it later
}
} else {
args = new Class[1];
@@ -412,9 +411,12 @@ public class PropertyValuesHolder implements Cloneable {
}
}
// If we got here, then no appropriate function was found
- Log.e("PropertyValuesHolder",
- "Couldn't find setter/getter for property " + mPropertyName +
- " with value type "+ mValueType);
+ }
+
+ if (returnVal == null) {
+ Log.w("PropertyValuesHolder", "Method " +
+ getMethodName(prefix, mPropertyName) + "() with type " + mValueType +
+ " not found on target class " + targetClass);
}
return returnVal;
@@ -495,7 +497,7 @@ public class PropertyValuesHolder implements Cloneable {
}
return;
} catch (ClassCastException e) {
- Log.e("PropertyValuesHolder","No such property (" + mProperty.getName() +
+ Log.w("PropertyValuesHolder","No such property (" + mProperty.getName() +
") on target object " + target + ". Trying reflection instead");
mProperty = null;
}
@@ -508,6 +510,10 @@ public class PropertyValuesHolder implements Cloneable {
if (!kf.hasValue()) {
if (mGetter == null) {
setupGetter(targetClass);
+ if (mGetter == null) {
+ // Already logged the error - just return to avoid NPE
+ return;
+ }
}
try {
kf.setValue(mGetter.invoke(target));
@@ -535,6 +541,10 @@ public class PropertyValuesHolder implements Cloneable {
if (mGetter == null) {
Class targetClass = target.getClass();
setupGetter(targetClass);
+ if (mGetter == null) {
+ // Already logged the error - just return to avoid NPE
+ return;
+ }
}
kf.setValue(mGetter.invoke(target));
} catch (InvocationTargetException e) {
@@ -854,8 +864,9 @@ public class PropertyValuesHolder implements Cloneable {
}
}
} catch (NoSuchMethodError e) {
- Log.d("PropertyValuesHolder",
- "Can't find native method using JNI, use reflection" + e);
+ // Couldn't find it via JNI - try reflection next. Probably means the method
+ // doesn't exist, or the type is wrong. An error will be logged later if
+ // reflection fails as well.
} finally {
mPropertyMapLock.writeLock().unlock();
}
@@ -990,8 +1001,9 @@ public class PropertyValuesHolder implements Cloneable {
}
}
} catch (NoSuchMethodError e) {
- Log.d("PropertyValuesHolder",
- "Can't find native method using JNI, use reflection" + e);
+ // Couldn't find it via JNI - try reflection next. Probably means the method
+ // doesn't exist, or the type is wrong. An error will be logged later if
+ // reflection fails as well.
} finally {
mPropertyMapLock.writeLock().unlock();
}
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 8d6a49638d30..29d96feb790c 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -1242,7 +1242,7 @@ public class Activity extends ContextThemeWrapper
* making sure nothing is lost if there are not enough resources to start
* the new activity without first killing this one. This is also a good
* place to do things like stop animations and other things that consume a
- * noticeable mount of CPU in order to make the switch to the next activity
+ * noticeable amount of CPU in order to make the switch to the next activity
* as fast as possible, or to close resources that are exclusive access
* such as the camera.
*
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java
index 423b02a8ddaf..b73058140bd9 100644
--- a/core/java/android/app/ActivityOptions.java
+++ b/core/java/android/app/ActivityOptions.java
@@ -325,10 +325,11 @@ public class ActivityOptions {
}
/**
- * Join the values in <var>otherOptions</var> in to this one. Any values
+ * Update the current values in this ActivityOptions from those supplied
+ * in <var>otherOptions</var>. Any values
* defined in <var>otherOptions</var> replace those in the base options.
*/
- public void join(ActivityOptions otherOptions) {
+ public void update(ActivityOptions otherOptions) {
if (otherOptions.mPackageName != null) {
mPackageName = otherOptions.mPackageName;
}
diff --git a/core/java/android/app/Dialog.java b/core/java/android/app/Dialog.java
index f04ff6a6b9a5..2cc3b02e5080 100644
--- a/core/java/android/app/Dialog.java
+++ b/core/java/android/app/Dialog.java
@@ -27,6 +27,7 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
+import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.util.TypedValue;
@@ -103,7 +104,6 @@ public class Dialog implements DialogInterface, Window.Callback,
private boolean mShowing = false;
private boolean mCanceled = false;
- private final Thread mUiThread;
private final Handler mHandler = new Handler();
private static final int DISMISS = 0x43;
@@ -162,7 +162,6 @@ public class Dialog implements DialogInterface, Window.Callback,
w.setCallback(this);
w.setWindowManager(mWindowManager, null, null);
w.setGravity(Gravity.CENTER);
- mUiThread = Thread.currentThread();
mListenersHandler = new ListenersHandler(this);
}
@@ -299,11 +298,10 @@ public class Dialog implements DialogInterface, Window.Callback,
* that in {@link #onStop}.
*/
public void dismiss() {
- if (Thread.currentThread() != mUiThread) {
- mHandler.post(mDismissAction);
+ if (Looper.myLooper() == mHandler.getLooper()) {
+ dismissDialog();
} else {
- mHandler.removeCallbacks(mDismissAction);
- mDismissAction.run();
+ mHandler.post(mDismissAction);
}
}
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 763cc1024f23..0d76877474df 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -1401,7 +1401,8 @@ public class Notification implements Parcelable
if (mSubText != null) {
contentView.setTextViewText(R.id.text, mSubText);
- contentView.setViewVisibility(R.id.text2, View.VISIBLE);
+ contentView.setViewVisibility(R.id.text2,
+ mContentText != null ? View.VISIBLE : View.GONE);
} else {
contentView.setViewVisibility(R.id.text2, View.GONE);
if (mProgressMax != 0 || mProgressIndeterminate) {
@@ -1432,12 +1433,12 @@ public class Notification implements Parcelable
int N = mActions.size();
if (N > 0) {
- Log.d("Notification", "has actions: " + mContentText);
+ // Log.d("Notification", "has actions: " + mContentText);
big.setViewVisibility(R.id.actions, View.VISIBLE);
if (N>3) N=3;
for (int i=0; i<N; i++) {
final RemoteViews button = generateActionButton(mActions.get(i));
- Log.d("Notification", "adding action " + i + ": " + mActions.get(i).title);
+ //Log.d("Notification", "adding action " + i + ": " + mActions.get(i).title);
big.addView(R.id.actions, button);
}
}
@@ -1553,9 +1554,28 @@ public class Notification implements Parcelable
* An object that can apply a rich notification style to a {@link Notification.Builder}
* object.
*/
- public static class Style {
+ public static abstract class Style
+ {
+ private CharSequence mBigContentTitle;
+ private CharSequence mSummaryText = null;
+
protected Builder mBuilder;
+ /**
+ * Overrides ContentTitle in the big form of the template.
+ * This defaults to the value passed to setContentTitle().
+ */
+ protected void internalSetBigContentTitle(CharSequence title) {
+ mBigContentTitle = title;
+ }
+
+ /**
+ * Set the first line of text after the detail section in the big form of the template.
+ */
+ protected void internalSetSummaryText(CharSequence cs) {
+ mSummaryText = cs;
+ }
+
public void setBuilder(Builder builder) {
if (mBuilder != builder) {
mBuilder = builder;
@@ -1563,12 +1583,42 @@ public class Notification implements Parcelable
}
}
- public Notification build() {
+ protected void checkBuilder() {
if (mBuilder == null) {
throw new IllegalArgumentException("Style requires a valid Builder object");
}
- return mBuilder.buildUnstyled();
}
+
+ protected RemoteViews getStandardView(int layoutId) {
+ checkBuilder();
+
+ if (mBigContentTitle != null) {
+ mBuilder.setContentTitle(mBigContentTitle);
+ }
+
+ if (mBuilder.mSubText == null) {
+ mBuilder.setContentText(null);
+ }
+
+ RemoteViews contentView = mBuilder.applyStandardTemplateWithActions(layoutId);
+
+ if (mBuilder.mSubText == null) {
+ contentView.setViewVisibility(R.id.line3, View.GONE);
+ }
+
+ if (mBigContentTitle != null && mBigContentTitle.equals("")) {
+ contentView.setViewVisibility(R.id.line1, View.GONE);
+ }
+
+ if (mSummaryText != null && !mSummaryText.equals("")) {
+ contentView.setViewVisibility(R.id.overflow_title, View.VISIBLE);
+ contentView.setTextViewText(R.id.overflow_title, mSummaryText);
+ }
+
+ return contentView;
+ }
+
+ public abstract Notification build();
}
/**
@@ -1598,13 +1648,30 @@ public class Notification implements Parcelable
setBuilder(builder);
}
+ /**
+ * Overrides ContentTitle in the big form of the template.
+ * This defaults to the value passed to setContentTitle().
+ */
+ public BigPictureStyle setBigContentTitle(CharSequence title) {
+ internalSetBigContentTitle(title);
+ return this;
+ }
+
+ /**
+ * Set the first line of text after the detail section in the big form of the template.
+ */
+ public BigPictureStyle setSummaryText(CharSequence cs) {
+ internalSetSummaryText(cs);
+ return this;
+ }
+
public BigPictureStyle bigPicture(Bitmap b) {
mPicture = b;
return this;
}
private RemoteViews makeBigContentView() {
- RemoteViews contentView = mBuilder.applyStandardTemplateWithActions(R.layout.notification_template_big_picture);
+ RemoteViews contentView = getStandardView(R.layout.notification_template_big_picture);
contentView.setImageViewBitmap(R.id.big_picture, mPicture);
@@ -1613,9 +1680,7 @@ public class Notification implements Parcelable
@Override
public Notification build() {
- if (mBuilder == null) {
- throw new IllegalArgumentException("Style requires a valid Builder object");
- }
+ checkBuilder();
Notification wip = mBuilder.buildUnstyled();
wip.bigContentView = makeBigContentView();
return wip;
@@ -1649,14 +1714,30 @@ public class Notification implements Parcelable
setBuilder(builder);
}
+ /**
+ * Overrides ContentTitle in the big form of the template.
+ * This defaults to the value passed to setContentTitle().
+ */
+ public BigTextStyle setBigContentTitle(CharSequence title) {
+ internalSetBigContentTitle(title);
+ return this;
+ }
+
+ /**
+ * Set the first line of text after the detail section in the big form of the template.
+ */
+ public BigTextStyle setSummaryText(CharSequence cs) {
+ internalSetSummaryText(cs);
+ return this;
+ }
+
public BigTextStyle bigText(CharSequence cs) {
mBigText = cs;
return this;
}
private RemoteViews makeBigContentView() {
- int bigTextId = R.layout.notification_template_big_text;
- RemoteViews contentView = mBuilder.applyStandardTemplateWithActions(bigTextId);
+ RemoteViews contentView = getStandardView(R.layout.notification_template_big_text);
contentView.setTextViewText(R.id.big_text, mBigText);
contentView.setViewVisibility(R.id.big_text, View.VISIBLE);
contentView.setViewVisibility(R.id.text2, View.GONE);
@@ -1666,9 +1747,7 @@ public class Notification implements Parcelable
@Override
public Notification build() {
- if (mBuilder == null) {
- throw new IllegalArgumentException("Style requires a valid Builder object");
- }
+ checkBuilder();
Notification wip = mBuilder.buildUnstyled();
wip.bigContentView = makeBigContentView();
return wip;
@@ -1682,12 +1761,14 @@ public class Notification implements Parcelable
* <pre class="prettyprint">
* Notification noti = new Notification.InboxStyle(
* new Notification.Builder()
- * .setContentTitle(&quot;New mail from &quot; + sender.toString())
+ * .setContentTitle(&quot;5 New mails from &quot; + sender.toString())
* .setContentText(subject)
* .setSmallIcon(R.drawable.new_mail)
* .setLargeIcon(aBitmap))
* .addLine(str1)
* .addLine(str2)
+ * .setContentTitle("")
+ * .setSummaryText(&quot;+3 more&quot;)
* .build();
* </pre>
*
@@ -1703,16 +1784,35 @@ public class Notification implements Parcelable
setBuilder(builder);
}
+ /**
+ * Overrides ContentTitle in the big form of the template.
+ * This defaults to the value passed to setContentTitle().
+ */
+ public InboxStyle setBigContentTitle(CharSequence title) {
+ internalSetBigContentTitle(title);
+ return this;
+ }
+
+ /**
+ * Set the first line of text after the detail section in the big form of the template.
+ */
+ public InboxStyle setSummaryText(CharSequence cs) {
+ internalSetSummaryText(cs);
+ return this;
+ }
+
public InboxStyle addLine(CharSequence cs) {
mTexts.add(cs);
return this;
}
private RemoteViews makeBigContentView() {
- RemoteViews contentView = mBuilder.applyStandardTemplateWithActions(R.layout.notification_template_inbox);
+ RemoteViews contentView = getStandardView(R.layout.notification_template_inbox);
+ contentView.setViewVisibility(R.id.text2, View.GONE);
+
+ int[] rowIds = {R.id.inbox_text0, R.id.inbox_text1, R.id.inbox_text2, R.id.inbox_text3,
+ R.id.inbox_text4};
- int[] rowIds = {R.id.inbox_text0, R.id.inbox_text1, R.id.inbox_text2, R.id.inbox_text3, R.id.inbox_text4};
-
int i=0;
while (i < mTexts.size() && i < rowIds.length) {
CharSequence str = mTexts.get(i);
@@ -1728,9 +1828,7 @@ public class Notification implements Parcelable
@Override
public Notification build() {
- if (mBuilder == null) {
- throw new IllegalArgumentException("Style requires a valid Builder object");
- }
+ checkBuilder();
Notification wip = mBuilder.buildUnstyled();
wip.bigContentView = makeBigContentView();
return wip;
diff --git a/core/java/android/content/AbstractThreadedSyncAdapter.java b/core/java/android/content/AbstractThreadedSyncAdapter.java
index 6bffed759465..bafe67d619f3 100644
--- a/core/java/android/content/AbstractThreadedSyncAdapter.java
+++ b/core/java/android/content/AbstractThreadedSyncAdapter.java
@@ -21,6 +21,7 @@ import android.os.Bundle;
import android.os.IBinder;
import android.os.Process;
import android.os.RemoteException;
+import android.os.Trace;
import java.util.HashMap;
import java.util.concurrent.atomic.AtomicInteger;
@@ -233,9 +234,15 @@ public abstract class AbstractThreadedSyncAdapter {
mThreadsKey = toSyncKey(account);
}
+ @Override
public void run() {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
+ // Trace this sync instance. Note, conceptually this should be in
+ // SyncStorageEngine.insertStartSyncEvent(), but the trace functions require unique
+ // threads in order to track overlapping operations, so we'll do it here for now.
+ Trace.traceBegin(Trace.TRACE_TAG_SYNC_MANAGER, mAuthority);
+
SyncResult syncResult = new SyncResult();
ContentProviderClient provider = null;
try {
@@ -250,6 +257,8 @@ public abstract class AbstractThreadedSyncAdapter {
syncResult.databaseError = true;
}
} finally {
+ Trace.traceEnd(Trace.TRACE_TAG_SYNC_MANAGER);
+
if (provider != null) {
provider.release();
}
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index b4669a78951f..4ed6f25dba74 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -1099,6 +1099,14 @@ public class Intent implements Parcelable, Cloneable {
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_WEB_SEARCH = "android.intent.action.WEB_SEARCH";
/**
+ * Activity Action: Perform assist action.
+ * <p>
+ * Input: nothing
+ * Output: nothing.
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_ASSIST = "android.intent.action.ASSIST";
+ /**
* Activity Action: List all available applications
* <p>Input: Nothing.
* <p>Output: nothing.
@@ -1240,7 +1248,11 @@ public class Intent implements Parcelable, Cloneable {
* Used as a boolean extra field with {@link #ACTION_INSTALL_PACKAGE} to install a
* package. Tells the installer UI to skip the confirmation with the user
* if the .apk is replacing an existing one.
+ * @deprecated As of {@link android.os.Build.VERSION_CODES#JELLY_BEAN}, Android
+ * will no longer show an interstitial message about updating existing
+ * applications so this is no longer needed.
*/
+ @Deprecated
public static final String EXTRA_ALLOW_REPLACE
= "android.intent.extra.ALLOW_REPLACE";
diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java
index 34c40a0be54d..badcb03a0e4a 100644
--- a/core/java/android/content/SyncManager.java
+++ b/core/java/android/content/SyncManager.java
@@ -17,7 +17,6 @@
package android.content;
import com.android.internal.R;
-import com.android.internal.util.ArrayUtils;
import com.google.android.collect.Lists;
import com.google.android.collect.Maps;
@@ -32,7 +31,6 @@ import android.app.AppGlobals;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
-import android.app.DownloadManager.Request;
import android.content.SyncStorageEngine.OnSyncRequestListener;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -1998,6 +1996,7 @@ public class SyncManager implements OnAccountsUpdateListener {
ActiveSyncContext conflict = null;
ActiveSyncContext longRunning = null;
ActiveSyncContext toReschedule = null;
+ ActiveSyncContext oldestNonExpeditedRegular = null;
for (ActiveSyncContext activeSyncContext : mActiveSyncContexts) {
final SyncOperation activeOp = activeSyncContext.mSyncOperation;
@@ -2005,6 +2004,13 @@ public class SyncManager implements OnAccountsUpdateListener {
numInit++;
} else {
numRegular++;
+ if (!activeOp.isExpedited()) {
+ if (oldestNonExpeditedRegular == null
+ || (oldestNonExpeditedRegular.mStartTime
+ > activeSyncContext.mStartTime)) {
+ oldestNonExpeditedRegular = activeSyncContext;
+ }
+ }
}
if (activeOp.account.type.equals(candidate.account.type)
&& activeOp.authority.equals(candidate.authority)
@@ -2027,8 +2033,13 @@ public class SyncManager implements OnAccountsUpdateListener {
Log.v(TAG, " numActiveInit=" + numInit + ", numActiveRegular=" + numRegular);
Log.v(TAG, " longRunning: " + longRunning);
Log.v(TAG, " conflict: " + conflict);
+ Log.v(TAG, " oldestNonExpeditedRegular: " + oldestNonExpeditedRegular);
}
+ final boolean roomAvailable = candidateIsInitialization
+ ? numInit < MAX_SIMULTANEOUS_INITIALIZATION_SYNCS
+ : numRegular < MAX_SIMULTANEOUS_REGULAR_SYNCS;
+
if (conflict != null) {
if (candidateIsInitialization && !conflict.mSyncOperation.isInitialization()
&& numInit < MAX_SIMULTANEOUS_INITIALIZATION_SYNCS) {
@@ -2048,23 +2059,32 @@ public class SyncManager implements OnAccountsUpdateListener {
} else {
continue;
}
- } else {
- final boolean roomAvailable = candidateIsInitialization
- ? numInit < MAX_SIMULTANEOUS_INITIALIZATION_SYNCS
- : numRegular < MAX_SIMULTANEOUS_REGULAR_SYNCS;
- if (roomAvailable) {
- // dispatch candidate
- } else if (longRunning != null
- && (candidateIsInitialization
- == longRunning.mSyncOperation.isInitialization())) {
- toReschedule = longRunning;
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "canceling and rescheduling sync since it ran roo long, "
- + longRunning);
- }
- } else {
- continue;
+ } else if (roomAvailable) {
+ // dispatch candidate
+ } else if (candidate.isExpedited() && oldestNonExpeditedRegular != null
+ && !candidateIsInitialization) {
+ // We found an active, non-expedited regular sync. We also know that the
+ // candidate doesn't conflict with this active sync since conflict
+ // is null. Reschedule the active sync and start the candidate.
+ toReschedule = oldestNonExpeditedRegular;
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "canceling and rescheduling sync since an expedited is ready to run, "
+ + oldestNonExpeditedRegular);
}
+ } else if (longRunning != null
+ && (candidateIsInitialization
+ == longRunning.mSyncOperation.isInitialization())) {
+ // We found an active, long-running sync. Reschedule the active
+ // sync and start the candidate.
+ toReschedule = longRunning;
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "canceling and rescheduling sync since it ran roo long, "
+ + longRunning);
+ }
+ } else {
+ // we were unable to find or make space to run this candidate, go on to
+ // the next one
+ continue;
}
if (toReschedule != null) {
@@ -2516,7 +2536,7 @@ public class SyncManager implements OnAccountsUpdateListener {
return mSyncStorageEngine.insertStartSyncEvent(
syncOperation.account, syncOperation.userId, syncOperation.authority,
- now, source);
+ now, source, syncOperation.isInitialization());
}
public void stopSyncEvent(long rowId, SyncOperation syncOperation, String resultMessage,
diff --git a/core/java/android/content/SyncOperation.java b/core/java/android/content/SyncOperation.java
index 4e86ef8a2eb2..9fcc22d3f942 100644
--- a/core/java/android/content/SyncOperation.java
+++ b/core/java/android/content/SyncOperation.java
@@ -116,6 +116,10 @@ public class SyncOperation implements Comparable {
return extras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, false);
}
+ public boolean isExpedited() {
+ return extras.getBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false);
+ }
+
public boolean ignoreBackoff() {
return extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF, false);
}
diff --git a/core/java/android/content/SyncStorageEngine.java b/core/java/android/content/SyncStorageEngine.java
index d821918766ba..6c7e9404901a 100644
--- a/core/java/android/content/SyncStorageEngine.java
+++ b/core/java/android/content/SyncStorageEngine.java
@@ -221,6 +221,7 @@ public class SyncStorageEngine extends Handler {
long upstreamActivity;
long downstreamActivity;
String mesg;
+ boolean initialization;
}
public static class DayStats {
@@ -1012,7 +1013,7 @@ public class SyncStorageEngine extends Handler {
* Note that sync has started for the given account and authority.
*/
public long insertStartSyncEvent(Account accountName, int userId, String authorityName,
- long now, int source) {
+ long now, int source, boolean initialization) {
long id;
synchronized (mAuthorities) {
if (Log.isLoggable(TAG, Log.VERBOSE)) {
@@ -1025,6 +1026,7 @@ public class SyncStorageEngine extends Handler {
return -1;
}
SyncHistoryItem item = new SyncHistoryItem();
+ item.initialization = initialization;
item.authorityId = authority.ident;
item.historyId = mNextHistoryId++;
if (mNextHistoryId < 0) mNextHistoryId = 0;
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index cbabc7cf8634..e1434b3bad67 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -298,6 +298,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
* activity's manifest.
*
* Default value is false (no support for RTL).
+ * @hide
*/
public static final int FLAG_SUPPORTS_RTL = 1<<22;
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 98b40eb54883..ad52e13873b0 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -1458,7 +1458,7 @@ public class PackageParser {
com.android.internal.R.styleable.AndroidManifestPermissionGroup_permissionGroupFlags, 0);
perm.info.priority = sa.getInt(
com.android.internal.R.styleable.AndroidManifestPermissionGroup_priority, 0);
- if (perm.info.priority > 0 && (flags&PARSE_IS_SYSTEM) != 0) {
+ if (perm.info.priority > 0 && (flags&PARSE_IS_SYSTEM) == 0) {
perm.info.priority = 0;
}
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index 5ed8dd12cca0..89068e79f16e 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -155,7 +155,7 @@ public class Camera {
private boolean mOneShot;
private boolean mWithBuffer;
private boolean mFaceDetectionRunning = false;
- private ReentrantLock mFocusLock = new ReentrantLock();
+ private Object mAutoFocusCallbackLock = new Object();
/**
* Broadcast Action: A new picture is taken by the camera, and the entry of
@@ -471,6 +471,11 @@ public class Camera {
* Called as preview frames are displayed. This callback is invoked
* on the event thread {@link #open(int)} was called from.
*
+ * <p>If using the {@link android.graphics.ImageFormat#YV12} format,
+ * refer to the equations in {@link Camera.Parameters#setPreviewFormat}
+ * for the arrangement of the pixel data in the preview callback
+ * buffers.
+ *
* @param data the contents of the preview frame in the format defined
* by {@link android.graphics.ImageFormat}, which can be queried
* with {@link android.hardware.Camera.Parameters#getPreviewFormat()}.
@@ -508,7 +513,9 @@ public class Camera {
mRawImageCallback = null;
mPostviewCallback = null;
mJpegCallback = null;
- mAutoFocusCallback = null;
+ synchronized (mAutoFocusCallbackLock) {
+ mAutoFocusCallback = null;
+ }
mAutoFocusMoveCallback = null;
}
@@ -611,12 +618,17 @@ public class Camera {
* the frame is discarded. Applications should add buffers back when they
* finish processing the data in them.
*
- * <p>The size of the buffer is determined by multiplying the preview
- * image width, height, and bytes per pixel. The width and height can be
- * read from {@link Camera.Parameters#getPreviewSize()}. Bytes per pixel
- * can be computed from
- * {@link android.graphics.ImageFormat#getBitsPerPixel(int)} / 8,
- * using the image format from {@link Camera.Parameters#getPreviewFormat()}.
+ * <p>For formats besides YV12, the size of the buffer is determined by
+ * multiplying the preview image width, height, and bytes per pixel. The
+ * width and height can be read from
+ * {@link Camera.Parameters#getPreviewSize()}. Bytes per pixel can be
+ * computed from {@link android.graphics.ImageFormat#getBitsPerPixel(int)} /
+ * 8, using the image format from
+ * {@link Camera.Parameters#getPreviewFormat()}.
+ *
+ * <p>If using the {@link android.graphics.ImageFormat#YV12} format, the
+ * size can be calculated using the equations listed in
+ * {@link Camera.Parameters#setPreviewFormat}.
*
* <p>This method is only necessary when
* {@link #setPreviewCallbackWithBuffer(PreviewCallback)} is used. When
@@ -626,8 +638,8 @@ public class Camera {
* hold the preview frame data, preview callback will return null and
* the buffer will be removed from the buffer queue.
*
- * @param callbackBuffer the buffer to add to the queue.
- * The size should be width * height * bits_per_pixel / 8.
+ * @param callbackBuffer the buffer to add to the queue. The size of the
+ * buffer must match the values described above.
* @see #setPreviewCallbackWithBuffer(PreviewCallback)
*/
public final void addCallbackBuffer(byte[] callbackBuffer)
@@ -748,14 +760,13 @@ public class Camera {
return;
case CAMERA_MSG_FOCUS:
- mFocusLock.lock();
- try {
- if (mAutoFocusCallback != null) {
- boolean success = msg.arg1 == 0 ? false : true;
- mAutoFocusCallback.onAutoFocus(success, mCamera);
- }
- } finally {
- mFocusLock.unlock();
+ AutoFocusCallback cb = null;
+ synchronized (mAutoFocusCallbackLock) {
+ cb = mAutoFocusCallback;
+ }
+ if (cb != null) {
+ boolean success = msg.arg1 == 0 ? false : true;
+ cb.onAutoFocus(success, mCamera);
}
return;
@@ -880,13 +891,10 @@ public class Camera {
*/
public final void autoFocus(AutoFocusCallback cb)
{
- mFocusLock.lock();
- try {
+ synchronized (mAutoFocusCallbackLock) {
mAutoFocusCallback = cb;
- native_autoFocus();
- } finally {
- mFocusLock.unlock();
}
+ native_autoFocus();
}
private native final void native_autoFocus();
@@ -900,14 +908,26 @@ public class Camera {
*/
public final void cancelAutoFocus()
{
- mFocusLock.lock();
- try {
+ synchronized (mAutoFocusCallbackLock) {
mAutoFocusCallback = null;
- native_cancelAutoFocus();
- removePendingAFCompletionMessages();
- } finally {
- mFocusLock.unlock();
}
+ native_cancelAutoFocus();
+ // CAMERA_MSG_FOCUS should be removed here because the following
+ // scenario can happen:
+ // - An application uses the same thread for autoFocus, cancelAutoFocus
+ // and looper thread.
+ // - The application calls autoFocus.
+ // - HAL sends CAMERA_MSG_FOCUS, which enters the looper message queue.
+ // Before event handler's handleMessage() is invoked, the application
+ // calls cancelAutoFocus and autoFocus.
+ // - The application gets the old CAMERA_MSG_FOCUS and thinks autofocus
+ // has been completed. But in fact it is not.
+ //
+ // As documented in the beginning of the file, apps should not use
+ // multiple threads to call autoFocus and cancelAutoFocus at the same
+ // time. It is HAL's responsibility not to send a CAMERA_MSG_FOCUS
+ // message after native_cancelAutoFocus is called.
+ mEventHandler.removeMessages(CAMERA_MSG_FOCUS);
}
private native final void native_cancelAutoFocus();
@@ -2289,12 +2309,44 @@ public class Camera {
* {@link android.graphics.ImageFormat#NV21}, which
* uses the NV21 encoding format.</p>
*
- * @param pixel_format the desired preview picture format, defined
- * by one of the {@link android.graphics.ImageFormat} constants.
- * (E.g., <var>ImageFormat.NV21</var> (default),
- * <var>ImageFormat.RGB_565</var>, or
- * <var>ImageFormat.JPEG</var>)
+ * <p>Use {@link Parameters#getSupportedPreviewFormats} to get a list of
+ * the available preview formats.
+ *
+ * <p>It is strongly recommended that either
+ * {@link android.graphics.ImageFormat#NV21} or
+ * {@link android.graphics.ImageFormat#YV12} is used, since
+ * they are supported by all camera devices.</p>
+ *
+ * <p>For YV12, the image buffer that is received is not necessarily
+ * tightly packed, as there may be padding at the end of each row of
+ * pixel data, as described in
+ * {@link android.graphics.ImageFormat#YV12}. For camera callback data,
+ * it can be assumed that the stride of the Y and UV data is the
+ * smallest possible that meets the alignment requirements. That is, if
+ * the preview size is <var>width x height</var>, then the following
+ * equations describe the buffer index for the beginning of row
+ * <var>y</var> for the Y plane and row <var>c</var> for the U and V
+ * planes:
+ *
+ * {@code
+ * <pre>
+ * yStride = (int) ceil(width / 16.0) * 16;
+ * uvStride = (int) ceil( (yStride / 2) / 16.0) * 16;
+ * ySize = yStride * height;
+ * uvSize = uvStride * height / 2;
+ * yRowIndex = yStride * y;
+ * uRowIndex = ySize + uvSize + uvStride * c;
+ * vRowIndex = ySize + uvStride * c;
+ * size = ySize + uvSize * 2;</pre>
+ * }
+ *
+ * @param pixel_format the desired preview picture format, defined by
+ * one of the {@link android.graphics.ImageFormat} constants. (E.g.,
+ * <var>ImageFormat.NV21</var> (default), or
+ * <var>ImageFormat.YV12</var>)
+ *
* @see android.graphics.ImageFormat
+ * @see android.hardware.Camera.Parameters#getSupportedPreviewFormats
*/
public void setPreviewFormat(int pixel_format) {
String s = cameraFormatForPixelFormat(pixel_format);
@@ -2312,6 +2364,7 @@ public class Camera {
*
* @return the preview format.
* @see android.graphics.ImageFormat
+ * @see #setPreviewFormat
*/
public int getPreviewFormat() {
return pixelFormatForCameraFormat(get(KEY_PREVIEW_FORMAT));
@@ -2325,6 +2378,7 @@ public class Camera {
* @return a list of supported preview formats. This method will always
* return a list with at least one element.
* @see android.graphics.ImageFormat
+ * @see #setPreviewFormat
*/
public List<Integer> getSupportedPreviewFormats() {
String str = get(KEY_PREVIEW_FORMAT + SUPPORTED_VALUES_SUFFIX);
@@ -3596,13 +3650,4 @@ public class Camera {
return false;
}
};
-
- /*
- * At any time, there should be at most one pending auto focus completion
- * message, but we simply remove all pending AF completion messages in
- * the looper's queue.
- */
- private void removePendingAFCompletionMessages() {
- mEventHandler.removeMessages(CAMERA_MSG_FOCUS);
- }
}
diff --git a/core/java/android/net/INetworkStatsService.aidl b/core/java/android/net/INetworkStatsService.aidl
index 08d4c6cbf4ab..b7b87318554c 100644
--- a/core/java/android/net/INetworkStatsService.aidl
+++ b/core/java/android/net/INetworkStatsService.aidl
@@ -42,5 +42,7 @@ interface INetworkStatsService {
void setUidForeground(int uid, boolean uidForeground);
/** Force update of statistics. */
void forceUpdate();
+ /** Advise persistance threshold; may be overridden internally. */
+ void advisePersistThreshold(long thresholdBytes);
}
diff --git a/core/java/android/net/NetworkIdentity.java b/core/java/android/net/NetworkIdentity.java
index 4ac5e764729a..3c67bf9e845b 100644
--- a/core/java/android/net/NetworkIdentity.java
+++ b/core/java/android/net/NetworkIdentity.java
@@ -158,9 +158,14 @@ public class NetworkIdentity {
}
} else if (type == TYPE_WIFI) {
- final WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
- final WifiInfo info = wifi.getConnectionInfo();
- networkId = info != null ? info.getSSID() : null;
+ if (state.networkId != null) {
+ networkId = state.networkId;
+ } else {
+ final WifiManager wifi = (WifiManager) context.getSystemService(
+ Context.WIFI_SERVICE);
+ final WifiInfo info = wifi.getConnectionInfo();
+ networkId = info != null ? info.getSSID() : null;
+ }
}
return new NetworkIdentity(type, subType, subscriberId, networkId, roaming);
diff --git a/core/java/android/net/NetworkState.java b/core/java/android/net/NetworkState.java
index 2fc69ad28707..fbe1f8296be4 100644
--- a/core/java/android/net/NetworkState.java
+++ b/core/java/android/net/NetworkState.java
@@ -31,18 +31,20 @@ public class NetworkState implements Parcelable {
public final LinkCapabilities linkCapabilities;
/** Currently only used by testing. */
public final String subscriberId;
+ public final String networkId;
public NetworkState(NetworkInfo networkInfo, LinkProperties linkProperties,
LinkCapabilities linkCapabilities) {
- this(networkInfo, linkProperties, linkCapabilities, null);
+ this(networkInfo, linkProperties, linkCapabilities, null, null);
}
public NetworkState(NetworkInfo networkInfo, LinkProperties linkProperties,
- LinkCapabilities linkCapabilities, String subscriberId) {
+ LinkCapabilities linkCapabilities, String subscriberId, String networkId) {
this.networkInfo = networkInfo;
this.linkProperties = linkProperties;
this.linkCapabilities = linkCapabilities;
this.subscriberId = subscriberId;
+ this.networkId = networkId;
}
public NetworkState(Parcel in) {
@@ -50,6 +52,7 @@ public class NetworkState implements Parcelable {
linkProperties = in.readParcelable(null);
linkCapabilities = in.readParcelable(null);
subscriberId = in.readString();
+ networkId = in.readString();
}
@Override
@@ -63,6 +66,7 @@ public class NetworkState implements Parcelable {
out.writeParcelable(linkProperties, flags);
out.writeParcelable(linkCapabilities, flags);
out.writeString(subscriberId);
+ out.writeString(networkId);
}
public static final Creator<NetworkState> CREATOR = new Creator<NetworkState>() {
diff --git a/core/java/android/os/ConditionVariable.java b/core/java/android/os/ConditionVariable.java
index 95a9259551e3..07b221c81dba 100644
--- a/core/java/android/os/ConditionVariable.java
+++ b/core/java/android/os/ConditionVariable.java
@@ -26,7 +26,7 @@ package android.os;
* block() will not block, and instead return immediately.
*
* <p>
- * This class uses itself is at the object to wait on, so if you wait()
+ * This class uses itself as the object to wait on, so if you wait()
* or notify() on a ConditionVariable, the results are undefined.
*/
public class ConditionVariable
diff --git a/core/java/android/os/HandlerThread.java b/core/java/android/os/HandlerThread.java
index d61b3b4a7bbc..daf1f5933520 100644
--- a/core/java/android/os/HandlerThread.java
+++ b/core/java/android/os/HandlerThread.java
@@ -42,7 +42,7 @@ public class HandlerThread extends Thread {
}
/**
- * Call back method that can be explicitly over ridden if needed to execute some
+ * Call back method that can be explicitly overridden if needed to execute some
* setup before Looper loops.
*/
protected void onLooperPrepared() {
diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl
index 6ecc64054569..e7ea3558dae1 100644
--- a/core/java/android/os/INetworkManagementService.aidl
+++ b/core/java/android/os/INetworkManagementService.aidl
@@ -238,7 +238,8 @@ interface INetworkManagementService
* Return global network statistics summarized at an interface level,
* without any UID-level granularity.
*/
- NetworkStats getNetworkStatsSummary();
+ NetworkStats getNetworkStatsSummaryDev();
+ NetworkStats getNetworkStatsSummaryXt();
/**
* Return detailed network statistics with UID-level granularity,
diff --git a/core/java/android/os/Message.java b/core/java/android/os/Message.java
index 4aa7fe2df272..0abc149c8428 100644
--- a/core/java/android/os/Message.java
+++ b/core/java/android/os/Message.java
@@ -97,8 +97,8 @@ public final class Message implements Parcelable {
private static Message sPool;
private static int sPoolSize = 0;
- private static final int MAX_POOL_SIZE = 10;
-
+ private static final int MAX_POOL_SIZE = 50;
+
/**
* Return a new Message instance from the global pool. Allows us to
* avoid allocating new objects in many cases.
diff --git a/core/java/android/os/Trace.java b/core/java/android/os/Trace.java
index 2a4550686cb8..05acd63a07b0 100644
--- a/core/java/android/os/Trace.java
+++ b/core/java/android/os/Trace.java
@@ -36,6 +36,7 @@ public final class Trace {
public static final long TRACE_TAG_WEBVIEW = 1L << 4;
public static final long TRACE_TAG_WINDOW_MANAGER = 1L << 5;
public static final long TRACE_TAG_ACTIVITY_MANAGER = 1L << 6;
+ public static final long TRACE_TAG_SYNC_MANAGER = 1L << 7;
private static final long sEnabledTags = nativeGetEnabledTags();
diff --git a/core/java/android/provider/SocialContract.java b/core/java/android/provider/SocialContract.java
deleted file mode 100644
index ee271ba84481..000000000000
--- a/core/java/android/provider/SocialContract.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package android.provider;
-
-import android.content.res.Resources;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
-
-/**
- * The contract between the social provider and applications. Contains
- * definitions for the supported URIs and columns.
- *
- * @hide
- */
-public class SocialContract {
- /** The authority for the social provider */
- public static final String AUTHORITY = "com.android.social";
-
- /** A content:// style uri to the authority for the contacts provider */
- public static final Uri AUTHORITY_URI = Uri.parse("content://" + AUTHORITY);
-
- private interface ActivitiesColumns {
- /**
- * The package name to use when creating {@link Resources} objects for
- * this data row. This value is only designed for use when building user
- * interfaces, and should not be used to infer the owner.
- * <p>
- * Type: TEXT
- */
- public static final String RES_PACKAGE = "res_package";
-
- /**
- * The mime-type of this social activity.
- * <p>
- * Type: TEXT
- */
- public static final String MIMETYPE = "mimetype";
-
- /**
- * Internal raw identifier for this social activity. This field is
- * analogous to the <code>atom:id</code> element defined in RFC 4287.
- * <p>
- * Type: TEXT
- */
- public static final String RAW_ID = "raw_id";
-
- /**
- * Reference to another {@link Activities#RAW_ID} that this social activity
- * is replying to. This field is analogous to the
- * <code>thr:in-reply-to</code> element defined in RFC 4685.
- * <p>
- * Type: TEXT
- */
- public static final String IN_REPLY_TO = "in_reply_to";
-
- /**
- * Reference to the {@link android.provider.ContactsContract.Contacts#_ID} that authored
- * this social activity. This field is analogous to the <code>atom:author</code>
- * element defined in RFC 4287.
- * <p>
- * Type: INTEGER
- */
- public static final String AUTHOR_CONTACT_ID = "author_contact_id";
-
- /**
- * Optional reference to the {@link android.provider.ContactsContract.Contacts#_ID} this
- * social activity is targeted towards. If more than one direct target, this field may
- * be left undefined. This field is analogous to the
- * <code>activity:target</code> element defined in the Atom Activity
- * Extensions Internet-Draft.
- * <p>
- * Type: INTEGER
- */
- public static final String TARGET_CONTACT_ID = "target_contact_id";
-
- /**
- * Timestamp when this social activity was published, in a
- * {@link System#currentTimeMillis()} time base. This field is analogous
- * to the <code>atom:published</code> element defined in RFC 4287.
- * <p>
- * Type: INTEGER
- */
- public static final String PUBLISHED = "published";
-
- /**
- * Timestamp when the original social activity in a thread was
- * published. For activities that have an in-reply-to field specified, the
- * content provider will automatically populate this field with the
- * timestamp of the original activity.
- * <p>
- * This field is useful for sorting order of activities that keeps together all
- * messages in each thread.
- * <p>
- * Type: INTEGER
- */
- public static final String THREAD_PUBLISHED = "thread_published";
-
- /**
- * Title of this social activity. This field is analogous to the
- * <code>atom:title</code> element defined in RFC 4287.
- * <p>
- * Type: TEXT
- */
- public static final String TITLE = "title";
-
- /**
- * Summary of this social activity. This field is analogous to the
- * <code>atom:summary</code> element defined in RFC 4287.
- * <p>
- * Type: TEXT
- */
- public static final String SUMMARY = "summary";
-
- /**
- * A URI associated this social activity. This field is analogous to the
- * <code>atom:link rel="alternate"</code> element defined in RFC 4287.
- * <p>
- * Type: TEXT
- */
- public static final String LINK = "link";
-
- /**
- * Optional thumbnail specific to this social activity. This is the raw
- * bytes of an image that could be inflated using {@link BitmapFactory}.
- * <p>
- * Type: BLOB
- */
- public static final String THUMBNAIL = "thumbnail";
- }
-
- public static final class Activities implements BaseColumns, ActivitiesColumns {
- /**
- * This utility class cannot be instantiated
- */
- private Activities() {
- }
-
- /**
- * The content:// style URI for this table
- */
- public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "activities");
-
- /**
- * The content:// URI for this table filtered to the set of social activities
- * authored by a specific {@link android.provider.ContactsContract.Contacts#_ID}.
- */
- public static final Uri CONTENT_AUTHORED_BY_URI =
- Uri.withAppendedPath(CONTENT_URI, "authored_by");
-
- /**
- * The {@link Uri} for the latest social activity performed by any
- * raw contact aggregated under the specified {@link Contacts#_ID}. Will
- * also join with most-present {@link Presence} for this aggregate.
- */
- public static final Uri CONTENT_CONTACT_STATUS_URI =
- Uri.withAppendedPath(AUTHORITY_URI, "contact_status");
-
- /**
- * The MIME type of {@link #CONTENT_URI} providing a directory of social
- * activities.
- */
- public static final String CONTENT_TYPE = "vnd.android.cursor.dir/activity";
-
- /**
- * The MIME type of a {@link #CONTENT_URI} subdirectory of a single
- * social activity.
- */
- public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/activity";
- }
-
-}
diff --git a/core/java/android/service/textservice/SpellCheckerService.java b/core/java/android/service/textservice/SpellCheckerService.java
index c579e6e3f5f5..77b22ed1faae 100644
--- a/core/java/android/service/textservice/SpellCheckerService.java
+++ b/core/java/android/service/textservice/SpellCheckerService.java
@@ -397,14 +397,6 @@ public abstract class SpellCheckerService extends Service {
}
wordStart = wordIterator.getBeginning(wordEnd);
}
- if (originalText.length() >= SpellChecker.WORD_ITERATOR_INTERVAL
- && wordItems.size() >= 2) {
- if (DBG) {
- Log.w(TAG, "Remove possibly divided word: "
- + wordItems.get(0).mTextInfo.getText());
- }
- wordItems.remove(0);
- }
return new SentenceTextInfoParams(originalTextInfo, wordItems);
}
diff --git a/core/java/android/text/TextDirectionHeuristic.java b/core/java/android/text/TextDirectionHeuristic.java
index 0bf64e4a9afb..513e11ce34d5 100644
--- a/core/java/android/text/TextDirectionHeuristic.java
+++ b/core/java/android/text/TextDirectionHeuristic.java
@@ -22,5 +22,5 @@ package android.text;
* @hide
*/
public interface TextDirectionHeuristic {
- /** @hide */ boolean isRtl(char[] text, int start, int count);
+ boolean isRtl(char[] text, int start, int count);
}
diff --git a/core/java/android/text/TextDirectionHeuristics.java b/core/java/android/text/TextDirectionHeuristics.java
index 6ca61616384c..be2840b8665d 100644
--- a/core/java/android/text/TextDirectionHeuristics.java
+++ b/core/java/android/text/TextDirectionHeuristics.java
@@ -22,6 +22,7 @@ import android.view.View;
/**
* Some objects that implement TextDirectionHeuristic.
+ * @hide
*/
public class TextDirectionHeuristics {
diff --git a/core/java/android/util/LocaleUtil.java b/core/java/android/util/LocaleUtil.java
index 60526e198c94..93f5cd36cac5 100644
--- a/core/java/android/util/LocaleUtil.java
+++ b/core/java/android/util/LocaleUtil.java
@@ -24,6 +24,7 @@ import libcore.icu.ICU;
/**
* Various utilities for Locales
*
+ * @hide
*/
public class LocaleUtil {
@@ -40,7 +41,8 @@ public class LocaleUtil {
* {@link View#LAYOUT_DIRECTION_LTR} or
* {@link View#LAYOUT_DIRECTION_RTL}.
*
- * Be careful: this code will need to be updated when vertical scripts will be supported
+ * Warning: this code does not support vertical scripts.
+ * @hide
*/
public static int getLayoutDirectionFromLocale(Locale locale) {
if (locale != null && !locale.equals(Locale.ROOT)) {
@@ -66,8 +68,7 @@ public class LocaleUtil {
* {@link View#LAYOUT_DIRECTION_LTR} or
* {@link View#LAYOUT_DIRECTION_RTL}.
*
- * Be careful: this code will need to be updated when vertical scripts will be supported
- *
+ * Warning: this code does not support vertical scripts.
* @hide
*/
private static int getLayoutDirectionFromFirstChar(Locale locale) {
diff --git a/core/java/android/util/MathUtils.java b/core/java/android/util/MathUtils.java
index b35dd1eac0de..13a692ea18c9 100644
--- a/core/java/android/util/MathUtils.java
+++ b/core/java/android/util/MathUtils.java
@@ -39,6 +39,10 @@ public final class MathUtils {
return amount < low ? low : (amount > high ? high : amount);
}
+ public static long constrain(long amount, long low, long high) {
+ return amount < low ? low : (amount > high ? high : amount);
+ }
+
public static float constrain(float amount, float low, float high) {
return amount < low ? low : (amount > high ? high : amount);
}
diff --git a/core/java/android/view/ActionMode.java b/core/java/android/view/ActionMode.java
index 0ba5fdbc4f1a..a359952ddcf2 100644
--- a/core/java/android/view/ActionMode.java
+++ b/core/java/android/view/ActionMode.java
@@ -30,6 +30,7 @@ package android.view;
*/
public abstract class ActionMode {
private Object mTag;
+ private boolean mTitleOptionalHint;
/**
* Set a tag object associated with this ActionMode.
@@ -119,6 +120,18 @@ public abstract class ActionMode {
* @param titleOptional true if the title only presents optional information.
*/
public void setTitleOptionalHint(boolean titleOptional) {
+ mTitleOptionalHint = titleOptional;
+ }
+
+ /**
+ * @return true if this action mode has been given a hint to consider the
+ * title/subtitle display to be optional.
+ *
+ * @see #setTitleOptionalHint(boolean)
+ * @see #isTitleOptional()
+ */
+ public boolean getTitleOptionalHint() {
+ return mTitleOptionalHint;
}
/**
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index bda80162c657..c94731201349 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -391,6 +391,15 @@ public class Display {
}
/**
+ * If the display is mirrored to an external HDMI display, returns the
+ * rotation of that display relative to its natural orientation.
+ * @hide
+ */
+ public int getExternalRotation() {
+ return Surface.ROTATION_0;
+ }
+
+ /**
* Gets display metrics based on an explicit assumed display size.
* @hide
*/
diff --git a/core/java/android/view/DisplayList.java b/core/java/android/view/DisplayList.java
index fba73fbdd522..3dab17489d25 100644
--- a/core/java/android/view/DisplayList.java
+++ b/core/java/android/view/DisplayList.java
@@ -30,7 +30,7 @@ import android.graphics.Matrix;
public abstract class DisplayList {
/**
* Flag used when calling
- * {@link HardwareCanvas#drawDisplayList(DisplayList, int, int, android.graphics.Rect, int)}.
+ * {@link HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int)}
* When this flag is set, draw operations lying outside of the bounds of the
* display list will be culled early. It is recommeneded to always set this
* flag.
@@ -42,21 +42,21 @@ public abstract class DisplayList {
/**
* Indicates that the display list is done drawing.
*
- * @see HardwareCanvas#drawDisplayList(DisplayList, int, int, android.graphics.Rect, int)
+ * @see HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int)
*/
public static final int STATUS_DONE = 0x0;
/**
* Indicates that the display list needs another drawing pass.
*
- * @see HardwareCanvas#drawDisplayList(DisplayList, int, int, android.graphics.Rect, int)
+ * @see HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int)
*/
public static final int STATUS_DRAW = 0x1;
/**
* Indicates that the display list needs to re-execute its GL functors.
*
- * @see HardwareCanvas#drawDisplayList(DisplayList, int, int, android.graphics.Rect, int)
+ * @see HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int)
* @see HardwareCanvas#callDrawGLFunction(int)
*/
public static final int STATUS_INVOKE = 0x2;
diff --git a/core/java/android/view/FocusFinder.java b/core/java/android/view/FocusFinder.java
index 98375aeacf24..6bf1888cc2c2 100644
--- a/core/java/android/view/FocusFinder.java
+++ b/core/java/android/view/FocusFinder.java
@@ -62,7 +62,7 @@ public class FocusFinder {
* @return The next focusable view, or null if none exists.
*/
public final View findNextFocus(ViewGroup root, View focused, int direction) {
- return findNextFocus(root, focused, mFocusedRect, direction);
+ return findNextFocus(root, focused, null, direction);
}
/**
@@ -122,34 +122,40 @@ public class FocusFinder {
int direction, ArrayList<View> focusables) {
final int directionMasked = (direction & ~View.FOCUS_ACCESSIBILITY);
if (focused != null) {
+ if (focusedRect == null) {
+ focusedRect = mFocusedRect;
+ }
// fill in interesting rect from focused
focused.getFocusedRect(focusedRect);
root.offsetDescendantRectToMyCoords(focused, focusedRect);
} else {
- // make up a rect at top left or bottom right of root
- switch (directionMasked) {
- case View.FOCUS_RIGHT:
- case View.FOCUS_DOWN:
- setFocusTopLeft(root, focusedRect);
- break;
- case View.FOCUS_FORWARD:
- if (root.isLayoutRtl()) {
- setFocusBottomRight(root, focusedRect);
- } else {
- setFocusTopLeft(root, focusedRect);
- }
- break;
-
- case View.FOCUS_LEFT:
- case View.FOCUS_UP:
- setFocusBottomRight(root, focusedRect);
- break;
- case View.FOCUS_BACKWARD:
- if (root.isLayoutRtl()) {
+ if (focusedRect == null) {
+ focusedRect = mFocusedRect;
+ // make up a rect at top left or bottom right of root
+ switch (directionMasked) {
+ case View.FOCUS_RIGHT:
+ case View.FOCUS_DOWN:
setFocusTopLeft(root, focusedRect);
- } else {
+ break;
+ case View.FOCUS_FORWARD:
+ if (root.isLayoutRtl()) {
+ setFocusBottomRight(root, focusedRect);
+ } else {
+ setFocusTopLeft(root, focusedRect);
+ }
+ break;
+
+ case View.FOCUS_LEFT:
+ case View.FOCUS_UP:
setFocusBottomRight(root, focusedRect);
- break;
+ break;
+ case View.FOCUS_BACKWARD:
+ if (root.isLayoutRtl()) {
+ setFocusTopLeft(root, focusedRect);
+ } else {
+ setFocusBottomRight(root, focusedRect);
+ break;
+ }
}
}
}
diff --git a/core/java/android/view/Gravity.java b/core/java/android/view/Gravity.java
index f031fe767b58..4547aa681c07 100644
--- a/core/java/android/view/Gravity.java
+++ b/core/java/android/view/Gravity.java
@@ -155,6 +155,7 @@ public class Gravity
*
* @see {@link View#LAYOUT_DIRECTION_LTR}
* @see {@link View#LAYOUT_DIRECTION_RTL}
+ * @hide
*/
public static void apply(int gravity, int w, int h, Rect container,
Rect outRect, int layoutDirection) {
@@ -292,6 +293,7 @@ public class Gravity
*
* @see {@link View#LAYOUT_DIRECTION_LTR}
* @see {@link View#LAYOUT_DIRECTION_RTL}
+ * @hide
*/
public static void apply(int gravity, int w, int h, Rect container,
int xAdj, int yAdj, Rect outRect, int layoutDirection) {
@@ -372,6 +374,7 @@ public class Gravity
*
* @see {@link View#LAYOUT_DIRECTION_LTR}
* @see {@link View#LAYOUT_DIRECTION_RTL}
+ * @hide
*/
public static void applyDisplay(int gravity, Rect display, Rect inoutObj, int layoutDirection) {
int absGravity = getAbsoluteGravity(gravity, layoutDirection);
@@ -408,6 +411,7 @@ public class Gravity
* @param gravity The gravity to convert to absolute (horizontal) values.
* @param layoutDirection The layout direction.
* @return gravity converted to absolute (horizontal) values.
+ * @hide
*/
public static int getAbsoluteGravity(int gravity, int layoutDirection) {
int result = gravity;
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 092bcbd4b4ef..5299d58567ab 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -340,10 +340,9 @@ import java.util.concurrent.CopyOnWriteArrayList;
* Padding can be used to offset the content of the view by a specific amount of
* pixels. For instance, a left padding of 2 will push the view's content by
* 2 pixels to the right of the left edge. Padding can be set using the
- * {@link #setPadding(int, int, int, int)} or {@link #setPaddingRelative(int, int, int, int)}
- * method and queried by calling {@link #getPaddingLeft()}, {@link #getPaddingTop()},
- * {@link #getPaddingRight()}, {@link #getPaddingBottom()}, {@link #getPaddingStart()},
- * {@link #getPaddingEnd()}.
+ * {@link #setPadding(int, int, int, int)} method and queried by calling
+ * {@link #getPaddingLeft()}, {@link #getPaddingTop()}, {@link #getPaddingRight()},
+ * {@link #getPaddingBottom()}.
* </p>
*
* <p>
@@ -537,9 +536,32 @@ import java.util.concurrent.CopyOnWriteArrayList;
* themselves rather than by putting them in a separate structure.
* </p>
*
+ * <a name="Properties"></a>
+ * <h3>Properties</h3>
+ * <p>
+ * The View class exposes an {@link #ALPHA} property, as well as several transform-related
+ * properties, such as {@link #TRANSLATION_X} and {@link #TRANSLATION_Y}. These properties are
+ * available both in the {@link Property} form as well as in similarly-named setter/getter
+ * methods (such as {@link #setAlpha(float)} for {@link #ALPHA}). These properties can
+ * be used to set persistent state associated with these rendering-related properties on the view.
+ * The properties and methods can also be used in conjunction with
+ * {@link android.animation.Animator Animator}-based animations, described more in the
+ * <a href="#Animation">Animation</a> section.
+ * </p>
+ *
* <a name="Animation"></a>
* <h3>Animation</h3>
* <p>
+ * Starting with Android 3.0, the preferred way of animating views is to use the
+ * {@link android.animation} package APIs. These {@link android.animation.Animator Animator}-based
+ * classes change actual properties of the View object, such as {@link #setAlpha(float) alpha} and
+ * {@link #setTranslationX(float) translationX}. This behavior is contrasted to that of the pre-3.0
+ * {@link android.view.animation.Animation Animation}-based classes, which instead animate only
+ * how the view is drawn on the display. In particular, the {@link ViewPropertyAnimator} class
+ * makes animating these View properties particularly easy and efficient.
+ * </p>
+ * <p>
+ * Alternatively, you can use the pre-3.0 animation classes to animate how Views are rendered.
* You can attach an {@link Animation} object to a view using
* {@link #setAnimation(Animation)} or
* {@link #startAnimation(Animation)}. The animation can alter the scale,
@@ -548,10 +570,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
* subtree rooted by that node. When an animation is started, the framework will
* take care of redrawing the appropriate views until the animation completes.
* </p>
- * <p>
- * Starting with Android 3.0, the preferred way of animating views is to use the
- * {@link android.animation} package APIs.
- * </p>
*
* <a name="Security"></a>
* <h3>Security</h3>
@@ -606,8 +624,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
* @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_paddingStart
- * @attr ref android.R.styleable#View_paddingEnd
* @attr ref android.R.styleable#View_saveEnabled
* @attr ref android.R.styleable#View_rotation
* @attr ref android.R.styleable#View_rotationX
@@ -629,7 +645,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
* @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_textAlignment
* @attr ref android.R.styleable#View_transformPivotX
* @attr ref android.R.styleable#View_transformPivotY
* @attr ref android.R.styleable#View_translationX
@@ -1763,24 +1778,28 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
/**
* Horizontal layout direction of this view is from Left to Right.
* Use with {@link #setLayoutDirection}.
+ * @hide
*/
public static final int LAYOUT_DIRECTION_LTR = 0;
/**
* Horizontal layout direction of this view is from Right to Left.
* Use with {@link #setLayoutDirection}.
+ * @hide
*/
public static final int LAYOUT_DIRECTION_RTL = 1;
/**
* Horizontal layout direction of this view is inherited from its parent.
* Use with {@link #setLayoutDirection}.
+ * @hide
*/
public static final int LAYOUT_DIRECTION_INHERIT = 2;
/**
* Horizontal layout direction of this view is from deduced from the default language
* script for the locale. Use with {@link #setLayoutDirection}.
+ * @hide
*/
public static final int LAYOUT_DIRECTION_LOCALE = 3;
@@ -1845,6 +1864,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
/**
* Text direction is inherited thru {@link ViewGroup}
+ * @hide
*/
public static final int TEXT_DIRECTION_INHERIT = 0;
@@ -1852,6 +1872,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Text direction is using "first strong algorithm". The first strong directional character
* determines the paragraph direction. If there is no strong directional character, the
* paragraph direction is the view's resolved layout direction.
+ * @hide
*/
public static final int TEXT_DIRECTION_FIRST_STRONG = 1;
@@ -1859,26 +1880,31 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Text direction is using "any-RTL" algorithm. The paragraph direction is RTL if it contains
* any strong RTL character, otherwise it is LTR if it contains any strong LTR characters.
* If there are neither, the paragraph direction is the view's resolved layout direction.
+ * @hide
*/
public static final int TEXT_DIRECTION_ANY_RTL = 2;
/**
* Text direction is forced to LTR.
+ * @hide
*/
public static final int TEXT_DIRECTION_LTR = 3;
/**
* Text direction is forced to RTL.
+ * @hide
*/
public static final int TEXT_DIRECTION_RTL = 4;
/**
* Text direction is coming from the system Locale.
+ * @hide
*/
public static final int TEXT_DIRECTION_LOCALE = 5;
/**
* Default text direction is inherited
+ * @hide
*/
protected static int TEXT_DIRECTION_DEFAULT = TEXT_DIRECTION_INHERIT;
@@ -1936,6 +1962,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
/*
* Default text alignment. The text alignment of this View is inherited from its parent.
* Use with {@link #setTextAlignment(int)}
+ * @hide
*/
public static final int TEXT_ALIGNMENT_INHERIT = 0;
@@ -1944,6 +1971,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* ALIGN_CENTER, or ALIGN_OPPOSITE, which are relative to each paragraph’s text direction.
*
* Use with {@link #setTextAlignment(int)}
+ * @hide
*/
public static final int TEXT_ALIGNMENT_GRAVITY = 1;
@@ -1951,6 +1979,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Align to the start of the paragraph, e.g. ALIGN_NORMAL.
*
* Use with {@link #setTextAlignment(int)}
+ * @hide
*/
public static final int TEXT_ALIGNMENT_TEXT_START = 2;
@@ -1958,6 +1987,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Align to the end of the paragraph, e.g. ALIGN_OPPOSITE.
*
* Use with {@link #setTextAlignment(int)}
+ * @hide
*/
public static final int TEXT_ALIGNMENT_TEXT_END = 3;
@@ -1965,6 +1995,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Center the paragraph, e.g. ALIGN_CENTER.
*
* Use with {@link #setTextAlignment(int)}
+ * @hide
*/
public static final int TEXT_ALIGNMENT_CENTER = 4;
@@ -1973,6 +2004,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* layoutDirection is LTR, and ALIGN_RIGHT otherwise.
*
* Use with {@link #setTextAlignment(int)}
+ * @hide
*/
public static final int TEXT_ALIGNMENT_VIEW_START = 5;
@@ -1981,11 +2013,13 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* layoutDirection is LTR, and ALIGN_LEFT otherwise.
*
* Use with {@link #setTextAlignment(int)}
+ * @hide
*/
public static final int TEXT_ALIGNMENT_VIEW_END = 6;
/**
* Default text alignment is inherited
+ * @hide
*/
protected static int TEXT_ALIGNMENT_DEFAULT = TEXT_ALIGNMENT_GRAVITY;
@@ -4681,10 +4715,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
}
if (getContentDescription() != null) {
- info.addAction(AccessibilityNodeInfo.ACTION_NEXT_AT_GRANULARITY);
- info.addAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_GRANULARITY);
- info.setGranularities(AccessibilityNodeInfo.GRANULARITY_CHARACTER
- | AccessibilityNodeInfo.GRANULARITY_WORD);
+ info.addAction(AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY);
+ info.addAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY);
+ info.setMovementGranularities(AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER
+ | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_WORD);
}
}
@@ -5352,7 +5386,9 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* {@link #LAYOUT_DIRECTION_RTL},
* {@link #LAYOUT_DIRECTION_INHERIT} or
* {@link #LAYOUT_DIRECTION_LOCALE}.
+ *
* @attr ref android.R.styleable#View_layoutDirection
+ * @hide
*/
@ViewDebug.ExportedProperty(category = "layout", mapping = {
@ViewDebug.IntToString(from = LAYOUT_DIRECTION_LTR, to = "LTR"),
@@ -5374,6 +5410,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* {@link #LAYOUT_DIRECTION_LOCALE}.
*
* @attr ref android.R.styleable#View_layoutDirection
+ * @hide
*/
@RemotableViewMethod
public void setLayoutDirection(int layoutDirection) {
@@ -5393,6 +5430,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
*
* @return {@link #LAYOUT_DIRECTION_RTL} if the layout direction is RTL or returns
* {@link #LAYOUT_DIRECTION_LTR} if the layout direction is not RTL.
+ * @hide
*/
@ViewDebug.ExportedProperty(category = "layout", mapping = {
@ViewDebug.IntToString(from = LAYOUT_DIRECTION_LTR, to = "RESOLVED_DIRECTION_LTR"),
@@ -5412,6 +5450,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* layout attribute and/or the inherited value from the parent
*
* @return true if the layout is right-to-left.
+ * @hide
*/
@ViewDebug.ExportedProperty(category = "layout")
public boolean isLayoutRtl() {
@@ -5423,6 +5462,11 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* app should not need to concern itself with saving and restoring, but that
* the framework should take special note to preserve when possible.
*
+ * <p>A view with transient state cannot be trivially rebound from an external
+ * data source, such as an adapter binding item views in a list. This may be
+ * because the view is performing an animation, tracking user selection
+ * of content, or similar.</p>
+ *
* @return true if the view has transient state
*/
@ViewDebug.ExportedProperty(category = "layout")
@@ -5436,6 +5480,11 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* so every call to setHasTransientState(true) should be paired with a later call
* to setHasTransientState(false).
*
+ * <p>A view with transient state cannot be trivially rebound from an external
+ * data source, such as an adapter binding item views in a list. This may be
+ * because the view is performing an animation, tracking user selection
+ * of content, or similar.</p>
+ *
* @param hasTransientState true if this view has transient state
*/
public void setHasTransientState(boolean hasTransientState) {
@@ -6404,12 +6453,12 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
switch (action) {
case AccessibilityNodeInfo.ACTION_CLICK: {
if (isClickable()) {
- performClick();
+ return performClick();
}
} break;
case AccessibilityNodeInfo.ACTION_LONG_CLICK: {
if (isLongClickable()) {
- performLongClick();
+ return performLongClick();
}
} break;
case AccessibilityNodeInfo.ACTION_FOCUS: {
@@ -9138,7 +9187,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
}
public final boolean getLocalVisibleRect(Rect r) {
- Point offset = new Point();
+ final Point offset = mAttachInfo != null ? mAttachInfo.mPoint : new Point();
if (getGlobalVisibleRect(r, offset)) {
r.offset(-offset.x, -offset.y); // make r local
return true;
@@ -10868,6 +10917,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Resolve and cache the layout direction. LTR is set initially. This is implicitly supposing
* that the parent directionality can and will be resolved before its children.
* Will call {@link View#onResolvedLayoutDirectionChanged} when resolution is done.
+ * @hide
*/
public void resolveLayoutDirection() {
// Clear any previous layout direction resolution
@@ -10912,12 +10962,14 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Called when layout direction has been resolved.
*
* The default implementation does nothing.
+ * @hide
*/
public void onResolvedLayoutDirectionChanged() {
}
/**
* Resolve padding depending on layout direction.
+ * @hide
*/
public void resolvePadding() {
// If the user specified the absolute padding (either with android:padding or
@@ -10977,6 +11029,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
*
* @see {@link #LAYOUT_DIRECTION_LTR}
* @see {@link #LAYOUT_DIRECTION_RTL}
+ * @hide
*/
public void onPaddingChanged(int layoutDirection) {
}
@@ -10985,6 +11038,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Check if layout direction resolution can be done.
*
* @return true if layout direction resolution can be done otherwise return false.
+ * @hide
*/
public boolean canResolveLayoutDirection() {
switch (getLayoutDirection()) {
@@ -10998,6 +11052,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
/**
* Reset the resolved layout direction. Will call {@link View#onResolvedLayoutDirectionReset}
* when reset is done.
+ * @hide
*/
public void resetResolvedLayoutDirection() {
// Reset the current resolved bits
@@ -11014,6 +11069,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* resolved layout direction, or to inform child views that inherit their layout direction.
*
* The default implementation does nothing.
+ * @hide
*/
public void onResolvedLayoutDirectionReset() {
}
@@ -11023,6 +11079,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
*
* @param locale Locale to check
* @return true if the Locale uses an RTL script.
+ * @hide
*/
protected static boolean isLayoutDirectionRtl(Locale locale) {
return (LAYOUT_DIRECTION_RTL == LocaleUtil.getLayoutDirectionFromLocale(locale));
@@ -13327,6 +13384,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Return the layout direction of a given Drawable.
*
* @param who the Drawable to query
+ * @hide
*/
public int getResolvedLayoutDirection(Drawable who) {
return (who == mBackground) ? getResolvedLayoutDirection() : LAYOUT_DIRECTION_DEFAULT;
@@ -13762,19 +13820,13 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
/**
* Sets the relative padding. The view may add on the space required to display
* the scrollbars, depending on the style and visibility of the scrollbars.
- * So the values returned from {@link #getPaddingStart}, {@link #getPaddingTop},
- * {@link #getPaddingEnd} and {@link #getPaddingBottom} may be different
* from the values set in this call.
*
- * @attr ref android.R.styleable#View_padding
- * @attr ref android.R.styleable#View_paddingBottom
- * @attr ref android.R.styleable#View_paddingStart
- * @attr ref android.R.styleable#View_paddingEnd
- * @attr ref android.R.styleable#View_paddingTop
* @param start the start padding in pixels
* @param top the top padding in pixels
* @param end the end padding in pixels
* @param bottom the bottom padding in pixels
+ * @hide
*/
public void setPaddingRelative(int start, int top, int end, int bottom) {
mUserPaddingStart = start;
@@ -13828,6 +13880,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* required to display the scrollbars as well.
*
* @return the start padding in pixels
+ * @hide
*/
public int getPaddingStart() {
return (getResolvedLayoutDirection() == LAYOUT_DIRECTION_RTL) ?
@@ -13851,6 +13904,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* required to display the scrollbars as well.
*
* @return the end padding in pixels
+ * @hide
*/
public int getPaddingEnd() {
return (getResolvedLayoutDirection() == LAYOUT_DIRECTION_RTL) ?
@@ -13859,11 +13913,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
/**
* Return if the padding as been set thru relative values
- * {@link #setPaddingRelative(int, int, int, int)} or thru
- * @attr ref android.R.styleable#View_paddingStart or
- * @attr ref android.R.styleable#View_paddingEnd
+ * {@link #setPaddingRelative(int, int, int, int)}
*
* @return true if the padding is relative or false if it is not.
+ * @hide
*/
public boolean isPaddingRelative() {
return mUserPaddingRelative;
@@ -15183,6 +15236,18 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
}
}
+ /** @hide */
+ public void setDisabledSystemUiVisibility(int flags) {
+ if (mAttachInfo != null) {
+ if (mAttachInfo.mDisabledSystemUiVisibility != flags) {
+ mAttachInfo.mDisabledSystemUiVisibility = flags;
+ if (mParent != null) {
+ mParent.recomputeViewAttributes(this);
+ }
+ }
+ }
+ }
+
/**
* Creates an image that the system displays during the drag and drop
* operation. This is called a &quot;drag shadow&quot;. The default implementation
@@ -15707,6 +15772,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* {@link #TEXT_DIRECTION_LTR},
* {@link #TEXT_DIRECTION_RTL},
* {@link #TEXT_DIRECTION_LOCALE}
+ * @hide
*/
@ViewDebug.ExportedProperty(category = "text", mapping = {
@ViewDebug.IntToString(from = TEXT_DIRECTION_INHERIT, to = "INHERIT"),
@@ -15731,6 +15797,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* {@link #TEXT_DIRECTION_LTR},
* {@link #TEXT_DIRECTION_RTL},
* {@link #TEXT_DIRECTION_LOCALE}
+ * @hide
*/
public void setTextDirection(int textDirection) {
if (getTextDirection() != textDirection) {
@@ -15760,6 +15827,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* {@link #TEXT_DIRECTION_LTR},
* {@link #TEXT_DIRECTION_RTL},
* {@link #TEXT_DIRECTION_LOCALE}
+ * @hide
*/
public int getResolvedTextDirection() {
// The text direction will be resolved only if needed
@@ -15772,6 +15840,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
/**
* Resolve the text direction. Will call {@link View#onResolvedTextDirectionChanged} when
* resolution is done.
+ * @hide
*/
public void resolveTextDirection() {
// Reset any previous text direction resolution
@@ -15832,6 +15901,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* resolution should override this method.
*
* The default implementation does nothing.
+ * @hide
*/
public void onResolvedTextDirectionChanged() {
}
@@ -15840,6 +15910,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Check if text direction resolution can be done.
*
* @return true if text direction resolution can be done otherwise return false.
+ * @hide
*/
public boolean canResolveTextDirection() {
switch (getTextDirection()) {
@@ -15854,6 +15925,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Reset resolved text direction. Text direction can be resolved with a call to
* getResolvedTextDirection(). Will call {@link View#onResolvedTextDirectionReset} when
* reset is done.
+ * @hide
*/
public void resetResolvedTextDirection() {
mPrivateFlags2 &= ~(TEXT_DIRECTION_RESOLVED | TEXT_DIRECTION_RESOLVED_MASK);
@@ -15864,6 +15936,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Called when text direction is reset. Subclasses that care about text direction reset should
* override this method and do a reset of the text direction of their children. The default
* implementation does nothing.
+ * @hide
*/
public void onResolvedTextDirectionReset() {
}
@@ -15881,6 +15954,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* {@link #TEXT_ALIGNMENT_TEXT_END},
* {@link #TEXT_ALIGNMENT_VIEW_START},
* {@link #TEXT_ALIGNMENT_VIEW_END}
+ * @hide
*/
@ViewDebug.ExportedProperty(category = "text", mapping = {
@ViewDebug.IntToString(from = TEXT_ALIGNMENT_INHERIT, to = "INHERIT"),
@@ -15909,6 +15983,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* {@link #TEXT_ALIGNMENT_VIEW_END}
*
* @attr ref android.R.styleable#View_textAlignment
+ * @hide
*/
public void setTextAlignment(int textAlignment) {
if (textAlignment != getTextAlignment()) {
@@ -15938,6 +16013,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* {@link #TEXT_ALIGNMENT_TEXT_END},
* {@link #TEXT_ALIGNMENT_VIEW_START},
* {@link #TEXT_ALIGNMENT_VIEW_END}
+ * @hide
*/
@ViewDebug.ExportedProperty(category = "text", mapping = {
@ViewDebug.IntToString(from = TEXT_ALIGNMENT_INHERIT, to = "INHERIT"),
@@ -15959,6 +16035,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
/**
* Resolve the text alignment. Will call {@link View#onResolvedTextAlignmentChanged} when
* resolution is done.
+ * @hide
*/
public void resolveTextAlignment() {
// Reset any previous text alignment resolution
@@ -16023,6 +16100,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Check if text alignment resolution can be done.
*
* @return true if text alignment resolution can be done otherwise return false.
+ * @hide
*/
public boolean canResolveTextAlignment() {
switch (getTextAlignment()) {
@@ -16038,6 +16116,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* resolution should override this method.
*
* The default implementation does nothing.
+ * @hide
*/
public void onResolvedTextAlignmentChanged() {
}
@@ -16046,6 +16125,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Reset resolved text alignment. Text alignment can be resolved with a call to
* getResolvedTextAlignment(). Will call {@link View#onResolvedTextAlignmentReset} when
* reset is done.
+ * @hide
*/
public void resetResolvedTextAlignment() {
// Reset any previous text alignment resolution
@@ -16057,6 +16137,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Called when text alignment is reset. Subclasses that care about text alignment reset should
* override this method and do a reset of the text alignment of their children. The default
* implementation does nothing.
+ * @hide
*/
public void onResolvedTextAlignmentReset() {
}
@@ -16752,6 +16833,12 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
boolean mUse32BitDrawingCache;
/**
+ * Describes the parts of the window that are currently completely
+ * obscured by system UI elements.
+ */
+ final Rect mSystemInsets = new Rect();
+
+ /**
* For windows that are full-screen but using insets to layout inside
* of the screen decorations, these are the current insets for the
* content of the window.
@@ -16838,6 +16925,11 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
int mSystemUiVisibility;
/**
+ * Hack to force certain system UI visibility flags to be cleared.
+ */
+ int mDisabledSystemUiVisibility;
+
+ /**
* True if a view in this hierarchy has an OnSystemUiVisibilityChangeListener
* attached.
*/
@@ -16932,6 +17024,11 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
final boolean mDebugLayout = SystemProperties.getBoolean(DEBUG_LAYOUT_PROPERTY, false);
/**
+ * Point used to compute visible regions.
+ */
+ final Point mPoint = new Point();
+
+ /**
* Creates a new set of attachment information with the specified
* events handler and thread.
*
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 89ec51fbf7f9..a5ae248ee609 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -5229,6 +5229,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
}
+ /**
+ * @hide
+ */
@Override
public void onResolvedLayoutDirectionReset() {
// Take care of resetting the children resolution too
@@ -5241,6 +5244,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
}
+ /**
+ * @hide
+ */
@Override
public void onResolvedTextDirectionReset() {
// Take care of resetting the children resolution too
@@ -5253,6 +5259,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
}
+ /**
+ * @hide
+ */
@Override
public void onResolvedTextAlignmentReset() {
// Take care of resetting the children resolution too
@@ -5443,6 +5452,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
*
* {@link View#LAYOUT_DIRECTION_LTR}
* {@link View#LAYOUT_DIRECTION_RTL}
+ * @hide
*/
public void onResolveLayoutDirection(int layoutDirection) {
}
@@ -5534,6 +5544,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* The start margin in pixels of the child.
* Call {@link ViewGroup#setLayoutParams(LayoutParams)} after reassigning a new value
* to this field.
+ * @hide
*/
@ViewDebug.ExportedProperty(category = "layout")
public int startMargin = DEFAULT_RELATIVE;
@@ -5542,6 +5553,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* The end margin in pixels of the child.
* Call {@link ViewGroup#setLayoutParams(LayoutParams)} after reassigning a new value
* to this field.
+ * @hide
*/
@ViewDebug.ExportedProperty(category = "layout")
public int endMargin = DEFAULT_RELATIVE;
@@ -5660,7 +5672,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* @attr ref android.R.styleable#ViewGroup_MarginLayout_layout_marginTop
* @attr ref android.R.styleable#ViewGroup_MarginLayout_layout_marginEnd
* @attr ref android.R.styleable#ViewGroup_MarginLayout_layout_marginBottom
- *
* @hide
*/
public void setMarginsRelative(int start, int top, int end, int bottom) {
@@ -5676,6 +5687,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* @attr ref android.R.styleable#ViewGroup_MarginLayout_layout_marginStart
*
* @return the start margin in pixels.
+ * @hide
*/
public int getMarginStart() {
return startMargin;
@@ -5687,6 +5699,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* @attr ref android.R.styleable#ViewGroup_MarginLayout_layout_marginEnd
*
* @return the end margin in pixels.
+ * @hide
*/
public int getMarginEnd() {
return endMargin;
@@ -5699,6 +5712,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* @attr ref android.R.styleable#ViewGroup_MarginLayout_layout_marginEnd
*
* @return true if either marginStart or marginEnd has been set
+ * @hide
*/
public boolean isMarginRelative() {
return (startMargin != DEFAULT_RELATIVE) || (endMargin != DEFAULT_RELATIVE);
@@ -5707,6 +5721,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
/**
* This will be called by {@link android.view.View#requestLayout()}. Left and Right margins
* may be overridden depending on layout direction.
+ * @hide
*/
@Override
public void onResolveLayoutDirection(int layoutDirection) {
diff --git a/core/java/android/view/ViewPropertyAnimator.java b/core/java/android/view/ViewPropertyAnimator.java
index ec37acf41d4b..2012db2adb21 100644
--- a/core/java/android/view/ViewPropertyAnimator.java
+++ b/core/java/android/view/ViewPropertyAnimator.java
@@ -624,14 +624,20 @@ public class ViewPropertyAnimator {
/**
* The View associated with this ViewPropertyAnimator will have its
* {@link View#setLayerType(int, android.graphics.Paint) layer type} set to
- * {@link View#LAYER_TYPE_HARDWARE} for the duration of the next animation. This state
- * is not persistent, either on the View or on this ViewPropertyAnimator: the layer type
- * of the View will be restored when the animation ends to what it was when this method was
- * called, and this setting on ViewPropertyAnimator is only valid for the next animation.
- * Note that calling this method and then independently setting the layer type of the View
- * (by a direct call to {@link View#setLayerType(int, android.graphics.Paint)}) will result
- * in some inconsistency, including having the layer type restored to its pre-withLayer()
- * value when the animation ends.
+ * {@link View#LAYER_TYPE_HARDWARE} for the duration of the next animation.
+ * As stated in the documentation for {@link View#LAYER_TYPE_HARDWARE},
+ * the actual type of layer used internally depends on the runtime situation of the
+ * view. If the activity and this view are hardware-accelerated, then the layer will be
+ * accelerated as well. If the activity or the view is not accelerated, then the layer will
+ * effectively be the same as {@link View#LAYER_TYPE_SOFTWARE}.
+ *
+ * <p>This state is not persistent, either on the View or on this ViewPropertyAnimator: the
+ * layer type of the View will be restored when the animation ends to what it was when this
+ * method was called, and this setting on ViewPropertyAnimator is only valid for the next
+ * animation. Note that calling this method and then independently setting the layer type of
+ * the View (by a direct call to {@link View#setLayerType(int, android.graphics.Paint)}) will
+ * result in some inconsistency, including having the layer type restored to its pre-withLayer()
+ * value when the animation ends.</p>
*
* @see View#setLayerType(int, android.graphics.Paint)
* @return This object, allowing calls to methods in this class to be chained.
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index e1d821f1022d..ec6bd815309c 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -230,6 +230,7 @@ public final class ViewRootImpl implements ViewParent,
boolean mHasHadWindowFocus;
boolean mLastWasImTarget;
boolean mWindowsAnimating;
+ boolean mIsDrawing;
int mLastSystemUiVisibility;
// Pool of queued input events.
@@ -262,6 +263,7 @@ public final class ViewRootImpl implements ViewParent,
final Rect mPendingVisibleInsets = new Rect();
final Rect mPendingContentInsets = new Rect();
final Rect mPendingSystemInsets = new Rect();
+ final Rect mActiveRect = new Rect();
final ViewTreeObserver.InternalInsetsInfo mLastGivenInsets
= new ViewTreeObserver.InternalInsetsInfo();
@@ -271,7 +273,8 @@ public final class ViewRootImpl implements ViewParent,
final Configuration mPendingConfiguration = new Configuration();
class ResizedInfo {
- Rect coveredInsets;
+ Rect systemInsets;
+ Rect contentInsets;
Rect visibleInsets;
Configuration newConfig;
}
@@ -567,6 +570,7 @@ public final class ViewRootImpl implements ViewParent,
if (mTranslator != null) {
mTranslator.translateRectInScreenToAppWindow(mAttachInfo.mContentInsets);
}
+ mPendingSystemInsets.set(0, 0, 0, 0);
mPendingContentInsets.set(mAttachInfo.mContentInsets);
mPendingVisibleInsets.set(0, 0, 0, 0);
if (DEBUG_LAYOUT) Log.v(TAG, "Added window " + mWindow);
@@ -763,6 +767,9 @@ public final class ViewRootImpl implements ViewParent,
// preserve compatible window flag if exists.
int compatibleWindowFlag =
mWindowAttributes.flags & WindowManager.LayoutParams.FLAG_COMPATIBLE_WINDOW;
+ // transfer over system UI visibility values as they carry current state.
+ attrs.systemUiVisibility = mWindowAttributes.systemUiVisibility;
+ attrs.subtreeSystemUiVisibility = mWindowAttributes.subtreeSystemUiVisibility;
mWindowAttributesChangesFlag = mWindowAttributes.copyFrom(attrs);
mWindowAttributes.flags |= compatibleWindowFlag;
@@ -1019,6 +1026,7 @@ public final class ViewRootImpl implements ViewParent,
attachInfo.mSystemUiVisibility = 0;
attachInfo.mHasSystemUiListeners = false;
mView.dispatchCollectViewAttributes(attachInfo, 0);
+ attachInfo.mSystemUiVisibility &= ~attachInfo.mDisabledSystemUiVisibility;
if (attachInfo.mKeepScreenOn != oldScreenOn
|| attachInfo.mSystemUiVisibility != oldVis
|| attachInfo.mHasSystemUiListeners != oldHasSystemUiListeners) {
@@ -1219,6 +1227,7 @@ public final class ViewRootImpl implements ViewParent,
getRunQueue().executeActions(attachInfo.mHandler);
boolean insetsChanged = false;
+ boolean activeRectChanged = false;
boolean layoutRequested = mLayoutRequested && !mStopped;
if (layoutRequested) {
@@ -1230,7 +1239,12 @@ public final class ViewRootImpl implements ViewParent,
// to opposite of the added touch mode.
mAttachInfo.mInTouchMode = !mAddedTouchMode;
ensureTouchModeLocally(mAddedTouchMode);
+ activeRectChanged = true;
} else {
+ if (!mPendingSystemInsets.equals(mAttachInfo.mSystemInsets)) {
+ mAttachInfo.mSystemInsets.set(mPendingSystemInsets);
+ activeRectChanged = true;
+ }
if (!mPendingContentInsets.equals(mAttachInfo.mContentInsets)) {
insetsChanged = true;
}
@@ -1383,7 +1397,11 @@ public final class ViewRootImpl implements ViewParent,
updateConfiguration(mPendingConfiguration, !mFirst);
mPendingConfiguration.seq = 0;
}
-
+
+ if (!mPendingSystemInsets.equals(mAttachInfo.mSystemInsets)) {
+ activeRectChanged = true;
+ mAttachInfo.mSystemInsets.set(mPendingSystemInsets);
+ }
contentInsetsChanged = !mPendingContentInsets.equals(
mAttachInfo.mContentInsets);
visibleInsetsChanged = !mPendingVisibleInsets.equals(
@@ -1486,6 +1504,7 @@ public final class ViewRootImpl implements ViewParent,
// before actually drawing them, so it can display then
// all at once.
newSurface = true;
+ activeRectChanged = true;
mFullRedrawNeeded = true;
mPreviousTransparentRegion.setEmpty();
@@ -1550,8 +1569,11 @@ public final class ViewRootImpl implements ViewParent,
// !!FIXME!! This next section handles the case where we did not get the
// window size we asked for. We should avoid this by getting a maximum size from
// the window session beforehand.
- mWidth = frame.width();
- mHeight = frame.height();
+ if (mWidth != frame.width() || mHeight != frame.height()) {
+ activeRectChanged = true;
+ mWidth = frame.width();
+ mHeight = frame.height();
+ }
if (mSurfaceHolder != null) {
// The app owns the surface; tell it about what is going on.
@@ -1667,6 +1689,14 @@ public final class ViewRootImpl implements ViewParent,
}
}
+ if (activeRectChanged && mSurface.isValid()) {
+ mActiveRect.set(attachInfo.mSystemInsets.left, attachInfo.mSystemInsets.top,
+ mWidth - attachInfo.mSystemInsets.right,
+ mHeight - attachInfo.mSystemInsets.bottom);
+ //Log.i(TAG, "Active rect " + mWindowAttributes.getTitle() + ": " + mActiveRect);
+ mSurface.setActiveRect(mActiveRect);
+ }
+
final boolean didLayout = layoutRequested && !mStopped;
boolean triggerGlobalLayoutListener = didLayout
|| attachInfo.mRecomputeGlobalAttributes;
@@ -2009,10 +2039,12 @@ public final class ViewRootImpl implements ViewParent,
final boolean fullRedrawNeeded = mFullRedrawNeeded;
mFullRedrawNeeded = false;
+ mIsDrawing = true;
Trace.traceBegin(Trace.TRACE_TAG_VIEW, "draw");
try {
draw(fullRedrawNeeded);
} finally {
+ mIsDrawing = false;
Trace.traceEnd(Trace.TRACE_TAG_VIEW);
}
@@ -2781,7 +2813,8 @@ public final class ViewRootImpl implements ViewParent,
ResizedInfo ri = (ResizedInfo)msg.obj;
if (mWinFrame.width() == msg.arg1 && mWinFrame.height() == msg.arg2
- && mPendingContentInsets.equals(ri.coveredInsets)
+ && mPendingSystemInsets.equals(ri.systemInsets)
+ && mPendingContentInsets.equals(ri.contentInsets)
&& mPendingVisibleInsets.equals(ri.visibleInsets)
&& ((ResizedInfo)msg.obj).newConfig == null) {
break;
@@ -2797,7 +2830,8 @@ public final class ViewRootImpl implements ViewParent,
mWinFrame.right = msg.arg1;
mWinFrame.top = 0;
mWinFrame.bottom = msg.arg2;
- mPendingContentInsets.set(((ResizedInfo)msg.obj).coveredInsets);
+ mPendingSystemInsets.set(((ResizedInfo)msg.obj).systemInsets);
+ mPendingContentInsets.set(((ResizedInfo)msg.obj).contentInsets);
mPendingVisibleInsets.set(((ResizedInfo)msg.obj).visibleInsets);
if (msg.what == MSG_RESIZED_REPORT) {
mReportNextDraw = true;
@@ -3932,7 +3966,12 @@ public final class ViewRootImpl implements ViewParent,
if (immediate) {
doDie();
} else {
- destroyHardwareRenderer();
+ if (!mIsDrawing) {
+ destroyHardwareRenderer();
+ } else {
+ Log.e(TAG, "Attempting to destroy the window while drawing!\n" +
+ " window=" + this + ", title=" + mWindowAttributes.getTitle());
+ }
mHandler.sendEmptyMessage(MSG_DIE);
}
}
@@ -4006,15 +4045,16 @@ public final class ViewRootImpl implements ViewParent,
mHandler.sendMessage(msg);
}
- public void dispatchResized(int w, int h, Rect coveredInsets,
+ public void dispatchResized(int w, int h, Rect systemInsets, Rect contentInsets,
Rect visibleInsets, boolean reportDraw, Configuration newConfig) {
if (DEBUG_LAYOUT) Log.v(TAG, "Resizing " + this + ": w=" + w
- + " h=" + h + " coveredInsets=" + coveredInsets.toShortString()
+ + " h=" + h + " systemInsets=" + systemInsets.toShortString()
+ + " contentInsets=" + contentInsets.toShortString()
+ " visibleInsets=" + visibleInsets.toShortString()
+ " reportDraw=" + reportDraw);
Message msg = mHandler.obtainMessage(reportDraw ? MSG_RESIZED_REPORT :MSG_RESIZED);
if (mTranslator != null) {
- mTranslator.translateRectInScreenToAppWindow(coveredInsets);
+ mTranslator.translateRectInScreenToAppWindow(contentInsets);
mTranslator.translateRectInScreenToAppWindow(visibleInsets);
w *= mTranslator.applicationInvertedScale;
h *= mTranslator.applicationInvertedScale;
@@ -4022,7 +4062,8 @@ public final class ViewRootImpl implements ViewParent,
msg.arg1 = w;
msg.arg2 = h;
ResizedInfo ri = new ResizedInfo();
- ri.coveredInsets = new Rect(coveredInsets);
+ ri.systemInsets = new Rect(systemInsets);
+ ri.contentInsets = new Rect(contentInsets);
ri.visibleInsets = new Rect(visibleInsets);
ri.newConfig = newConfig;
msg.obj = ri;
@@ -4673,8 +4714,8 @@ public final class ViewRootImpl implements ViewParent,
Rect visibleInsets, boolean reportDraw, Configuration newConfig) {
final ViewRootImpl viewAncestor = mViewAncestor.get();
if (viewAncestor != null) {
- viewAncestor.dispatchResized(w, h, contentInsets, visibleInsets, reportDraw,
- newConfig);
+ viewAncestor.dispatchResized(w, h, systemInsets, contentInsets,
+ visibleInsets, reportDraw, newConfig);
}
}
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java
index 6d1166e56d95..f70ffa95493a 100644
--- a/core/java/android/view/accessibility/AccessibilityEvent.java
+++ b/core/java/android/view/accessibility/AccessibilityEvent.java
@@ -226,9 +226,9 @@ import java.util.List;
* <li>{@link #getContentDescription()} - The content description of the source.</li>
* </ul>
* </p>
- * <b>View text traversed at granularity</b> - represents the event of traversing the
+ * <b>View text traversed at movement granularity</b> - represents the event of traversing the
* text of a view at a given granularity. For example, moving to the next word.</br>
- * <em>Type:</em> {@link #TYPE_VIEW_TEXT_TRAVERSED_AT_GRANULARITY} </br>
+ * <em>Type:</em> {@link #TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY} </br>
* <em>Properties:</em></br>
* <ul>
* <li>{@link #getEventType()} - The type of the event.</li>
@@ -236,11 +236,12 @@ import java.util.List;
* <li>{@link #getClassName()} - The class name of the source.</li>
* <li>{@link #getPackageName()} - The package name of the source.</li>
* <li>{@link #getEventTime()} - The event time.</li>
- * <li>{@link #getText()} - The text of the current text at the granularity.</li>
+ * <li>{@link #getText()} - The text of the current text at the movement granularity.</li>
* <li>{@link #isPassword()} - Whether the source is password.</li>
* <li>{@link #isEnabled()} - Whether the source is enabled.</li>
* <li>{@link #getContentDescription()} - The content description of the source.</li>
- * <li>{@link #getGranularity()} - Sets the granularity at which a view's text was traversed.</li>
+ * <li>{@link #getMovementGranularity()} - Sets the granularity at which a view's text
+ * was traversed.</li>
* </ul>
* </p>
* <p>
@@ -597,9 +598,9 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 0x00010000;
/**
- * Represents the event of traversing the text of a view at a given granularity.
+ * Represents the event of traversing the text of a view at a given movement granularity.
*/
- public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_GRANULARITY = 0x00020000;
+ public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 0x00020000;
/**
* Mask for {@link AccessibilityEvent} all types.
@@ -619,7 +620,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
* @see #TYPE_VIEW_SCROLLED
* @see #TYPE_VIEW_TEXT_SELECTION_CHANGED
* @see #TYPE_ANNOUNCEMENT
- * @see #TYPE_VIEW_TEXT_TRAVERSED_AT_GRANULARITY
+ * @see #TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY
*/
public static final int TYPES_ALL_MASK = 0xFFFFFFFF;
@@ -633,7 +634,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
private int mEventType;
private CharSequence mPackageName;
private long mEventTime;
- int mGranularity;
+ int mMovementGranularity;
private final ArrayList<AccessibilityRecord> mRecords = new ArrayList<AccessibilityRecord>();
@@ -651,7 +652,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
void init(AccessibilityEvent event) {
super.init(event);
mEventType = event.mEventType;
- mGranularity = event.mGranularity;
+ mMovementGranularity = event.mMovementGranularity;
mEventTime = event.mEventTime;
mPackageName = event.mPackageName;
}
@@ -769,24 +770,24 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
}
/**
- * Sets the text granularity that was traversed.
+ * Sets the movement granularity that was traversed.
*
* @param granularity The granularity.
*
* @throws IllegalStateException If called from an AccessibilityService.
*/
- public void setGranularity(int granularity) {
+ public void setMovementGranularity(int granularity) {
enforceNotSealed();
- mGranularity = granularity;
+ mMovementGranularity = granularity;
}
/**
- * Gets the text granularity that was traversed.
+ * Gets the movement granularity that was traversed.
*
* @return The granularity.
*/
- public int getGranularity() {
- return mGranularity;
+ public int getMovementGranularity() {
+ return mMovementGranularity;
}
/**
@@ -877,7 +878,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
protected void clear() {
super.clear();
mEventType = 0;
- mGranularity = 0;
+ mMovementGranularity = 0;
mPackageName = null;
mEventTime = 0;
while (!mRecords.isEmpty()) {
@@ -894,7 +895,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
public void initFromParcel(Parcel parcel) {
mSealed = (parcel.readInt() == 1);
mEventType = parcel.readInt();
- mGranularity = parcel.readInt();
+ mMovementGranularity = parcel.readInt();
mPackageName = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel);
mEventTime = parcel.readLong();
mConnectionId = parcel.readInt();
@@ -945,7 +946,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(isSealed() ? 1 : 0);
parcel.writeInt(mEventType);
- parcel.writeInt(mGranularity);
+ parcel.writeInt(mMovementGranularity);
TextUtils.writeToParcel(mPackageName, parcel, 0);
parcel.writeLong(mEventTime);
parcel.writeInt(mConnectionId);
@@ -1002,7 +1003,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
builder.append("EventType: ").append(eventTypeToString(mEventType));
builder.append("; EventTime: ").append(mEventTime);
builder.append("; PackageName: ").append(mPackageName);
- builder.append("; Granularity: ").append(mGranularity);
+ builder.append("; MovementGranularity: ").append(mMovementGranularity);
builder.append(super.toString());
if (DEBUG) {
builder.append("\n");
@@ -1083,8 +1084,8 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
return "TYPE_VIEW_ACCESSIBILITY_FOCUSED";
case TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED:
return "TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED";
- case TYPE_VIEW_TEXT_TRAVERSED_AT_GRANULARITY:
- return "TYPE_CURRENT_AT_GRANULARITY_CHANGED";
+ case TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY:
+ return "TYPE_CURRENT_AT_GRANULARITY_MOVEMENT_CHANGED";
default:
return null;
}
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index 5266c8358ae9..c0696a91115d 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -123,53 +123,56 @@ public class AccessibilityNodeInfo implements Parcelable {
/**
* Action that requests to go to the next entity in this node's text
- * at a given granularity. For example, move to the next character, word, etc.
+ * at a given movement granularity. For example, move to the next character,
+ * word, etc.
* <p>
- * <strong>Arguments:</strong> {@link #ACTION_ARGUMENT_GRANULARITY_INT}<br>
+ * <strong>Arguments:</strong> {@link #ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT}<br>
* <strong>Example:</strong>
* <code><pre><p>
* Bundle arguments = new Bundle();
- * arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_GRANULARITY_INT,
- * AccessibilityNodeInfo.GRANULARITY_CHARACTER);
- * info.performAction(AccessibilityNodeInfo.ACTION_NEXT_AT_GRANULARITY, arguments);
+ * arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT,
+ * AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER);
+ * info.performAction(AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY, arguments);
* </code></pre></p>
* </p>
*
- * @see #setGranularities(int)
- * @see #getGranularities()
+ * @see #setMovementGranularities(int)
+ * @see #getMovementGranularities()
*
- * @see #GRANULARITY_CHARACTER
- * @see #GRANULARITY_WORD
- * @see #GRANULARITY_LINE
- * @see #GRANULARITY_PARAGRAPH
- * @see #GRANULARITY_PAGE
+ * @see #MOVEMENT_GRANULARITY_CHARACTER
+ * @see #MOVEMENT_GRANULARITY_WORD
+ * @see #MOVEMENT_GRANULARITY_LINE
+ * @see #MOVEMENT_GRANULARITY_PARAGRAPH
+ * @see #MOVEMENT_GRANULARITY_PAGE
*/
- public static final int ACTION_NEXT_AT_GRANULARITY = 0x00000100;
+ public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 0x00000100;
/**
* Action that requests to go to the previous entity in this node's text
- * at a given granularity. For example, move to the next character, word, etc.
+ * at a given movement granularity. For example, move to the next character,
+ * word, etc.
* <p>
- * <strong>Arguments:</strong> {@link #ACTION_ARGUMENT_GRANULARITY_INT}<br>
+ * <strong>Arguments:</strong> {@link #ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT}<br>
* <strong>Example:</strong>
* <code><pre><p>
* Bundle arguments = new Bundle();
- * arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_GRANULARITY_INT,
- * AccessibilityNodeInfo.GRANULARITY_CHARACTER);
- * info.performAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_GRANULARITY, arguments);
+ * arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT,
+ * AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER);
+ * info.performAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY,
+ * arguments);
* </code></pre></p>
* </p>
*
- * @see #setGranularities(int)
- * @see #getGranularities()
+ * @see #setMovementGranularities(int)
+ * @see #getMovementGranularities()
*
- * @see #GRANULARITY_CHARACTER
- * @see #GRANULARITY_WORD
- * @see #GRANULARITY_LINE
- * @see #GRANULARITY_PARAGRAPH
- * @see #GRANULARITY_PAGE
+ * @see #MOVEMENT_GRANULARITY_CHARACTER
+ * @see #MOVEMENT_GRANULARITY_WORD
+ * @see #MOVEMENT_GRANULARITY_LINE
+ * @see #MOVEMENT_GRANULARITY_PARAGRAPH
+ * @see #MOVEMENT_GRANULARITY_PAGE
*/
- public static final int ACTION_PREVIOUS_AT_GRANULARITY = 0x00000200;
+ public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 0x00000200;
/**
* Action to move to the next HTML element of a given type. For example, move
@@ -202,14 +205,15 @@ public class AccessibilityNodeInfo implements Parcelable {
public static final int ACTION_PREVIOUS_HTML_ELEMENT = 0x00000800;
/**
- * Argument for which text granularity to be used when traversing the node text.
+ * Argument for which movement granularity to be used when traversing the node text.
* <p>
* <strong>Type:</strong> int<br>
- * <strong>Actions:</strong> {@link #ACTION_NEXT_AT_GRANULARITY},
- * {@link #ACTION_PREVIOUS_AT_GRANULARITY}
+ * <strong>Actions:</strong> {@link #ACTION_NEXT_AT_MOVEMENT_GRANULARITY},
+ * {@link #ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY}
* </p>
*/
- public static final String ACTION_ARGUMENT_GRANULARITY_INT = "ACTION_ARGUMENT_GRANULARITY_INT";
+ public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT =
+ "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
/**
* Argument for which HTML element to get moving to the next/previous HTML element.
@@ -232,32 +236,32 @@ public class AccessibilityNodeInfo implements Parcelable {
*/
public static final int FOCUS_ACCESSIBILITY = 2;
- // Granularities
+ // Movement granularities
/**
- * Granularity bit for traversing the text of a node by character.
+ * Movement granularity bit for traversing the text of a node by character.
*/
- public static final int GRANULARITY_CHARACTER = 0x00000001;
+ public static final int MOVEMENT_GRANULARITY_CHARACTER = 0x00000001;
/**
- * Granularity bit for traversing the text of a node by word.
+ * Movement granularity bit for traversing the text of a node by word.
*/
- public static final int GRANULARITY_WORD = 0x00000002;
+ public static final int MOVEMENT_GRANULARITY_WORD = 0x00000002;
/**
- * Granularity bit for traversing the text of a node by line.
+ * Movement granularity bit for traversing the text of a node by line.
*/
- public static final int GRANULARITY_LINE = 0x00000004;
+ public static final int MOVEMENT_GRANULARITY_LINE = 0x00000004;
/**
- * Granularity bit for traversing the text of a node by paragraph.
+ * Movement granularity bit for traversing the text of a node by paragraph.
*/
- public static final int GRANULARITY_PARAGRAPH = 0x00000008;
+ public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 0x00000008;
/**
- * Granularity bit for traversing the text of a node by page.
+ * Movement granularity bit for traversing the text of a node by page.
*/
- public static final int GRANULARITY_PAGE = 0x00000010;
+ public static final int MOVEMENT_GRANULARITY_PAGE = 0x00000010;
// Boolean attributes.
@@ -362,7 +366,7 @@ public class AccessibilityNodeInfo implements Parcelable {
private final SparseLongArray mChildNodeIds = new SparseLongArray();
private int mActions;
- private int mGranularities;
+ private int mMovementGranularities;
private int mConnectionId = UNDEFINED;
@@ -586,7 +590,7 @@ public class AccessibilityNodeInfo implements Parcelable {
}
/**
- * Sets the text granularities for traversing the text of this node.
+ * Sets the movement granularities for traversing the text of this node.
* <p>
* <strong>Note:</strong> Cannot be called from an
* {@link android.accessibilityservice.AccessibilityService}.
@@ -597,18 +601,18 @@ public class AccessibilityNodeInfo implements Parcelable {
*
* @throws IllegalStateException If called from an AccessibilityService.
*/
- public void setGranularities(int granularities) {
+ public void setMovementGranularities(int granularities) {
enforceNotSealed();
- mGranularities = granularities;
+ mMovementGranularities = granularities;
}
/**
- * Gets the granularities for traversing the text of this node.
+ * Gets the movement granularities for traversing the text of this node.
*
* @return The bit mask with granularities.
*/
- public int getGranularities() {
- return mGranularities;
+ public int getMovementGranularities() {
+ return mMovementGranularities;
}
/**
@@ -1412,7 +1416,7 @@ public class AccessibilityNodeInfo implements Parcelable {
parcel.writeInt(mActions);
- parcel.writeInt(mGranularities);
+ parcel.writeInt(mMovementGranularities);
parcel.writeInt(mBooleanProperties);
@@ -1446,7 +1450,7 @@ public class AccessibilityNodeInfo implements Parcelable {
mContentDescription = other.mContentDescription;
mActions= other.mActions;
mBooleanProperties = other.mBooleanProperties;
- mGranularities = other.mGranularities;
+ mMovementGranularities = other.mMovementGranularities;
final int otherChildIdCount = other.mChildNodeIds.size();
for (int i = 0; i < otherChildIdCount; i++) {
mChildNodeIds.put(i, other.mChildNodeIds.valueAt(i));
@@ -1484,7 +1488,7 @@ public class AccessibilityNodeInfo implements Parcelable {
mActions = parcel.readInt();
- mGranularities = parcel.readInt();
+ mMovementGranularities = parcel.readInt();
mBooleanProperties = parcel.readInt();
@@ -1503,7 +1507,7 @@ public class AccessibilityNodeInfo implements Parcelable {
mParentNodeId = ROOT_NODE_ID;
mWindowId = UNDEFINED;
mConnectionId = UNDEFINED;
- mGranularities = 0;
+ mMovementGranularities = 0;
mChildNodeIds.clear();
mBoundsInParent.set(0, 0, 0, 0);
mBoundsInScreen.set(0, 0, 0, 0);
@@ -1539,10 +1543,10 @@ public class AccessibilityNodeInfo implements Parcelable {
return "ACTION_ACCESSIBILITY_FOCUS";
case ACTION_CLEAR_ACCESSIBILITY_FOCUS:
return "ACTION_CLEAR_ACCESSIBILITY_FOCUS";
- case ACTION_NEXT_AT_GRANULARITY:
- return "ACTION_NEXT_AT_GRANULARITY";
- case ACTION_PREVIOUS_AT_GRANULARITY:
- return "ACTION_PREVIOUS_AT_GRANULARITY";
+ case ACTION_NEXT_AT_MOVEMENT_GRANULARITY:
+ return "ACTION_NEXT_AT_MOVEMENT_GRANULARITY";
+ case ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY:
+ return "ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY";
case ACTION_NEXT_HTML_ELEMENT:
return "ACTION_NEXT_HTML_ELEMENT";
case ACTION_PREVIOUS_HTML_ELEMENT:
@@ -1553,25 +1557,25 @@ public class AccessibilityNodeInfo implements Parcelable {
}
/**
- * Gets the human readable granularity symbolic name.
+ * Gets the human readable movement granularity symbolic name.
*
- * @param granularity The action.
+ * @param granularity The granularity.
* @return The symbolic name.
*/
- private static String getGranularitySymbolicName(int granularity) {
+ private static String getMovementGranularitySymbolicName(int granularity) {
switch (granularity) {
- case GRANULARITY_CHARACTER:
- return "GRANULARITY_CHARACTER";
- case GRANULARITY_WORD:
- return "GRANULARITY_WORD";
- case GRANULARITY_LINE:
- return "GRANULARITY_LINE";
- case GRANULARITY_PARAGRAPH:
- return "GRANULARITY_PARAGRAPH";
- case GRANULARITY_PAGE:
- return "GRANULARITY_PAGE";
+ case MOVEMENT_GRANULARITY_CHARACTER:
+ return "MOVEMENT_GRANULARITY_CHARACTER";
+ case MOVEMENT_GRANULARITY_WORD:
+ return "MOVEMENT_GRANULARITY_WORD";
+ case MOVEMENT_GRANULARITY_LINE:
+ return "MOVEMENT_GRANULARITY_LINE";
+ case MOVEMENT_GRANULARITY_PARAGRAPH:
+ return "MOVEMENT_GRANULARITY_PARAGRAPH";
+ case MOVEMENT_GRANULARITY_PAGE:
+ return "MOVEMENT_GRANULARITY_PAGE";
default:
- throw new IllegalArgumentException("Unknown granularity: " + granularity);
+ throw new IllegalArgumentException("Unknown movement granularity: " + granularity);
}
}
@@ -1622,12 +1626,12 @@ public class AccessibilityNodeInfo implements Parcelable {
builder.append("; virtualDescendantId: " + getVirtualDescendantId(mSourceNodeId));
builder.append("; mParentNodeId: " + mParentNodeId);
- int granularities = mGranularities;
- builder.append("; granularities: [");
+ int granularities = mMovementGranularities;
+ builder.append("; MovementGranularities: [");
while (granularities != 0) {
final int granularity = 1 << Integer.numberOfTrailingZeros(granularities);
granularities &= ~granularity;
- builder.append(getGranularitySymbolicName(granularity));
+ builder.append(getMovementGranularitySymbolicName(granularity));
if (granularities != 0) {
builder.append(", ");
}
diff --git a/core/java/android/webkit/AutoCompletePopup.java b/core/java/android/webkit/AutoCompletePopup.java
index 21d5e0248445..87e878b40624 100644
--- a/core/java/android/webkit/AutoCompletePopup.java
+++ b/core/java/android/webkit/AutoCompletePopup.java
@@ -28,12 +28,15 @@ import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ListAdapter;
import android.widget.ListPopupWindow;
+import android.widget.PopupWindow.OnDismissListener;
-class AutoCompletePopup implements OnItemClickListener, Filter.FilterListener {
+class AutoCompletePopup implements OnItemClickListener, Filter.FilterListener,
+ OnDismissListener{
private static class AnchorView extends View {
AnchorView(Context context) {
super(context);
setFocusable(false);
+ setVisibility(INVISIBLE);
}
}
private static final int AUTOFILL_FORM = 100;
@@ -48,17 +51,10 @@ class AutoCompletePopup implements OnItemClickListener, Filter.FilterListener {
private WebViewClassic.WebViewInputConnection mInputConnection;
private WebViewClassic mWebView;
- public AutoCompletePopup(Context context,
- WebViewClassic webView,
+ public AutoCompletePopup(WebViewClassic webView,
WebViewClassic.WebViewInputConnection inputConnection) {
mInputConnection = inputConnection;
mWebView = webView;
- mPopup = new ListPopupWindow(context);
- mAnchor = new AnchorView(context);
- mWebView.getWebView().addView(mAnchor);
- mPopup.setOnItemClickListener(this);
- mPopup.setAnchorView(mAnchor);
- mPopup.setPromptPosition(ListPopupWindow.POSITION_PROMPT_BELOW);
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
@@ -72,6 +68,9 @@ class AutoCompletePopup implements OnItemClickListener, Filter.FilterListener {
}
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
+ if (mPopup == null) {
+ return false;
+ }
if (keyCode == KeyEvent.KEYCODE_BACK && mPopup.isShowing()) {
// special case for the back key, we do not even try to send it
// to the drop down list but instead, consume it immediately
@@ -112,11 +111,14 @@ class AutoCompletePopup implements OnItemClickListener, Filter.FilterListener {
public void clearAdapter() {
mAdapter = null;
mFilter = null;
- mPopup.dismiss();
- mPopup.setAdapter(null);
+ if (mPopup != null) {
+ mPopup.dismiss();
+ mPopup.setAdapter(null);
+ }
}
public <T extends ListAdapter & Filterable> void setAdapter(T adapter) {
+ ensurePopup();
mPopup.setAdapter(adapter);
mAdapter = adapter;
if (adapter != null) {
@@ -129,6 +131,7 @@ class AutoCompletePopup implements OnItemClickListener, Filter.FilterListener {
}
public void resetRect() {
+ ensurePopup();
int left = mWebView.contentToViewX(mWebView.mEditTextContentBounds.left);
int right = mWebView.contentToViewX(mWebView.mEditTextContentBounds.right);
int width = right - left;
@@ -164,6 +167,9 @@ class AutoCompletePopup implements OnItemClickListener, Filter.FilterListener {
// AdapterView.OnItemClickListener implementation
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ if (mPopup == null) {
+ return;
+ }
if (id == 0 && position == 0 && mInputConnection.getIsAutoFillable()) {
mText = "";
pushTextToInputConnection();
@@ -206,6 +212,7 @@ class AutoCompletePopup implements OnItemClickListener, Filter.FilterListener {
@Override
public void onFilterComplete(int count) {
+ ensurePopup();
boolean showDropDown = (count > 0) &&
(mInputConnection.getIsAutoFillable() || mText.length() > 0);
if (showDropDown) {
@@ -219,5 +226,23 @@ class AutoCompletePopup implements OnItemClickListener, Filter.FilterListener {
mPopup.dismiss();
}
}
+
+ @Override
+ public void onDismiss() {
+ mWebView.getWebView().removeView(mAnchor);
+ }
+
+ private void ensurePopup() {
+ if (mPopup == null) {
+ mPopup = new ListPopupWindow(mWebView.getContext());
+ mAnchor = new AnchorView(mWebView.getContext());
+ mWebView.getWebView().addView(mAnchor);
+ mPopup.setOnItemClickListener(this);
+ mPopup.setAnchorView(mAnchor);
+ mPopup.setPromptPosition(ListPopupWindow.POSITION_PROMPT_BELOW);
+ } else if (mWebView.getWebView().indexOfChild(mAnchor) < 0) {
+ mWebView.getWebView().addView(mAnchor);
+ }
+ }
}
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java
index 99a321219f4c..dcc99d849259 100644
--- a/core/java/android/webkit/WebViewClassic.java
+++ b/core/java/android/webkit/WebViewClassic.java
@@ -102,6 +102,7 @@ import android.webkit.WebView.PictureListener;
import android.webkit.WebViewCore.DrawData;
import android.webkit.WebViewCore.EventHub;
import android.webkit.WebViewCore.TextFieldInitData;
+import android.webkit.WebViewCore.TextSelectionData;
import android.webkit.WebViewCore.TouchHighlightData;
import android.webkit.WebViewCore.WebKitHitTest;
import android.widget.AbsoluteLayout;
@@ -152,7 +153,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
@Override
public void onGlobalLayout() {
if (mWebView.isShown()) {
- setGLRectViewport();
+ setInvScreenRect();
}
}
}
@@ -161,7 +162,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
@Override
public void onScrollChanged() {
if (mWebView.isShown()) {
- setGLRectViewport();
+ setInvScreenRect();
}
}
}
@@ -643,8 +644,8 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
private ZoomManager mZoomManager;
- private final Rect mGLRectViewport = new Rect();
- private final Rect mViewRectViewport = new Rect();
+ private final Rect mInvScreenRect = new Rect();
+ private final Rect mScreenRect = new Rect();
private final RectF mVisibleContentRect = new RectF();
private boolean mGLViewportEmpty = false;
WebViewInputConnection mInputConnection = null;
@@ -934,7 +935,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
private Paint mTouchCrossHairColor;
private int mTouchHighlightX;
private int mTouchHighlightY;
- private long mTouchHighlightRequested;
+ private boolean mShowTapHighlight;
// Basically this proxy is used to tell the Video to update layer tree at
// SetBaseLayer time and to pause when WebView paused.
@@ -1315,6 +1316,12 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
case WebViewInputDispatcher.EVENT_TYPE_TOUCH:
onHandleUiTouchEvent(event);
break;
+ case WebViewInputDispatcher.EVENT_TYPE_CLICK:
+ if (mFocusedNode != null && mFocusedNode.mIntentUrl != null) {
+ mWebView.playSoundEffect(SoundEffectConstants.CLICK);
+ overrideLoading(mFocusedNode.mIntentUrl);
+ }
+ break;
}
}
@@ -4211,17 +4218,17 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
// decide which adornments to draw
int extras = DRAW_EXTRAS_NONE;
- if (!mFindIsUp && mSelectingText) {
+ if (!mFindIsUp && mShowTextSelectionExtra) {
extras = DRAW_EXTRAS_SELECTION;
}
calcOurContentVisibleRectF(mVisibleContentRect);
if (canvas.isHardwareAccelerated()) {
- Rect glRectViewport = mGLViewportEmpty ? null : mGLRectViewport;
- Rect viewRectViewport = mGLViewportEmpty ? null : mViewRectViewport;
+ Rect invScreenRect = mGLViewportEmpty ? null : mInvScreenRect;
+ Rect screenRect = mGLViewportEmpty ? null : mScreenRect;
- int functor = nativeCreateDrawGLFunction(mNativeClass, glRectViewport,
- viewRectViewport, mVisibleContentRect, getScale(), extras);
+ int functor = nativeCreateDrawGLFunction(mNativeClass, invScreenRect,
+ screenRect, mVisibleContentRect, getScale(), extras);
((HardwareCanvas) canvas).callDrawGLFunction(functor);
if (mHardwareAccelSkia != getSettings().getHardwareAccelSkiaEnabled()) {
mHardwareAccelSkia = getSettings().getHardwareAccelSkiaEnabled();
@@ -4535,11 +4542,13 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
private void startSelectingText() {
mSelectingText = true;
+ mShowTextSelectionExtra = true;
mHandleAlphaAnimator.setIntValues(255);
mHandleAlphaAnimator.start();
}
private void endSelectingText() {
mSelectingText = false;
+ mShowTextSelectionExtra = false;
mHandleAlphaAnimator.setIntValues(0);
mHandleAlphaAnimator.start();
}
@@ -4687,8 +4696,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
if (mInputConnection == null) {
mInputConnection = new WebViewInputConnection();
- mAutoCompletePopup = new AutoCompletePopup(mContext, this,
- mInputConnection);
+ mAutoCompletePopup = new AutoCompletePopup(this, mInputConnection);
}
mInputConnection.setupEditorInfo(outAttrs);
return mInputConnection;
@@ -5312,9 +5320,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
mSelectCallback.finish();
mSelectCallback = null;
}
- if (!mIsCaretSelection) {
- updateWebkitSelection();
- }
invalidate(); // redraw without selection
mAutoScrollX = 0;
mAutoScrollY = 0;
@@ -5542,26 +5547,26 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
}
}
- void setGLRectViewport() {
+ void setInvScreenRect() {
// Use the getGlobalVisibleRect() to get the intersection among the parents
// visible == false means we're clipped - send a null rect down to indicate that
// we should not draw
- boolean visible = mWebView.getGlobalVisibleRect(mGLRectViewport);
+ boolean visible = mWebView.getGlobalVisibleRect(mInvScreenRect);
if (visible) {
// Then need to invert the Y axis, just for GL
View rootView = mWebView.getRootView();
int rootViewHeight = rootView.getHeight();
- mViewRectViewport.set(mGLRectViewport);
- int savedWebViewBottom = mGLRectViewport.bottom;
- mGLRectViewport.bottom = rootViewHeight - mGLRectViewport.top - getVisibleTitleHeightImpl();
- mGLRectViewport.top = rootViewHeight - savedWebViewBottom;
+ mScreenRect.set(mInvScreenRect);
+ int savedWebViewBottom = mInvScreenRect.bottom;
+ mInvScreenRect.bottom = rootViewHeight - mInvScreenRect.top - getVisibleTitleHeightImpl();
+ mInvScreenRect.top = rootViewHeight - savedWebViewBottom;
mGLViewportEmpty = false;
} else {
mGLViewportEmpty = true;
}
calcOurContentVisibleRectF(mVisibleContentRect);
- nativeUpdateDrawGLFunction(mNativeClass, mGLViewportEmpty ? null : mGLRectViewport,
- mGLViewportEmpty ? null : mViewRectViewport,
+ nativeUpdateDrawGLFunction(mNativeClass, mGLViewportEmpty ? null : mInvScreenRect,
+ mGLViewportEmpty ? null : mScreenRect,
mVisibleContentRect, getScale());
}
@@ -5577,7 +5582,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
// notify the WebKit about the new dimensions.
sendViewSizeZoom(false);
}
- setGLRectViewport();
+ setInvScreenRect();
return changed;
}
@@ -5821,8 +5826,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
}
data.mSlop = viewToContentDimension(mNavSlop);
removeTouchHighlight();
- if (!mBlockWebkitViewMessages) {
- mTouchHighlightRequested = SystemClock.uptimeMillis();
+ if (!mBlockWebkitViewMessages && mWebViewCore != null) {
mWebViewCore.sendMessageAtFrontOfQueue(
EventHub.HIT_TEST, data);
}
@@ -6442,6 +6446,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
private int mTrackballXMove = 0;
private int mTrackballYMove = 0;
private boolean mSelectingText = false;
+ private boolean mShowTextSelectionExtra = false;
private boolean mSelectionStarted = false;
private static final int TRACKBALL_KEY_TIMEOUT = 1000;
private static final int TRACKBALL_TIMEOUT = 200;
@@ -7592,6 +7597,8 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
case UPDATE_CONTENT_BOUNDS:
mEditTextContentBounds.set((Rect) msg.obj);
+ nativeMapLayerRect(mNativeClass, mEditTextLayerId,
+ mEditTextContentBounds);
break;
case SCROLL_EDIT_TEXT:
@@ -7618,6 +7625,34 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
public Context getContext() {
return WebViewClassic.this.getContext();
}
+
+ @Override
+ public boolean shouldInterceptTouchEvent(MotionEvent event) {
+ if (!mSelectingText) {
+ return false;
+ }
+ ensureSelectionHandles();
+ int y = Math.round(event.getY() - getTitleHeight() + getScrollY());
+ int x = Math.round(event.getX() + getScrollX());
+ boolean isPressingHandle;
+ if (mIsCaretSelection) {
+ isPressingHandle = mSelectHandleCenter.getBounds()
+ .contains(x, y);
+ } else {
+ isPressingHandle =
+ mSelectHandleLeft.getBounds().contains(x, y)
+ || mSelectHandleRight.getBounds().contains(x, y);
+ }
+ return isPressingHandle;
+ }
+
+ @Override
+ public void showTapHighlight(boolean show) {
+ if (mShowTapHighlight != show) {
+ mShowTapHighlight = show;
+ invalidate();
+ }
+ }
}
private void setHitTestTypeFromUrl(String url) {
@@ -7680,16 +7715,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
if (mFocusedNode.mHasFocus && mFocusedNode.mEditable) {
return false;
}
- long delay = SystemClock.uptimeMillis() - mTouchHighlightRequested;
- if (delay < ViewConfiguration.getTapTimeout()) {
- Rect r = mTouchHighlightRegion.getBounds();
- mWebView.postInvalidateDelayed(delay, r.left, r.top, r.right, r.bottom);
- return false;
- }
- if (mInputDispatcher == null) {
- return false;
- }
- return mInputDispatcher.shouldShowTapHighlight();
+ return mShowTapHighlight;
}
@@ -7942,6 +7968,13 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
}
nativeSetTextSelection(mNativeClass, data.mSelectTextPtr);
+ if (data.mSelectionReason == TextSelectionData.REASON_ACCESSIBILITY_INJECTOR) {
+ selectionDone();
+ mShowTextSelectionExtra = true;
+ invalidate();
+ return;
+ }
+
if (data.mSelectTextPtr != 0 &&
(data.mStart != data.mEnd ||
(mFieldPointer == nodePointer && mFieldPointer != 0))) {
@@ -8209,6 +8242,12 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
@Override
public void run() {
+ if (mWebViewCore == null
+ || getWebView().getWindowToken() == null
+ || getWebView().getViewRootImpl() == null) {
+ // We've been detached and/or destroyed since this was posted
+ return;
+ }
final ListView listView = (ListView) LayoutInflater.from(mContext)
.inflate(com.android.internal.R.layout.select_dialog, null);
final MyArrayListAdapter adapter = new MyArrayListAdapter();
@@ -8568,11 +8607,11 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
int color, int extra);
private native void nativeDumpDisplayTree(String urlOrNull);
private native boolean nativeEvaluateLayersAnimations(int nativeInstance);
- private native int nativeCreateDrawGLFunction(int nativeInstance, Rect rect,
- Rect viewRect, RectF visibleRect, float scale, int extras);
+ private native int nativeCreateDrawGLFunction(int nativeInstance, Rect invScreenRect,
+ Rect screenRect, RectF visibleContentRect, float scale, int extras);
private native int nativeGetDrawGLFunction(int nativeInstance);
- private native void nativeUpdateDrawGLFunction(int nativeInstance, Rect rect, Rect viewRect,
- RectF visibleRect, float scale);
+ private native void nativeUpdateDrawGLFunction(int nativeInstance, Rect invScreenRect,
+ Rect screenRect, RectF visibleContentRect, float scale);
private native String nativeGetSelection();
private native Rect nativeLayerBounds(int layer);
private native void nativeSetHeightCanMeasure(boolean measure);
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 7a757a81e4cf..661bbf8eff38 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -143,6 +143,7 @@ public final class WebViewCore {
private int mHighUsageDeltaMb;
private int mChromeCanFocusDirection;
+ private int mTextSelectionChangeReason = TextSelectionData.REASON_UNKNOWN;
// The thread name used to identify the WebCore thread and for use in
// debugging other classes that require operation within the WebCore thread.
@@ -861,6 +862,8 @@ public final class WebViewCore {
}
static class TextSelectionData {
+ static final int REASON_UNKNOWN = 0;
+ static final int REASON_ACCESSIBILITY_INJECTOR = 1;
public TextSelectionData(int start, int end, int selectTextPtr) {
mStart = start;
mEnd = end;
@@ -869,6 +872,7 @@ public final class WebViewCore {
int mStart;
int mEnd;
int mSelectTextPtr;
+ int mSelectionReason = TextSelectionData.REASON_UNKNOWN;
}
static class TouchUpData {
@@ -1544,12 +1548,16 @@ public final class WebViewCore {
break;
case MODIFY_SELECTION:
+ mTextSelectionChangeReason
+ = TextSelectionData.REASON_ACCESSIBILITY_INJECTOR;
String modifiedSelectionString =
nativeModifySelection(mNativeClass, msg.arg1,
msg.arg2);
mWebViewClassic.mPrivateHandler.obtainMessage(
WebViewClassic.SELECTION_STRING_CHANGED,
modifiedSelectionString).sendToTarget();
+ mTextSelectionChangeReason
+ = TextSelectionData.REASON_UNKNOWN;
break;
case LISTBOX_CHOICES:
@@ -2763,13 +2771,19 @@ public final class WebViewCore {
}
}
+ private TextSelectionData createTextSelection(int start, int end, int selPtr) {
+ TextSelectionData data = new TextSelectionData(start, end, selPtr);
+ data.mSelectionReason = mTextSelectionChangeReason;
+ return data;
+ }
+
// called by JNI
private void updateTextSelection(int pointer, int start, int end,
int textGeneration, int selectionPtr) {
if (mWebViewClassic != null) {
Message.obtain(mWebViewClassic.mPrivateHandler,
WebViewClassic.UPDATE_TEXT_SELECTION_MSG_ID, pointer, textGeneration,
- new TextSelectionData(start, end, selectionPtr)).sendToTarget();
+ createTextSelection(start, end, selectionPtr)).sendToTarget();
}
}
@@ -2803,7 +2817,7 @@ public final class WebViewCore {
Message.obtain(mWebViewClassic.mPrivateHandler,
WebViewClassic.UPDATE_TEXT_SELECTION_MSG_ID,
initData.mFieldPointer, 0,
- new TextSelectionData(start, end, selectionPtr))
+ createTextSelection(start, end, selectionPtr))
.sendToTarget();
}
diff --git a/core/java/android/webkit/WebViewInputDispatcher.java b/core/java/android/webkit/WebViewInputDispatcher.java
index b612a3b4fb54..95414359f372 100644
--- a/core/java/android/webkit/WebViewInputDispatcher.java
+++ b/core/java/android/webkit/WebViewInputDispatcher.java
@@ -22,7 +22,6 @@ import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
import android.util.Log;
-import android.view.InputDevice;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
@@ -100,6 +99,8 @@ final class WebViewInputDispatcher {
private boolean mPostDoNotSendTouchEventsToWebKitUntilNextGesture;
private boolean mPostLongPressScheduled;
private boolean mPostClickScheduled;
+ private boolean mPostShowTapHighlightScheduled;
+ private boolean mPostHideTapHighlightScheduled;
private int mPostLastWebKitXOffset;
private int mPostLastWebKitYOffset;
private float mPostLastWebKitScale;
@@ -134,6 +135,7 @@ final class WebViewInputDispatcher {
private static final int LONG_PRESS_TIMEOUT =
ViewConfiguration.getLongPressTimeout() + TAP_TIMEOUT;
private static final int DOUBLE_TAP_TIMEOUT = ViewConfiguration.getDoubleTapTimeout();
+ private static final int PRESSED_STATE_DURATION = ViewConfiguration.getPressedStateDuration();
/**
* Event type: Indicates a touch event type.
@@ -311,14 +313,17 @@ final class WebViewInputDispatcher {
}
unscheduleLongPressLocked();
unscheduleClickLocked();
+ hideTapCandidateLocked();
return false;
}
- if (mPostSendTouchEventsToWebKit
- && mPostDoNotSendTouchEventsToWebKitUntilNextGesture
- && action == MotionEvent.ACTION_DOWN) {
- // Recover from a previous web kit timeout.
- mPostDoNotSendTouchEventsToWebKitUntilNextGesture = false;
+ if (action == MotionEvent.ACTION_DOWN && mPostSendTouchEventsToWebKit) {
+ if (mUiCallbacks.shouldInterceptTouchEvent(eventToEnqueue)) {
+ mPostDoNotSendTouchEventsToWebKitUntilNextGesture = true;
+ } else if (mPostDoNotSendTouchEventsToWebKitUntilNextGesture) {
+ // Recover from a previous web kit timeout.
+ mPostDoNotSendTouchEventsToWebKitUntilNextGesture = false;
+ }
}
}
@@ -348,12 +353,6 @@ final class WebViewInputDispatcher {
}
}
- public boolean shouldShowTapHighlight() {
- synchronized (mLock) {
- return mPostLongPressScheduled || mPostClickScheduled;
- }
- }
-
private void postLongPress() {
synchronized (mLock) {
if (!mPostLongPressScheduled) {
@@ -384,6 +383,64 @@ final class WebViewInputDispatcher {
}
}
+ private void hideTapCandidateLocked() {
+ unscheduleHideTapHighlightLocked();
+ unscheduleShowTapHighlightLocked();
+ mUiCallbacks.showTapHighlight(false);
+ }
+
+ private void showTapCandidateLocked() {
+ unscheduleHideTapHighlightLocked();
+ unscheduleShowTapHighlightLocked();
+ mUiCallbacks.showTapHighlight(true);
+ scheduleHideTapHighlightLocked();
+ }
+
+ private void scheduleShowTapHighlightLocked() {
+ unscheduleShowTapHighlightLocked();
+ mPostShowTapHighlightScheduled = true;
+ mUiHandler.sendEmptyMessageDelayed(UiHandler.MSG_SHOW_TAP_HIGHLIGHT,
+ TAP_TIMEOUT);
+ }
+
+ private void unscheduleShowTapHighlightLocked() {
+ if (mPostShowTapHighlightScheduled) {
+ mPostShowTapHighlightScheduled = false;
+ mUiHandler.removeMessages(UiHandler.MSG_SHOW_TAP_HIGHLIGHT);
+ }
+ }
+
+ private void scheduleHideTapHighlightLocked() {
+ unscheduleHideTapHighlightLocked();
+ mPostHideTapHighlightScheduled = true;
+ mUiHandler.sendEmptyMessageDelayed(UiHandler.MSG_HIDE_TAP_HIGHLIGHT,
+ PRESSED_STATE_DURATION);
+ }
+
+ private void unscheduleHideTapHighlightLocked() {
+ if (mPostHideTapHighlightScheduled) {
+ mPostHideTapHighlightScheduled = false;
+ mUiHandler.removeMessages(UiHandler.MSG_HIDE_TAP_HIGHLIGHT);
+ }
+ }
+
+ private void postShowTapHighlight(boolean show) {
+ synchronized (mLock) {
+ if (show) {
+ if (!mPostShowTapHighlightScheduled) {
+ return;
+ }
+ mPostShowTapHighlightScheduled = false;
+ } else {
+ if (!mPostHideTapHighlightScheduled) {
+ return;
+ }
+ mPostHideTapHighlightScheduled = false;
+ }
+ mUiCallbacks.showTapHighlight(show);
+ }
+ }
+
private void scheduleClickLocked() {
unscheduleClickLocked();
mPostClickScheduled = true;
@@ -403,6 +460,7 @@ final class WebViewInputDispatcher {
return;
}
mPostClickScheduled = false;
+ showTapCandidateLocked();
MotionEvent event = mPostTouchStream.getLastEvent();
if (event == null || event.getAction() != MotionEvent.ACTION_UP) {
@@ -441,6 +499,7 @@ final class WebViewInputDispatcher {
private void enqueueDoubleTapLocked(MotionEvent event) {
unscheduleClickLocked();
+ hideTapCandidateLocked();
MotionEvent eventToEnqueue = MotionEvent.obtainNoHistory(event);
DispatchEvent d = obtainDispatchEventLocked(eventToEnqueue, EVENT_TYPE_DOUBLE_TAP, 0,
mPostLastWebKitXOffset, mPostLastWebKitYOffset, mPostLastWebKitScale);
@@ -457,6 +516,7 @@ final class WebViewInputDispatcher {
if ((deltaX * deltaX + deltaY * deltaY) > mTouchSlopSquared) {
unscheduleLongPressLocked();
mIsTapCandidate = false;
+ hideTapCandidateLocked();
}
}
@@ -473,14 +533,17 @@ final class WebViewInputDispatcher {
|| event.getPointerCount() > 1) {
unscheduleLongPressLocked();
unscheduleClickLocked();
+ hideTapCandidateLocked();
mIsDoubleTapCandidate = false;
mIsTapCandidate = false;
+ hideTapCandidateLocked();
} else if (action == MotionEvent.ACTION_DOWN) {
checkForDoubleTapOnDownLocked(event);
scheduleLongPressLocked();
mIsTapCandidate = true;
mInitialDownX = event.getX();
mInitialDownY = event.getY();
+ scheduleShowTapHighlightLocked();
} else if (action == MotionEvent.ACTION_UP) {
unscheduleLongPressLocked();
if (isClickCandidateLocked(event)) {
@@ -489,6 +552,8 @@ final class WebViewInputDispatcher {
} else {
scheduleClickLocked();
}
+ } else {
+ hideTapCandidateLocked();
}
} else if (action == MotionEvent.ACTION_MOVE) {
checkForSlopLocked(event);
@@ -949,6 +1014,21 @@ final class WebViewInputDispatcher {
* @param flags The event's dispatch flags.
*/
public void dispatchUiEvent(MotionEvent event, int eventType, int flags);
+
+ /**
+ * Asks the UI thread whether this touch event stream should be
+ * intercepted based on the touch down event.
+ * @param event The touch down event.
+ * @return true if the UI stream wants the touch stream without going
+ * through webkit or false otherwise.
+ */
+ public boolean shouldInterceptTouchEvent(MotionEvent event);
+
+ /**
+ * Inform's the UI that it should show the tap highlight
+ * @param show True if it should show the highlight, false if it should hide it
+ */
+ public void showTapHighlight(boolean show);
}
/* Implemented by {@link WebViewCore} to perform operations on the web kit thread. */
@@ -975,6 +1055,8 @@ final class WebViewInputDispatcher {
public static final int MSG_WEBKIT_TIMEOUT = 2;
public static final int MSG_LONG_PRESS = 3;
public static final int MSG_CLICK = 4;
+ public static final int MSG_SHOW_TAP_HIGHLIGHT = 5;
+ public static final int MSG_HIDE_TAP_HIGHLIGHT = 6;
public UiHandler(Looper looper) {
super(looper);
@@ -995,6 +1077,12 @@ final class WebViewInputDispatcher {
case MSG_CLICK:
postClick();
break;
+ case MSG_SHOW_TAP_HIGHLIGHT:
+ postShowTapHighlight(true);
+ break;
+ case MSG_HIDE_TAP_HIGHLIGHT:
+ postShowTapHighlight(false);
+ break;
default:
throw new IllegalStateException("Unknown message type: " + msg.what);
}
diff --git a/core/java/android/widget/ActivityChooserModel.java b/core/java/android/widget/ActivityChooserModel.java
index c53b5f64a11c..fba8d3a209e6 100644
--- a/core/java/android/widget/ActivityChooserModel.java
+++ b/core/java/android/widget/ActivityChooserModel.java
@@ -761,6 +761,16 @@ public class ActivityChooserModel extends DataSetObservable {
}
/**
+ * Gets whether the given observer is already registered.
+ *
+ * @param observer The observer.
+ * @return True if already registered.
+ */
+ public boolean isRegisteredObserver(DataSetObserver observer) {
+ return mObservers.contains(observer);
+ }
+
+ /**
* Represents a record in the history.
*/
public final static class HistoricalRecord {
diff --git a/core/java/android/widget/ActivityChooserView.java b/core/java/android/widget/ActivityChooserView.java
index be6b4e2f5c76..0c0bb1ed5d66 100644
--- a/core/java/android/widget/ActivityChooserView.java
+++ b/core/java/android/widget/ActivityChooserView.java
@@ -20,8 +20,10 @@ import com.android.internal.R;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.DataSetObserver;
@@ -174,6 +176,11 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
private int mDefaultActionButtonContentDescription;
/**
+ * Whether this view has a default activity affordance.
+ */
+ private boolean mHasDefaultActivity;
+
+ /**
* Create a new instance.
*
* @param context The application environment.
@@ -245,6 +252,8 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
Resources resources = context.getResources();
mListPopupMaxWidth = Math.max(resources.getDisplayMetrics().widthPixels / 2,
resources.getDimensionPixelSize(com.android.internal.R.dimen.config_prefDialogWidth));
+
+ updateHasDefaultActivity();
}
/**
@@ -258,6 +267,21 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
}
}
+ @Override
+ protected void onConfigurationChanged(Configuration newConfig) {
+ Configuration oldConfig = mContext.getResources().getConfiguration();
+ final int changed = oldConfig.diff(newConfig);
+ if ((changed & ActivityInfo.CONFIG_SCREEN_SIZE) != 0
+ || (changed & ActivityInfo.CONFIG_ORIENTATION) != 0) {
+ updateHasDefaultActivity();
+ }
+ }
+
+ private void updateHasDefaultActivity() {
+ mHasDefaultActivity = mContext.getResources().getBoolean(
+ R.bool.activity_chooser_view_has_default_activity);
+ }
+
/**
* Sets the background for the button that expands the activity
* overflow list.
@@ -383,7 +407,8 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
protected void onAttachedToWindow() {
super.onAttachedToWindow();
ActivityChooserModel dataModel = mAdapter.getDataModel();
- if (dataModel != null) {
+ if (dataModel != null
+ && !dataModel.isRegisteredObserver(mModelDataSetOberver)) {
dataModel.registerObserver(mModelDataSetOberver);
}
mIsAttachedToWindow = true;
@@ -393,7 +418,8 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
ActivityChooserModel dataModel = mAdapter.getDataModel();
- if (dataModel != null) {
+ if (dataModel != null
+ && dataModel.isRegisteredObserver(mModelDataSetOberver)) {
dataModel.unregisterObserver(mModelDataSetOberver);
}
ViewTreeObserver viewTreeObserver = getViewTreeObserver();
@@ -496,7 +522,7 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
// Default activity button.
final int activityCount = mAdapter.getActivityCount();
final int historySize = mAdapter.getHistorySize();
- if (activityCount > 0 && historySize > 0) {
+ if (mHasDefaultActivity && activityCount > 0 && historySize > 0) {
mDefaultActivityButton.setVisibility(VISIBLE);
ResolveInfo activity = mAdapter.getDefaultActivity();
PackageManager packageManager = mContext.getPackageManager();
@@ -512,9 +538,9 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
}
// Activity chooser content.
if (mDefaultActivityButton.getVisibility() == VISIBLE) {
- mActivityChooserContent.setBackgroundDrawable(mActivityChooserContentBackground);
+ mActivityChooserContent.setBackground(mActivityChooserContentBackground);
} else {
- mActivityChooserContent.setBackgroundDrawable(null);
+ mActivityChooserContent.setBackground(null);
}
}
@@ -577,7 +603,7 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
// OnLongClickListener#onLongClick
@Override
public boolean onLongClick(View view) {
- if (view == mDefaultActivityButton) {
+ if (mHasDefaultActivity && view == mDefaultActivityButton) {
if (mAdapter.getCount() > 0) {
mIsSelectingDefaultActivity = true;
showPopupUnchecked(mInitialActivityCount);
@@ -630,14 +656,16 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
public void setDataModel(ActivityChooserModel dataModel) {
ActivityChooserModel oldDataModel = mAdapter.getDataModel();
- if (oldDataModel != null && isShown()) {
+ if (oldDataModel != null) {
oldDataModel.unregisterObserver(mModelDataSetOberver);
}
mDataModel = dataModel;
- if (dataModel != null && isShown()) {
+ if (dataModel != null) {
dataModel.registerObserver(mModelDataSetOberver);
+ notifyDataSetChanged();
+ } else {
+ notifyDataSetInvalidated();
}
- notifyDataSetChanged();
}
@Override
diff --git a/core/java/android/widget/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java
index b409e26bddd5..64f6c07f87a6 100755
--- a/core/java/android/widget/AppSecurityPermissions.java
+++ b/core/java/android/widget/AppSecurityPermissions.java
@@ -18,7 +18,9 @@ package android.widget;
import com.android.internal.R;
+import android.app.AlertDialog;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
@@ -27,14 +29,13 @@ import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
import android.graphics.drawable.Drawable;
import android.os.Parcel;
-import android.text.Spannable;
-import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
-import android.text.style.ForegroundColorSpan;
+import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
import java.text.Collator;
import java.util.ArrayList;
@@ -42,7 +43,6 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -58,16 +58,65 @@ import java.util.Set;
*
* {@hide}
*/
-public class AppSecurityPermissions implements View.OnClickListener {
+public class AppSecurityPermissions {
- private enum State {
- NO_PERMS,
- DANGEROUS_ONLY,
- NORMAL_ONLY,
- BOTH
+ public static final int WHICH_PERSONAL = 1<<0;
+ public static final int WHICH_DEVICE = 1<<1;
+ public static final int WHICH_NEW = 1<<2;
+ public static final int WHICH_ALL = 0xffff;
+
+ private final static String TAG = "AppSecurityPermissions";
+ private boolean localLOGV = false;
+ private Context mContext;
+ private LayoutInflater mInflater;
+ private PackageManager mPm;
+ private PackageInfo mInstalledPackageInfo;
+ private final Map<String, MyPermissionGroupInfo> mPermGroups
+ = new HashMap<String, MyPermissionGroupInfo>();
+ private final List<MyPermissionGroupInfo> mPermGroupsList
+ = new ArrayList<MyPermissionGroupInfo>();
+ private final PermissionGroupInfoComparator mPermGroupComparator;
+ private final PermissionInfoComparator mPermComparator;
+ private List<MyPermissionInfo> mPermsList;
+ private CharSequence mNewPermPrefix;
+ private Drawable mNormalIcon;
+ private Drawable mDangerousIcon;
+
+ static class MyPermissionGroupInfo extends PermissionGroupInfo {
+ CharSequence mLabel;
+
+ final ArrayList<MyPermissionInfo> mNewPermissions = new ArrayList<MyPermissionInfo>();
+ final ArrayList<MyPermissionInfo> mPersonalPermissions = new ArrayList<MyPermissionInfo>();
+ final ArrayList<MyPermissionInfo> mDevicePermissions = new ArrayList<MyPermissionInfo>();
+ final ArrayList<MyPermissionInfo> mAllPermissions = new ArrayList<MyPermissionInfo>();
+
+ MyPermissionGroupInfo(PermissionInfo perm) {
+ name = perm.packageName;
+ packageName = perm.packageName;
+ }
+
+ MyPermissionGroupInfo(PermissionGroupInfo info) {
+ super(info);
+ }
+
+ public Drawable loadGroupIcon(PackageManager pm) {
+ if (icon != 0) {
+ return loadIcon(pm);
+ } else {
+ ApplicationInfo appInfo;
+ try {
+ appInfo = pm.getApplicationInfo(packageName, 0);
+ return appInfo.loadIcon(pm);
+ } catch (NameNotFoundException e) {
+ }
+ }
+ return null;
+ }
}
static class MyPermissionInfo extends PermissionInfo {
+ CharSequence mLabel;
+
/**
* PackageInfo.requestedPermissionsFlags for the new package being installed.
*/
@@ -99,46 +148,108 @@ public class AppSecurityPermissions implements View.OnClickListener {
}
}
- private final static String TAG = "AppSecurityPermissions";
- private boolean localLOGV = false;
- private Context mContext;
- private LayoutInflater mInflater;
- private PackageManager mPm;
- private LinearLayout mPermsView;
- private Map<String, CharSequence> mNewMap;
- private Map<String, CharSequence> mDangerousMap;
- private Map<String, CharSequence> mNormalMap;
- private List<MyPermissionInfo> mPermsList;
- private String mDefaultGrpLabel;
- private String mDefaultGrpName="DefaultGrp";
- private String mPermFormat;
- private CharSequence mNewPermPrefix;
- private Drawable mNormalIcon;
- private Drawable mDangerousIcon;
- private boolean mExpanded;
- private Drawable mShowMaxIcon;
- private Drawable mShowMinIcon;
- private View mShowMore;
- private TextView mShowMoreText;
- private ImageView mShowMoreIcon;
- private State mCurrentState;
- private LinearLayout mNonDangerousList;
- private LinearLayout mDangerousList;
- private LinearLayout mNewList;
- private HashMap<String, CharSequence> mGroupLabelCache;
- private View mNoPermsView;
+ public static class PermissionItemView extends LinearLayout implements View.OnClickListener {
+ MyPermissionGroupInfo mGroup;
+ MyPermissionInfo mPerm;
+ AlertDialog mDialog;
+
+ public PermissionItemView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ setClickable(true);
+ }
+
+ public void setPermission(MyPermissionGroupInfo grp, MyPermissionInfo perm,
+ boolean first, CharSequence newPermPrefix) {
+ mGroup = grp;
+ mPerm = perm;
+
+ ImageView permGrpIcon = (ImageView) findViewById(R.id.perm_icon);
+ TextView permNameView = (TextView) findViewById(R.id.perm_name);
+
+ PackageManager pm = getContext().getPackageManager();
+ Drawable icon = null;
+ if (first) {
+ icon = grp.loadGroupIcon(pm);
+ }
+ CharSequence label = perm.mLabel;
+ if (perm.mNew && newPermPrefix != null) {
+ // If this is a new permission, format it appropriately.
+ SpannableStringBuilder builder = new SpannableStringBuilder();
+ Parcel parcel = Parcel.obtain();
+ TextUtils.writeToParcel(newPermPrefix, parcel, 0);
+ parcel.setDataPosition(0);
+ CharSequence newStr = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel);
+ parcel.recycle();
+ builder.append(newStr);
+ builder.append(label);
+ label = builder;
+ }
+
+ permGrpIcon.setImageDrawable(icon);
+ permNameView.setText(label);
+ setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (mGroup != null && mPerm != null) {
+ if (mDialog != null) {
+ mDialog.dismiss();
+ }
+ PackageManager pm = getContext().getPackageManager();
+ AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
+ builder.setTitle(mGroup.mLabel);
+ if (mPerm.descriptionRes != 0) {
+ builder.setMessage(mPerm.loadDescription(pm));
+ } else {
+ CharSequence appName;
+ try {
+ ApplicationInfo app = pm.getApplicationInfo(mPerm.packageName, 0);
+ appName = app.loadLabel(pm);
+ } catch (NameNotFoundException e) {
+ appName = mPerm.packageName;
+ }
+ StringBuilder sbuilder = new StringBuilder(128);
+ sbuilder.append(getContext().getString(
+ R.string.perms_description_app, appName));
+ sbuilder.append("\n\n");
+ sbuilder.append(mPerm.name);
+ builder.setMessage(sbuilder.toString());
+ }
+ builder.setCancelable(true);
+ builder.setIcon(mGroup.loadGroupIcon(pm));
+ mDialog = builder.show();
+ mDialog.setCanceledOnTouchOutside(true);
+ }
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ if (mDialog != null) {
+ mDialog.dismiss();
+ }
+ }
+ }
public AppSecurityPermissions(Context context, List<PermissionInfo> permList) {
mContext = context;
mPm = mContext.getPackageManager();
+ loadResources();
+ mPermComparator = new PermissionInfoComparator();
+ mPermGroupComparator = new PermissionGroupInfoComparator();
for (PermissionInfo pi : permList) {
mPermsList.add(new MyPermissionInfo(pi));
}
+ setPermissions(mPermsList);
}
public AppSecurityPermissions(Context context, String packageName) {
mContext = context;
mPm = mContext.getPackageManager();
+ loadResources();
+ mPermComparator = new PermissionInfoComparator();
+ mPermGroupComparator = new PermissionGroupInfoComparator();
mPermsList = new ArrayList<MyPermissionInfo>();
Set<MyPermissionInfo> permSet = new HashSet<MyPermissionInfo>();
PackageInfo pkgInfo;
@@ -155,11 +266,15 @@ public class AppSecurityPermissions implements View.OnClickListener {
for(MyPermissionInfo tmpInfo : permSet) {
mPermsList.add(tmpInfo);
}
+ setPermissions(mPermsList);
}
-
+
public AppSecurityPermissions(Context context, PackageParser.Package pkg) {
mContext = context;
mPm = mContext.getPackageManager();
+ loadResources();
+ mPermComparator = new PermissionInfoComparator();
+ mPermGroupComparator = new PermissionGroupInfoComparator();
mPermsList = new ArrayList<MyPermissionInfo>();
Set<MyPermissionInfo> permSet = new HashSet<MyPermissionInfo>();
if(pkg == null) {
@@ -193,10 +308,20 @@ public class AppSecurityPermissions implements View.OnClickListener {
for (MyPermissionInfo tmpInfo : permSet) {
mPermsList.add(tmpInfo);
}
+ setPermissions(mPermsList);
}
-
+
+ private void loadResources() {
+ // Pick up from framework resources instead.
+ mNewPermPrefix = mContext.getText(R.string.perms_new_perm_prefix);
+ mNormalIcon = mContext.getResources().getDrawable(R.drawable.ic_text_dot);
+ mDangerousIcon = mContext.getResources().getDrawable(R.drawable.ic_bullet_key_permission);
+ }
+
/**
- * Utility to retrieve a view displaying a single permission.
+ * Utility to retrieve a view displaying a single permission. This provides
+ * the old UI layout for permissions; it is only here for the device admin
+ * settings to continue to use.
*/
public static View getPermissionItemView(Context context,
CharSequence grpName, CharSequence description, boolean dangerous) {
@@ -204,10 +329,14 @@ public class AppSecurityPermissions implements View.OnClickListener {
Context.LAYOUT_INFLATER_SERVICE);
Drawable icon = context.getResources().getDrawable(dangerous
? R.drawable.ic_bullet_key_permission : R.drawable.ic_text_dot);
- return getPermissionItemView(context, inflater, grpName,
+ return getPermissionItemViewOld(context, inflater, grpName,
description, dangerous, icon);
}
+ public PackageInfo getInstalledPackageInfo() {
+ return mInstalledPackageInfo;
+ }
+
private void getAllUsedPermissions(int sharedUid, Set<MyPermissionInfo> permSet) {
String sharedPkgList[] = mPm.getPackagesForUid(sharedUid);
if(sharedPkgList == null || (sharedPkgList.length == 0)) {
@@ -239,6 +368,7 @@ public class AppSecurityPermissions implements View.OnClickListener {
if ((strList == null) || (strList.length == 0)) {
return;
}
+ mInstalledPackageInfo = installedPkgInfo;
for (int i=0; i<strList.length; i++) {
String permName = strList[i];
// If we are only looking at an existing app, then we only
@@ -270,13 +400,42 @@ public class AppSecurityPermissions implements View.OnClickListener {
// to see, so skip it.
continue;
}
+ final String origGroupName = tmpPermInfo.group;
+ String groupName = origGroupName;
+ if (groupName == null) {
+ groupName = tmpPermInfo.packageName;
+ tmpPermInfo.group = groupName;
+ }
+ MyPermissionGroupInfo group = mPermGroups.get(groupName);
+ if (group == null) {
+ PermissionGroupInfo grp = null;
+ if (origGroupName != null) {
+ grp = mPm.getPermissionGroupInfo(origGroupName, 0);
+ }
+ if (grp != null) {
+ group = new MyPermissionGroupInfo(grp);
+ } else {
+ // We could be here either because the permission
+ // didn't originally specify a group or the group it
+ // gave couldn't be found. In either case, we consider
+ // its group to be the permission's package name.
+ tmpPermInfo.group = tmpPermInfo.packageName;
+ group = mPermGroups.get(tmpPermInfo.group);
+ if (group == null) {
+ group = new MyPermissionGroupInfo(tmpPermInfo);
+ }
+ group = new MyPermissionGroupInfo(tmpPermInfo);
+ }
+ mPermGroups.put(tmpPermInfo.group, group);
+ }
+ final boolean newPerm = installedPkgInfo != null
+ && (existingFlags&PackageInfo.REQUESTED_PERMISSION_GRANTED) == 0;
MyPermissionInfo myPerm = new MyPermissionInfo(tmpPermInfo);
myPerm.mNewReqFlags = flagsList[i];
myPerm.mExistingReqFlags = existingFlags;
// This is a new permission if the app is already installed and
// doesn't currently hold this permission.
- myPerm.mNew = installedPkgInfo != null
- && (existingFlags&PackageInfo.REQUESTED_PERMISSION_GRANTED) == 0;
+ myPerm.mNew = newPerm;
permSet.add(myPerm);
} catch (NameNotFoundException e) {
Log.i(TAG, "Ignoring unknown permission:"+permName);
@@ -285,149 +444,99 @@ public class AppSecurityPermissions implements View.OnClickListener {
}
public int getPermissionCount() {
- return mPermsList.size();
+ return getPermissionCount(WHICH_ALL);
}
- public View getPermissionsView() {
-
- mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- mPermsView = (LinearLayout) mInflater.inflate(R.layout.app_perms_summary, null);
- mShowMore = mPermsView.findViewById(R.id.show_more);
- mShowMoreIcon = (ImageView) mShowMore.findViewById(R.id.show_more_icon);
- mShowMoreText = (TextView) mShowMore.findViewById(R.id.show_more_text);
- mNewList = (LinearLayout) mPermsView.findViewById(R.id.new_perms_list);
- mDangerousList = (LinearLayout) mPermsView.findViewById(R.id.dangerous_perms_list);
- mNonDangerousList = (LinearLayout) mPermsView.findViewById(R.id.non_dangerous_perms_list);
- mNoPermsView = mPermsView.findViewById(R.id.no_permissions);
-
- // Set up the LinearLayout that acts like a list item.
- mShowMore.setClickable(true);
- mShowMore.setOnClickListener(this);
- mShowMore.setFocusable(true);
-
- // Pick up from framework resources instead.
- mDefaultGrpLabel = mContext.getString(R.string.default_permission_group);
- mPermFormat = mContext.getString(R.string.permissions_format);
- mNewPermPrefix = mContext.getText(R.string.perms_new_perm_prefix);
- mNormalIcon = mContext.getResources().getDrawable(R.drawable.ic_text_dot);
- mDangerousIcon = mContext.getResources().getDrawable(R.drawable.ic_bullet_key_permission);
- mShowMaxIcon = mContext.getResources().getDrawable(R.drawable.expander_close_holo_dark);
- mShowMinIcon = mContext.getResources().getDrawable(R.drawable.expander_open_holo_dark);
-
- // Set permissions view
- setPermissions(mPermsList);
- return mPermsView;
+ private List<MyPermissionInfo> getPermissionList(MyPermissionGroupInfo grp, int which) {
+ if (which == WHICH_NEW) {
+ return grp.mNewPermissions;
+ } else if (which == WHICH_PERSONAL) {
+ return grp.mPersonalPermissions;
+ } else if (which == WHICH_DEVICE) {
+ return grp.mDevicePermissions;
+ } else {
+ return grp.mAllPermissions;
+ }
}
- /**
- * Utility method that concatenates two strings defined by mPermFormat.
- * a null value is returned if both str1 and str2 are null, if one of the strings
- * is null the other non null value is returned without formatting
- * this is to placate initial error checks
- */
- private CharSequence formatPermissions(CharSequence groupDesc, CharSequence permDesc,
- boolean newPerms) {
- if (permDesc == null) {
- return groupDesc;
- }
- // Sometimes people write permission names with a trailing period;
- // strip that if it appears.
- int len = permDesc.length();
- if (len > 0 && permDesc.charAt(len-1) == '.') {
- permDesc = (permDesc.toString()).substring(0, len-1);
- }
- if (newPerms) {
- if (true) {
- // If this is a new permission, format it appropriately.
- SpannableStringBuilder builder = new SpannableStringBuilder();
- if (groupDesc != null) {
- // The previous permissions go in front, with a newline
- // separating them.
- builder.append(groupDesc);
- builder.append("\n");
- }
- Parcel parcel = Parcel.obtain();
- TextUtils.writeToParcel(mNewPermPrefix, parcel, 0);
- parcel.setDataPosition(0);
- CharSequence newStr = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel);
- parcel.recycle();
- builder.append(newStr);
- builder.append(permDesc);
- return builder;
- } else {
- // If this is a new permission, format it appropriately.
- SpannableStringBuilder builder = new SpannableStringBuilder(permDesc);
- builder.insert(0, mNewPermPrefix);
- if (groupDesc != null) {
- // The previous permissions go in front, with a newline
- // separating them.
- builder.insert(0, "\n");
- builder.insert(0, groupDesc);
- }
- return builder;
- }
- }
- if (groupDesc == null) {
- return permDesc;
+ public int getPermissionCount(int which) {
+ int N = 0;
+ for (int i=0; i<mPermGroupsList.size(); i++) {
+ N += getPermissionList(mPermGroupsList.get(i), which).size();
}
- // groupDesc and permDesc are non null
- return String.format(mPermFormat, groupDesc, permDesc.toString());
+ return N;
}
- private CharSequence getGroupLabel(String grpName) {
- if (grpName == null) {
- //return default label
- return mDefaultGrpLabel;
- }
- CharSequence cachedLabel = mGroupLabelCache.get(grpName);
- if (cachedLabel != null) {
- return cachedLabel;
- }
- PermissionGroupInfo pgi;
- try {
- pgi = mPm.getPermissionGroupInfo(grpName, 0);
- } catch (NameNotFoundException e) {
- Log.i(TAG, "Invalid group name:" + grpName);
- return null;
+ public View getPermissionsView() {
+ return getPermissionsView(WHICH_ALL);
+ }
+
+ public View getPermissionsView(int which) {
+ mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+ LinearLayout permsView = (LinearLayout) mInflater.inflate(R.layout.app_perms_summary, null);
+ LinearLayout displayList = (LinearLayout) permsView.findViewById(R.id.perms_list);
+ View noPermsView = permsView.findViewById(R.id.no_permissions);
+
+ displayPermissions(mPermGroupsList, displayList, which);
+ if (displayList.getChildCount() <= 0) {
+ noPermsView.setVisibility(View.VISIBLE);
}
- CharSequence label = pgi.loadLabel(mPm).toString();
- mGroupLabelCache.put(grpName, label);
- return label;
+
+ return permsView;
}
/**
* Utility method that displays permissions from a map containing group name and
* list of permission descriptions.
*/
- private void displayPermissions(Map<String, CharSequence> permInfoMap,
- LinearLayout permListView, boolean dangerous) {
+ private void displayPermissions(List<MyPermissionGroupInfo> groups,
+ LinearLayout permListView, int which) {
permListView.removeAllViews();
- Set<String> permInfoStrSet = permInfoMap.keySet();
- for (String loopPermGrpInfoStr : permInfoStrSet) {
- CharSequence grpLabel = getGroupLabel(loopPermGrpInfoStr);
- //guaranteed that grpLabel wont be null since permissions without groups
- //will belong to the default group
- if(localLOGV) Log.i(TAG, "Adding view group:" + grpLabel + ", desc:"
- + permInfoMap.get(loopPermGrpInfoStr));
- permListView.addView(getPermissionItemView(grpLabel,
- permInfoMap.get(loopPermGrpInfoStr), dangerous));
+ int spacing = (int)(8*mContext.getResources().getDisplayMetrics().density);
+
+ for (int i=0; i<groups.size(); i++) {
+ MyPermissionGroupInfo grp = groups.get(i);
+ final List<MyPermissionInfo> perms = getPermissionList(grp, which);
+ for (int j=0; j<perms.size(); j++) {
+ MyPermissionInfo perm = perms.get(j);
+ View view = getPermissionItemView(grp, perm, j == 0,
+ which != WHICH_NEW ? mNewPermPrefix : null);
+ LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+ if (j == 0) {
+ lp.topMargin = spacing;
+ }
+ if (j == grp.mAllPermissions.size()-1) {
+ lp.bottomMargin = spacing;
+ }
+ if (permListView.getChildCount() == 0) {
+ lp.topMargin *= 2;
+ }
+ permListView.addView(view, lp);
+ }
}
}
- private void displayNoPermissions() {
- mNoPermsView.setVisibility(View.VISIBLE);
+ private PermissionItemView getPermissionItemView(MyPermissionGroupInfo grp,
+ MyPermissionInfo perm, boolean first, CharSequence newPermPrefix) {
+ return getPermissionItemView(mContext, mInflater, grp, perm, first, newPermPrefix);
}
- private View getPermissionItemView(CharSequence grpName, CharSequence permList,
- boolean dangerous) {
- return getPermissionItemView(mContext, mInflater, grpName, permList,
- dangerous, dangerous ? mDangerousIcon : mNormalIcon);
+ private static PermissionItemView getPermissionItemView(Context context, LayoutInflater inflater,
+ MyPermissionGroupInfo grp, MyPermissionInfo perm, boolean first,
+ CharSequence newPermPrefix) {
+ PermissionItemView permView = (PermissionItemView)inflater.inflate(
+ R.layout.app_permission_item, null);
+ permView.setPermission(grp, perm, first, newPermPrefix);
+ return permView;
}
- private static View getPermissionItemView(Context context, LayoutInflater inflater,
+ private static View getPermissionItemViewOld(Context context, LayoutInflater inflater,
CharSequence grpName, CharSequence permList, boolean dangerous, Drawable icon) {
- View permView = inflater.inflate(R.layout.app_permission_item, null);
+ View permView = inflater.inflate(R.layout.app_permission_item_old, null);
TextView permGrpView = (TextView) permView.findViewById(R.id.permission_group);
TextView permDescView = (TextView) permView.findViewById(R.id.permission_list);
@@ -444,41 +553,6 @@ public class AppSecurityPermissions implements View.OnClickListener {
return permView;
}
- private void showPermissions() {
-
- switch(mCurrentState) {
- case NO_PERMS:
- displayNoPermissions();
- break;
-
- case DANGEROUS_ONLY:
- displayPermissions(mNewMap, mNewList, true);
- displayPermissions(mDangerousMap, mDangerousList, true);
- break;
-
- case NORMAL_ONLY:
- displayPermissions(mNewMap, mNewList, true);
- displayPermissions(mNormalMap, mNonDangerousList, false);
- break;
-
- case BOTH:
- displayPermissions(mNewMap, mNewList, true);
- displayPermissions(mDangerousMap, mDangerousList, true);
- if (mExpanded) {
- displayPermissions(mNormalMap, mNonDangerousList, false);
- mShowMoreIcon.setImageDrawable(mShowMaxIcon);
- mShowMoreText.setText(R.string.perms_hide);
- mNonDangerousList.setVisibility(View.VISIBLE);
- } else {
- mShowMoreIcon.setImageDrawable(mShowMinIcon);
- mShowMoreText.setText(R.string.perms_show_all);
- mNonDangerousList.setVisibility(View.GONE);
- }
- mShowMore.setVisibility(View.VISIBLE);
- break;
- }
- }
-
private boolean isDisplayablePermission(PermissionInfo pInfo, int newReqFlags,
int existingReqFlags) {
final int base = pInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;
@@ -496,79 +570,45 @@ public class AppSecurityPermissions implements View.OnClickListener {
}
return false;
}
-
- /*
- * Utility method that aggregates all permission descriptions categorized by group
- * Say group1 has perm11, perm12, perm13, the group description will be
- * perm11_Desc, perm12_Desc, perm13_Desc
- */
- private void aggregateGroupDescs(Map<String, List<MyPermissionInfo> > map,
- Map<String, CharSequence> retMap, boolean newPerms) {
- if(map == null) {
- return;
+
+ private static class PermissionGroupInfoComparator implements Comparator<MyPermissionGroupInfo> {
+ private final Collator sCollator = Collator.getInstance();
+ PermissionGroupInfoComparator() {
}
- if(retMap == null) {
- return;
- }
- Set<String> grpNames = map.keySet();
- Iterator<String> grpNamesIter = grpNames.iterator();
- while(grpNamesIter.hasNext()) {
- CharSequence grpDesc = null;
- String grpNameKey = grpNamesIter.next();
- List<MyPermissionInfo> grpPermsList = map.get(grpNameKey);
- if(grpPermsList == null) {
- continue;
- }
- for(PermissionInfo permInfo: grpPermsList) {
- CharSequence permDesc = permInfo.loadLabel(mPm);
- grpDesc = formatPermissions(grpDesc, permDesc, newPerms);
+ public final int compare(MyPermissionGroupInfo a, MyPermissionGroupInfo b) {
+ if (((a.flags^b.flags)&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0) {
+ return ((a.flags&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0) ? -1 : 1;
}
- // Insert grpDesc into map
- if(grpDesc != null) {
- if(localLOGV) Log.i(TAG, "Group:"+grpNameKey+" description:"+grpDesc.toString());
- retMap.put(grpNameKey, grpDesc);
+ if (a.priority != b.priority) {
+ return a.priority > b.priority ? -1 : 1;
}
+ return sCollator.compare(a.mLabel, b.mLabel);
}
}
- private static class PermissionInfoComparator implements Comparator<PermissionInfo> {
- private PackageManager mPm;
+ private static class PermissionInfoComparator implements Comparator<MyPermissionInfo> {
private final Collator sCollator = Collator.getInstance();
- PermissionInfoComparator(PackageManager pm) {
- mPm = pm;
+ PermissionInfoComparator() {
}
- public final int compare(PermissionInfo a, PermissionInfo b) {
- CharSequence sa = a.loadLabel(mPm);
- CharSequence sb = b.loadLabel(mPm);
- return sCollator.compare(sa, sb);
+ public final int compare(MyPermissionInfo a, MyPermissionInfo b) {
+ return sCollator.compare(a.mLabel, b.mLabel);
}
}
-
+
+ private void addPermToList(List<MyPermissionInfo> permList,
+ MyPermissionInfo pInfo) {
+ if (pInfo.mLabel == null) {
+ pInfo.mLabel = pInfo.loadLabel(mPm);
+ }
+ int idx = Collections.binarySearch(permList, pInfo, mPermComparator);
+ if(localLOGV) Log.i(TAG, "idx="+idx+", list.size="+permList.size());
+ if (idx < 0) {
+ idx = -idx-1;
+ permList.add(idx, pInfo);
+ }
+ }
+
private void setPermissions(List<MyPermissionInfo> permList) {
- mGroupLabelCache = new HashMap<String, CharSequence>();
- //add the default label so that uncategorized permissions can go here
- mGroupLabelCache.put(mDefaultGrpName, mDefaultGrpLabel);
-
- // Map containing group names and a list of permissions under that group
- // that are new from the current install
- mNewMap = new HashMap<String, CharSequence>();
- // Map containing group names and a list of permissions under that group
- // categorized as dangerous
- mDangerousMap = new HashMap<String, CharSequence>();
- // Map containing group names and a list of permissions under that group
- // categorized as normal
- mNormalMap = new HashMap<String, CharSequence>();
-
- // Additional structures needed to ensure that permissions are unique under
- // each group
- Map<String, List<MyPermissionInfo>> newMap =
- new HashMap<String, List<MyPermissionInfo>>();
- Map<String, List<MyPermissionInfo>> dangerousMap =
- new HashMap<String, List<MyPermissionInfo>>();
- Map<String, List<MyPermissionInfo> > normalMap =
- new HashMap<String, List<MyPermissionInfo>>();
- PermissionInfoComparator permComparator = new PermissionInfoComparator(mPm);
-
if (permList != null) {
// First pass to group permissions
for (MyPermissionInfo pInfo : permList) {
@@ -577,51 +617,43 @@ public class AppSecurityPermissions implements View.OnClickListener {
if(localLOGV) Log.i(TAG, "Permission:"+pInfo.name+" is not displayable");
continue;
}
- Map<String, List<MyPermissionInfo> > permInfoMap;
- if (pInfo.mNew) {
- permInfoMap = newMap;
- } else if ((pInfo.protectionLevel&PermissionInfo.PROTECTION_MASK_BASE)
- == PermissionInfo.PROTECTION_DANGEROUS) {
- permInfoMap = dangerousMap;
- } else {
- permInfoMap = normalMap;
- }
- String grpName = (pInfo.group == null) ? mDefaultGrpName : pInfo.group;
- if(localLOGV) Log.i(TAG, "Permission:"+pInfo.name+" belongs to group:"+grpName);
- List<MyPermissionInfo> grpPermsList = permInfoMap.get(grpName);
- if(grpPermsList == null) {
- grpPermsList = new ArrayList<MyPermissionInfo>();
- permInfoMap.put(grpName, grpPermsList);
- grpPermsList.add(pInfo);
- } else {
- int idx = Collections.binarySearch(grpPermsList, pInfo, permComparator);
- if(localLOGV) Log.i(TAG, "idx="+idx+", list.size="+grpPermsList.size());
- if (idx < 0) {
- idx = -idx-1;
- grpPermsList.add(idx, pInfo);
+ MyPermissionGroupInfo group = mPermGroups.get(pInfo.group);
+ if (group != null) {
+ pInfo.mLabel = pInfo.loadLabel(mPm);
+ addPermToList(group.mAllPermissions, pInfo);
+ if (pInfo.mNew) {
+ addPermToList(group.mNewPermissions, pInfo);
+ }
+ if ((group.flags&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0) {
+ addPermToList(group.mPersonalPermissions, pInfo);
+ } else {
+ addPermToList(group.mDevicePermissions, pInfo);
}
}
}
- // Second pass to actually form the descriptions
- // Look at dangerous permissions first
- aggregateGroupDescs(newMap, mNewMap, true);
- aggregateGroupDescs(dangerousMap, mDangerousMap, false);
- aggregateGroupDescs(normalMap, mNormalMap, false);
}
- mCurrentState = State.NO_PERMS;
- if (mNewMap.size() > 0 || mDangerousMap.size() > 0) {
- mCurrentState = (mNormalMap.size() > 0) ? State.BOTH : State.DANGEROUS_ONLY;
- } else if(mNormalMap.size() > 0) {
- mCurrentState = State.NORMAL_ONLY;
+ for (MyPermissionGroupInfo pgrp : mPermGroups.values()) {
+ if (pgrp.labelRes != 0 || pgrp.nonLocalizedLabel != null) {
+ pgrp.mLabel = pgrp.loadLabel(mPm);
+ } else {
+ ApplicationInfo app;
+ try {
+ app = mPm.getApplicationInfo(pgrp.packageName, 0);
+ pgrp.mLabel = app.loadLabel(mPm);
+ } catch (NameNotFoundException e) {
+ pgrp.mLabel = pgrp.loadLabel(mPm);
+ }
+ }
+ mPermGroupsList.add(pgrp);
+ }
+ Collections.sort(mPermGroupsList, mPermGroupComparator);
+ if (false) {
+ for (MyPermissionGroupInfo grp : mPermGroupsList) {
+ Log.i("foo", "Group " + grp.name + " personal="
+ + ((grp.flags&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0)
+ + " priority=" + grp.priority);
+ }
}
- if(localLOGV) Log.i(TAG, "mCurrentState=" + mCurrentState);
- showPermissions();
- }
-
- public void onClick(View v) {
- if(localLOGV) Log.i(TAG, "mExpanded="+mExpanded);
- mExpanded = !mExpanded;
- showPermissions();
}
}
diff --git a/core/java/android/widget/CalendarView.java b/core/java/android/widget/CalendarView.java
index 2a74f6a5d797..b06da0672a16 100644
--- a/core/java/android/widget/CalendarView.java
+++ b/core/java/android/widget/CalendarView.java
@@ -421,6 +421,8 @@ public class CalendarView extends FrameLayout {
* Sets the number of weeks to be shown.
*
* @param count The shown week count.
+ *
+ * @attr ref android.R.styleable#CalendarView_shownWeekCount
*/
public void setShownWeekCount(int count) {
if (mShownWeekCount != count) {
@@ -433,6 +435,8 @@ public class CalendarView extends FrameLayout {
* Gets the number of weeks to be shown.
*
* @return The shown week count.
+ *
+ * @attr ref android.R.styleable#CalendarView_shownWeekCount
*/
public int getShownWeekCount() {
return mShownWeekCount;
@@ -442,6 +446,8 @@ public class CalendarView extends FrameLayout {
* Sets the background color for the selected week.
*
* @param color The week background color.
+ *
+ * @attr ref android.R.styleable#CalendarView_selectedWeekBackgroundColor
*/
public void setSelectedWeekBackgroundColor(int color) {
if (mSelectedWeekBackgroundColor != color) {
@@ -460,6 +466,8 @@ public class CalendarView extends FrameLayout {
* Gets the background color for the selected week.
*
* @return The week background color.
+ *
+ * @attr ref android.R.styleable#CalendarView_selectedWeekBackgroundColor
*/
public int getSelectedWeekBackgroundColor() {
return mSelectedWeekBackgroundColor;
@@ -469,6 +477,8 @@ public class CalendarView extends FrameLayout {
* Sets the color for the dates of the focused month.
*
* @param color The focused month date color.
+ *
+ * @attr ref android.R.styleable#CalendarView_focusedMonthDateColor
*/
public void setFocusedMonthDateColor(int color) {
if (mFocusedMonthDateColor != color) {
@@ -487,6 +497,8 @@ public class CalendarView extends FrameLayout {
* Gets the color for the dates in the focused month.
*
* @return The focused month date color.
+ *
+ * @attr ref android.R.styleable#CalendarView_focusedMonthDateColor
*/
public int getFocusedMonthDateColor() {
return mFocusedMonthDateColor;
@@ -496,6 +508,8 @@ public class CalendarView extends FrameLayout {
* Sets the color for the dates of a not focused month.
*
* @param color A not focused month date color.
+ *
+ * @attr ref android.R.styleable#CalendarView_unfocusedMonthDateColor
*/
public void setUnfocusedMonthDateColor(int color) {
if (mUnfocusedMonthDateColor != color) {
@@ -514,6 +528,8 @@ public class CalendarView extends FrameLayout {
* Gets the color for the dates in a not focused month.
*
* @return A not focused month date color.
+ *
+ * @attr ref android.R.styleable#CalendarView_unfocusedMonthDateColor
*/
public int getUnfocusedMonthDateColor() {
return mFocusedMonthDateColor;
@@ -523,6 +539,8 @@ public class CalendarView extends FrameLayout {
* Sets the color for the week numbers.
*
* @param color The week number color.
+ *
+ * @attr ref android.R.styleable#CalendarView_weekNumberColor
*/
public void setWeekNumberColor(int color) {
if (mWeekNumberColor != color) {
@@ -537,6 +555,8 @@ public class CalendarView extends FrameLayout {
* Gets the color for the week numbers.
*
* @return The week number color.
+ *
+ * @attr ref android.R.styleable#CalendarView_weekNumberColor
*/
public int getWeekNumberColor() {
return mWeekNumberColor;
@@ -546,6 +566,8 @@ public class CalendarView extends FrameLayout {
* Sets the color for the separator line between weeks.
*
* @param color The week separator color.
+ *
+ * @attr ref android.R.styleable#CalendarView_weekSeparatorLineColor
*/
public void setWeekSeparatorLineColor(int color) {
if (mWeekSeparatorLineColor != color) {
@@ -558,6 +580,8 @@ public class CalendarView extends FrameLayout {
* Gets the color for the separator line between weeks.
*
* @return The week separator color.
+ *
+ * @attr ref android.R.styleable#CalendarView_weekSeparatorLineColor
*/
public int getWeekSeparatorLineColor() {
return mWeekSeparatorLineColor;
@@ -568,6 +592,8 @@ public class CalendarView extends FrameLayout {
* the end of the selected date.
*
* @param resourceId The vertical bar drawable resource id.
+ *
+ * @attr ref android.R.styleable#CalendarView_selectedDateVerticalBar
*/
public void setSelectedDateVerticalBar(int resourceId) {
Drawable drawable = getResources().getDrawable(resourceId);
@@ -579,6 +605,8 @@ public class CalendarView extends FrameLayout {
* the end of the selected date.
*
* @param drawable The vertical bar drawable.
+ *
+ * @attr ref android.R.styleable#CalendarView_selectedDateVerticalBar
*/
public void setSelectedDateVerticalBar(Drawable drawable) {
if (mSelectedDateVerticalBar != drawable) {
@@ -607,6 +635,8 @@ public class CalendarView extends FrameLayout {
* Sets the text appearance for the week day abbreviation of the calendar header.
*
* @param resourceId The text appearance resource id.
+ *
+ * @attr ref android.R.styleable#CalendarView_weekDayTextAppearance
*/
public void setWeekDayTextAppearance(int resourceId) {
if (mWeekDayTextAppearanceResId != resourceId) {
@@ -619,6 +649,8 @@ public class CalendarView extends FrameLayout {
* Gets the text appearance for the week day abbreviation of the calendar header.
*
* @return The text appearance resource id.
+ *
+ * @attr ref android.R.styleable#CalendarView_weekDayTextAppearance
*/
public int getWeekDayTextAppearance() {
return mWeekDayTextAppearanceResId;
@@ -628,6 +660,8 @@ public class CalendarView extends FrameLayout {
* Sets the text appearance for the calendar dates.
*
* @param resourceId The text appearance resource id.
+ *
+ * @attr ref android.R.styleable#CalendarView_dateTextAppearance
*/
public void setDateTextAppearance(int resourceId) {
if (mDateTextAppearanceResId != resourceId) {
@@ -641,6 +675,8 @@ public class CalendarView extends FrameLayout {
* Gets the text appearance for the calendar dates.
*
* @return The text appearance resource id.
+ *
+ * @attr ref android.R.styleable#CalendarView_dateTextAppearance
*/
public int getDateTextAppearance() {
return mDateTextAppearanceResId;
@@ -683,6 +719,8 @@ public class CalendarView extends FrameLayout {
* <p>
*
* @return The minimal supported date.
+ *
+ * @attr ref android.R.styleable#CalendarView_minDate
*/
public long getMinDate() {
return mMinDate.getTimeInMillis();
@@ -694,6 +732,8 @@ public class CalendarView extends FrameLayout {
* zone.
*
* @param minDate The minimal supported date.
+ *
+ * @attr ref android.R.styleable#CalendarView_minDate
*/
public void setMinDate(long minDate) {
mTempDate.setTimeInMillis(minDate);
@@ -731,6 +771,8 @@ public class CalendarView extends FrameLayout {
* <p>
*
* @return The maximal supported date.
+ *
+ * @attr ref android.R.styleable#CalendarView_maxDate
*/
public long getMaxDate() {
return mMaxDate.getTimeInMillis();
@@ -742,6 +784,8 @@ public class CalendarView extends FrameLayout {
* zone.
*
* @param maxDate The maximal supported date.
+ *
+ * @attr ref android.R.styleable#CalendarView_maxDate
*/
public void setMaxDate(long maxDate) {
mTempDate.setTimeInMillis(maxDate);
@@ -767,6 +811,8 @@ public class CalendarView extends FrameLayout {
* Sets whether to show the week number.
*
* @param showWeekNumber True to show the week number.
+ *
+ * @attr ref android.R.styleable#CalendarView_showWeekNumber
*/
public void setShowWeekNumber(boolean showWeekNumber) {
if (mShowWeekNumber == showWeekNumber) {
@@ -781,6 +827,8 @@ public class CalendarView extends FrameLayout {
* Gets whether to show the week number.
*
* @return True if showing the week number.
+ *
+ * @attr ref android.R.styleable#CalendarView_showWeekNumber
*/
public boolean getShowWeekNumber() {
return mShowWeekNumber;
@@ -798,6 +846,8 @@ public class CalendarView extends FrameLayout {
* @see Calendar#FRIDAY
* @see Calendar#SATURDAY
* @see Calendar#SUNDAY
+ *
+ * @attr ref android.R.styleable#CalendarView_firstDayOfWeek
*/
public int getFirstDayOfWeek() {
return mFirstDayOfWeek;
@@ -815,6 +865,8 @@ public class CalendarView extends FrameLayout {
* @see Calendar#FRIDAY
* @see Calendar#SATURDAY
* @see Calendar#SUNDAY
+ *
+ * @attr ref android.R.styleable#CalendarView_firstDayOfWeek
*/
public void setFirstDayOfWeek(int firstDayOfWeek) {
if (mFirstDayOfWeek == firstDayOfWeek) {
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index c2559a506c28..1986450d8958 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -536,10 +536,15 @@ public class HorizontalScrollView extends FrameLayout {
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
- mIsBeingDragged = getChildCount() != 0;
- if (!mIsBeingDragged) {
+ if (getChildCount() == 0) {
return false;
}
+ if ((mIsBeingDragged = !mScroller.isFinished())) {
+ final ViewParent parent = getParent();
+ if (parent != null) {
+ parent.requestDisallowInterceptTouchEvent(true);
+ }
+ }
/*
* If being flinged and user touches, stop the fling. isFinished
@@ -555,11 +560,23 @@ public class HorizontalScrollView extends FrameLayout {
break;
}
case MotionEvent.ACTION_MOVE:
+ final int activePointerIndex = ev.findPointerIndex(mActivePointerId);
+ final int x = (int) ev.getX(activePointerIndex);
+ int deltaX = mLastMotionX - x;
+ if (!mIsBeingDragged && Math.abs(deltaX) > mTouchSlop) {
+ final ViewParent parent = getParent();
+ if (parent != null) {
+ parent.requestDisallowInterceptTouchEvent(true);
+ }
+ mIsBeingDragged = true;
+ if (deltaX > 0) {
+ deltaX -= mTouchSlop;
+ } else {
+ deltaX += mTouchSlop;
+ }
+ }
if (mIsBeingDragged) {
// Scroll to follow the motion event
- final int activePointerIndex = ev.findPointerIndex(mActivePointerId);
- final int x = (int) ev.getX(activePointerIndex);
- final int deltaX = (int) (mLastMotionX - x);
mLastMotionX = x;
final int oldX = mScrollX;
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index 7593bffc132a..cf28da4d0bdc 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -193,6 +193,9 @@ public class ImageView extends View {
}
}
+ /**
+ * @hide
+ */
@Override
public int getResolvedLayoutDirection(Drawable dr) {
return (dr == mDrawable) ?
diff --git a/core/java/android/widget/LinearLayout.java b/core/java/android/widget/LinearLayout.java
index 5ed005f813bf..2391898dfa3d 100644
--- a/core/java/android/widget/LinearLayout.java
+++ b/core/java/android/widget/LinearLayout.java
@@ -867,7 +867,7 @@ public class LinearLayout extends ViewGroup {
// We have no limit, so make all weighted views as tall as the largest child.
// Children will have already been measured once.
- if (useLargestChild && widthMode == MeasureSpec.UNSPECIFIED) {
+ if (useLargestChild && heightMode != MeasureSpec.EXACTLY) {
for (int i = 0; i < count; i++) {
final View child = getVirtualChildAt(i);
@@ -1283,7 +1283,7 @@ public class LinearLayout extends ViewGroup {
// We have no limit, so make all weighted views as wide as the largest child.
// Children will have already been measured once.
- if (useLargestChild && widthMode == MeasureSpec.UNSPECIFIED) {
+ if (useLargestChild && widthMode != MeasureSpec.EXACTLY) {
for (int i = 0; i < count; i++) {
final View child = getVirtualChildAt(i);
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index 0b49404d6e90..f3f18d585dbd 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -211,6 +211,7 @@ public class ProgressBar extends View {
private boolean mOnlyIndeterminate;
private Transformation mTransformation;
private AlphaAnimation mAnimation;
+ private boolean mHasAnimation;
private Drawable mIndeterminateDrawable;
private Drawable mProgressDrawable;
private Drawable mCurrentDrawable;
@@ -670,18 +671,14 @@ public class ProgressBar extends View {
if (mUiThreadId == Thread.currentThread().getId()) {
doRefreshProgress(id, progress, fromUser, true);
} else {
- RefreshProgressRunnable r;
- if (mRefreshProgressRunnable != null) {
- // Use cached RefreshProgressRunnable if available
- r = mRefreshProgressRunnable;
- } else {
- // Make a new one
- r = new RefreshProgressRunnable();
+ if (mRefreshProgressRunnable == null) {
+ mRefreshProgressRunnable = new RefreshProgressRunnable();
}
+
final RefreshData rd = RefreshData.obtain(id, progress, fromUser);
mRefreshData.add(rd);
if (mAttached && !mRefreshIsPosted) {
- post(r);
+ post(mRefreshProgressRunnable);
mRefreshIsPosted = true;
}
}
@@ -860,14 +857,26 @@ public class ProgressBar extends View {
if (mIndeterminateDrawable instanceof Animatable) {
mShouldStartAnimationDrawable = true;
- mAnimation = null;
+ mHasAnimation = false;
} else {
+ mHasAnimation = true;
+
if (mInterpolator == null) {
mInterpolator = new LinearInterpolator();
}
- mTransformation = new Transformation();
- mAnimation = new AlphaAnimation(0.0f, 1.0f);
+ if (mTransformation == null) {
+ mTransformation = new Transformation();
+ } else {
+ mTransformation.clear();
+ }
+
+ if (mAnimation == null) {
+ mAnimation = new AlphaAnimation(0.0f, 1.0f);
+ } else {
+ mAnimation.reset();
+ }
+
mAnimation.setRepeatMode(mBehavior);
mAnimation.setRepeatCount(Animation.INFINITE);
mAnimation.setDuration(mDuration);
@@ -881,8 +890,7 @@ public class ProgressBar extends View {
* <p>Stop the indeterminate progress animation.</p>
*/
void stopAnimation() {
- mAnimation = null;
- mTransformation = null;
+ mHasAnimation = false;
if (mIndeterminateDrawable instanceof Animatable) {
((Animatable) mIndeterminateDrawable).stop();
mShouldStartAnimationDrawable = false;
@@ -967,6 +975,9 @@ public class ProgressBar extends View {
}
}
+ /**
+ * @hide
+ */
@Override
public int getResolvedLayoutDirection(Drawable who) {
return (who == mProgressDrawable || who == mIndeterminateDrawable) ?
@@ -1027,7 +1038,7 @@ public class ProgressBar extends View {
canvas.save();
canvas.translate(mPaddingLeft, mPaddingTop);
long time = getDrawingTime();
- if (mAnimation != null) {
+ if (mHasAnimation) {
mAnimation.getTransformation(time, mTransformation);
float scale = mTransformation.getAlpha();
try {
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index d8c23a17a9c8..56c4bd85a27e 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -1556,15 +1556,13 @@ public class RemoteViews implements Parcelable, Filter {
}
/**
- * Equivalent to calling {@link
- * TextView#setCompoundDrawablesRelativeWithIntrinsicBounds(int, int, int, int)}.
- *
* @param viewId The id of the view whose text should change
- * @param start The id of a drawable to place before the text (relative to the
+ * @param start The id of a drawable to place before the text (relative to the
* layout direction), or 0
* @param top The id of a drawable to place above the text, or 0
* @param end The id of a drawable to place after the text, or 0
- * @param bottom The id of a drawable to place below the text, or 0
+ * @param bottom The id of a drawable to place below the text, or 0
+ * @hide
*/
public void setTextViewCompoundDrawablesRelative(int viewId, int start, int top, int end, int bottom) {
addAction(new TextViewDrawableAction(viewId, true, start, top, end, bottom));
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index 0f0dbae03e37..f912c6625621 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -482,6 +482,10 @@ public class ScrollView extends FrameLayout {
if (mScrollStrictSpan == null) {
mScrollStrictSpan = StrictMode.enterCriticalSpan("ScrollView-scroll");
}
+ final ViewParent parent = getParent();
+ if (parent != null) {
+ parent.requestDisallowInterceptTouchEvent(true);
+ }
}
break;
}
@@ -546,10 +550,15 @@ public class ScrollView extends FrameLayout {
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
- mIsBeingDragged = getChildCount() != 0;
- if (!mIsBeingDragged) {
+ if (getChildCount() == 0) {
return false;
}
+ if ((mIsBeingDragged = !mScroller.isFinished())) {
+ final ViewParent parent = getParent();
+ if (parent != null) {
+ parent.requestDisallowInterceptTouchEvent(true);
+ }
+ }
/*
* If being flinged and user touches, stop the fling. isFinished
@@ -569,11 +578,23 @@ public class ScrollView extends FrameLayout {
break;
}
case MotionEvent.ACTION_MOVE:
+ final int activePointerIndex = ev.findPointerIndex(mActivePointerId);
+ final int y = (int) ev.getY(activePointerIndex);
+ int deltaY = mLastMotionY - y;
+ if (!mIsBeingDragged && Math.abs(deltaY) > mTouchSlop) {
+ final ViewParent parent = getParent();
+ if (parent != null) {
+ parent.requestDisallowInterceptTouchEvent(true);
+ }
+ mIsBeingDragged = true;
+ if (deltaY > 0) {
+ deltaY -= mTouchSlop;
+ } else {
+ deltaY += mTouchSlop;
+ }
+ }
if (mIsBeingDragged) {
// Scroll to follow the motion event
- final int activePointerIndex = ev.findPointerIndex(mActivePointerId);
- final int y = (int) ev.getY(activePointerIndex);
- final int deltaY = mLastMotionY - y;
mLastMotionY = y;
final int oldX = mScrollX;
diff --git a/core/java/android/widget/ShareActionProvider.java b/core/java/android/widget/ShareActionProvider.java
index 080b87db13c1..367561e3305f 100644
--- a/core/java/android/widget/ShareActionProvider.java
+++ b/core/java/android/widget/ShareActionProvider.java
@@ -44,6 +44,7 @@ import com.android.internal.R;
* <code>
* // In Activity#onCreateOptionsMenu
* public boolean onCreateOptionsMenu(Menu menu) {
+ * getManuInflater().inflate(R.menu.my_menu, menu);
* // Get the menu item.
* MenuItem menuItem = menu.findItem(R.id.my_menu_item);
* // Get the provider and hold onto it to set/change the share intent.
@@ -239,7 +240,11 @@ public class ShareActionProvider extends ActionProvider {
* <p>
* <strong>Note:</strong> The history file name can be set any time, however
* only the action views created by {@link #onCreateActionView()} after setting
- * the file name will be backed by the provided file.
+ * the file name will be backed by the provided file. Hence, if you are using
+ * a share action provider on a menu item and want to change the history file
+ * based on the type of the currently selected item, you need to call
+ * {@link android.app.Activity#invalidateOptionsMenu()} to force the system
+ * to recreate the menu UI.
* <p>
*
* @param shareHistoryFile The share history file name.
diff --git a/core/java/android/widget/SpellChecker.java b/core/java/android/widget/SpellChecker.java
index 98e45fbe3e4c..e1103dd2f035 100644
--- a/core/java/android/widget/SpellChecker.java
+++ b/core/java/android/widget/SpellChecker.java
@@ -21,10 +21,12 @@ import android.text.Editable;
import android.text.Selection;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
+import android.text.TextUtils;
import android.text.method.WordIterator;
import android.text.style.SpellCheckSpan;
import android.text.style.SuggestionSpan;
import android.util.Log;
+import android.util.LruCache;
import android.view.textservice.SentenceSuggestionsInfo;
import android.view.textservice.SpellCheckerSession;
import android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener;
@@ -95,6 +97,10 @@ public class SpellChecker implements SpellCheckerSessionListener {
private Runnable mSpellRunnable;
+ private static final int SUGGESTION_SPAN_CACHE_SIZE = 10;
+ private final LruCache<Long, SuggestionSpan> mSuggestionSpanCache =
+ new LruCache<Long, SuggestionSpan>(SUGGESTION_SPAN_CACHE_SIZE);
+
public SpellChecker(TextView textView) {
mTextView = textView;
@@ -126,6 +132,7 @@ public class SpellChecker implements SpellCheckerSessionListener {
// Restore SpellCheckSpans in pool
for (int i = 0; i < mLength; i++) {
+ // Resets id and progress to invalidate spell check span
mSpellCheckSpans[i].setSpellCheckInProgress(false);
mIds[i] = -1;
}
@@ -133,6 +140,7 @@ public class SpellChecker implements SpellCheckerSessionListener {
// Remove existing misspelled SuggestionSpans
mTextView.removeMisspelledSpans((Editable) mTextView.getText());
+ mSuggestionSpanCache.evictAll();
}
private void setLocale(Locale locale) {
@@ -199,6 +207,7 @@ public class SpellChecker implements SpellCheckerSessionListener {
public void removeSpellCheckSpan(SpellCheckSpan spellCheckSpan) {
for (int i = 0; i < mLength; i++) {
if (mSpellCheckSpans[i] == spellCheckSpan) {
+ // Resets id and progress to invalidate spell check span
mSpellCheckSpans[i].setSpellCheckInProgress(false);
mIds[i] = -1;
return;
@@ -211,6 +220,9 @@ public class SpellChecker implements SpellCheckerSessionListener {
}
public void spellCheck(int start, int end) {
+ if (DBG) {
+ Log.d(TAG, "Start spell-checking: " + start + ", " + end);
+ }
final Locale locale = mTextView.getTextServicesLocale();
final boolean isSessionActive = isSessionActive();
if (mCurrentLocale == null || (!(mCurrentLocale.equals(locale)))) {
@@ -238,6 +250,9 @@ public class SpellChecker implements SpellCheckerSessionListener {
}
}
+ if (DBG) {
+ Log.d(TAG, "new spell parser.");
+ }
// No available parser found in pool, create a new one
SpellParser[] newSpellParsers = new SpellParser[length + 1];
System.arraycopy(mSpellParsers, 0, newSpellParsers, 0, length);
@@ -260,13 +275,22 @@ public class SpellChecker implements SpellCheckerSessionListener {
for (int i = 0; i < mLength; i++) {
final SpellCheckSpan spellCheckSpan = mSpellCheckSpans[i];
- if (spellCheckSpan.isSpellCheckInProgress()) continue;
+ if (mIds[i] < 0 || spellCheckSpan.isSpellCheckInProgress()) continue;
final int start = editable.getSpanStart(spellCheckSpan);
final int end = editable.getSpanEnd(spellCheckSpan);
// Do not check this word if the user is currently editing it
- if (start >= 0 && end > start && (selectionEnd < start || selectionStart > end)) {
+ final boolean isEditing;
+ if (mIsSentenceSpellCheckSupported) {
+ // Allow the overlap of the cursor and the first boundary of the spell check span
+ // no to skip the spell check of the following word because the
+ // following word will never be spell-checked even if the user finishes composing
+ isEditing = selectionEnd <= start || selectionStart > end;
+ } else {
+ isEditing = selectionEnd < start || selectionStart > end;
+ }
+ if (start >= 0 && end > start && isEditing) {
final String word = (editable instanceof SpannableStringBuilder) ?
((SpannableStringBuilder) editable).substring(start, end) :
editable.subSequence(start, end).toString();
@@ -372,6 +396,9 @@ public class SpellChecker implements SpellCheckerSessionListener {
}
private void scheduleNewSpellCheck() {
+ if (DBG) {
+ Log.i(TAG, "schedule new spell check.");
+ }
if (mSpellRunnable == null) {
mSpellRunnable = new Runnable() {
@Override
@@ -423,6 +450,20 @@ public class SpellChecker implements SpellCheckerSessionListener {
SuggestionSpan suggestionSpan = new SuggestionSpan(mTextView.getContext(), suggestions,
SuggestionSpan.FLAG_EASY_CORRECT | SuggestionSpan.FLAG_MISSPELLED);
+ // TODO: Remove mIsSentenceSpellCheckSupported by extracting an interface
+ // to share the logic of word level spell checker and sentence level spell checker
+ if (mIsSentenceSpellCheckSupported) {
+ final long key = TextUtils.packRangeInLong(start, end);
+ final SuggestionSpan tempSuggestionSpan = mSuggestionSpanCache.get(key);
+ if (tempSuggestionSpan != null) {
+ if (DBG) {
+ Log.i(TAG, "Cached span on the same position is cleard. "
+ + editable.subSequence(start, end));
+ }
+ editable.removeSpan(tempSuggestionSpan);
+ }
+ mSuggestionSpanCache.put(key, suggestionSpan);
+ }
editable.setSpan(suggestionSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextView.invalidateRegion(start, end, false /* No cursor involved */);
@@ -447,10 +488,17 @@ public class SpellChecker implements SpellCheckerSessionListener {
}
private void setRangeSpan(Editable editable, int start, int end) {
+ if (DBG) {
+ Log.d(TAG, "set next range span: " + start + ", " + end);
+ }
editable.setSpan(mRange, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
private void removeRangeSpan(Editable editable) {
+ if (DBG) {
+ Log.d(TAG, "Remove range span." + editable.getSpanStart(editable)
+ + editable.getSpanEnd(editable));
+ }
editable.removeSpan(mRange);
}
@@ -484,6 +532,9 @@ public class SpellChecker implements SpellCheckerSessionListener {
wordEnd = mWordIterator.getEnd(wordStart);
}
if (wordEnd == BreakIterator.DONE) {
+ if (DBG) {
+ Log.i(TAG, "No more spell check.");
+ }
removeRangeSpan(editable);
return;
}
@@ -499,47 +550,72 @@ public class SpellChecker implements SpellCheckerSessionListener {
boolean scheduleOtherSpellCheck = false;
if (mIsSentenceSpellCheckSupported) {
- int regionEnd;
if (wordIteratorWindowEnd < end) {
+ if (DBG) {
+ Log.i(TAG, "schedule other spell check.");
+ }
// Several batches needed on that region. Cut after last previous word
- regionEnd = mWordIterator.preceding(wordIteratorWindowEnd);
scheduleOtherSpellCheck = true;
- } else {
- regionEnd = mWordIterator.preceding(end);
}
- boolean correct = regionEnd != BreakIterator.DONE;
+ int spellCheckEnd = mWordIterator.preceding(wordIteratorWindowEnd);
+ boolean correct = spellCheckEnd != BreakIterator.DONE;
if (correct) {
- regionEnd = mWordIterator.getEnd(regionEnd);
- correct = regionEnd != BreakIterator.DONE;
+ spellCheckEnd = mWordIterator.getEnd(spellCheckEnd);
+ correct = spellCheckEnd != BreakIterator.DONE;
}
if (!correct) {
- editable.removeSpan(mRange);
- return;
- }
- // Stop spell checking when there are no characters in the range.
- if (wordEnd < start) {
- return;
- }
- // TODO: Find the start position of the sentence.
- final int spellCheckStart = wordStart;
- if (regionEnd <= spellCheckStart) {
+ if (DBG) {
+ Log.i(TAG, "Incorrect range span.");
+ }
+ removeRangeSpan(editable);
return;
}
- final int selectionStart = Selection.getSelectionStart(editable);
- final int selectionEnd = Selection.getSelectionEnd(editable);
- if (DBG) {
- Log.d(TAG, "addSpellCheckSpan: "
- + editable.subSequence(spellCheckStart, regionEnd)
- + ", regionEnd = " + regionEnd + ", spellCheckStart = "
- + spellCheckStart + ", sel start = " + selectionStart + ", sel end ="
- + selectionEnd);
- }
- // Do not check this word if the user is currently editing it
- if (spellCheckStart >= 0 && regionEnd > spellCheckStart
- && (selectionEnd < spellCheckStart || selectionStart > regionEnd)) {
- addSpellCheckSpan(editable, spellCheckStart, regionEnd);
- }
- wordStart = regionEnd;
+ do {
+ // TODO: Find the start position of the sentence.
+ int spellCheckStart = wordStart;
+ boolean createSpellCheckSpan = true;
+ // Cancel or merge overlapped spell check spans
+ for (int i = 0; i < mLength; ++i) {
+ final SpellCheckSpan spellCheckSpan = mSpellCheckSpans[i];
+ if (mIds[i] < 0 || spellCheckSpan.isSpellCheckInProgress()) {
+ continue;
+ }
+ final int spanStart = editable.getSpanStart(spellCheckSpan);
+ final int spanEnd = editable.getSpanEnd(spellCheckSpan);
+ if (spanEnd < spellCheckStart || spellCheckEnd < spanStart) {
+ // No need to merge
+ continue;
+ }
+ if (spanStart <= spellCheckStart && spellCheckEnd <= spanEnd) {
+ // There is a completely overlapped spell check span
+ // skip this span
+ createSpellCheckSpan = false;
+ if (DBG) {
+ Log.i(TAG, "The range is overrapped. Skip spell check.");
+ }
+ break;
+ }
+ removeSpellCheckSpan(spellCheckSpan);
+ spellCheckStart = Math.min(spanStart, spellCheckStart);
+ spellCheckEnd = Math.max(spanEnd, spellCheckEnd);
+ }
+
+ if (DBG) {
+ Log.d(TAG, "addSpellCheckSpan: "
+ + ", End = " + spellCheckEnd + ", Start = " + spellCheckStart
+ + ", next = " + scheduleOtherSpellCheck + "\n"
+ + editable.subSequence(spellCheckStart, spellCheckEnd));
+ }
+
+ // Stop spell checking when there are no characters in the range.
+ if (spellCheckEnd < start) {
+ break;
+ }
+ if (createSpellCheckSpan) {
+ addSpellCheckSpan(editable, spellCheckStart, spellCheckEnd);
+ }
+ } while (false);
+ wordStart = spellCheckEnd;
} else {
while (wordStart <= end) {
if (wordEnd >= start && wordEnd > wordStart) {
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index ba814d325bd1..8c81343e11ca 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -1512,6 +1512,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
/**
* Returns the start padding of the view, plus space for the start
* Drawable if any.
+ * @hide
*/
public int getCompoundPaddingStart() {
resolveDrawables();
@@ -1527,6 +1528,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
/**
* Returns the end padding of the view, plus space for the end
* Drawable if any.
+ * @hide
*/
public int getCompoundPaddingEnd() {
resolveDrawables();
@@ -1624,6 +1626,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
/**
* Returns the total start padding of the view, including the start
* Drawable if any.
+ * @hide
*/
public int getTotalPaddingStart() {
return getCompoundPaddingStart();
@@ -1632,6 +1635,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
/**
* Returns the total end padding of the view, including the end
* Drawable if any.
+ * @hide
*/
public int getTotalPaddingEnd() {
return getCompoundPaddingEnd();
@@ -1834,6 +1838,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
* @attr ref android.R.styleable#TextView_drawableTop
* @attr ref android.R.styleable#TextView_drawableEnd
* @attr ref android.R.styleable#TextView_drawableBottom
+ * @hide
*/
public void setCompoundDrawablesRelative(Drawable start, Drawable top,
Drawable end, Drawable bottom) {
@@ -1955,6 +1960,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
* @attr ref android.R.styleable#TextView_drawableTop
* @attr ref android.R.styleable#TextView_drawableEnd
* @attr ref android.R.styleable#TextView_drawableBottom
+ * @hide
*/
@android.view.RemotableViewMethod
public void setCompoundDrawablesRelativeWithIntrinsicBounds(int start, int top, int end,
@@ -1978,6 +1984,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
* @attr ref android.R.styleable#TextView_drawableTop
* @attr ref android.R.styleable#TextView_drawableEnd
* @attr ref android.R.styleable#TextView_drawableBottom
+ * @hide
*/
public void setCompoundDrawablesRelativeWithIntrinsicBounds(Drawable start, Drawable top,
Drawable end, Drawable bottom) {
@@ -2024,6 +2031,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
* @attr ref android.R.styleable#TextView_drawableTop
* @attr ref android.R.styleable#TextView_drawableEnd
* @attr ref android.R.styleable#TextView_drawableBottom
+ * @hide
*/
public Drawable[] getCompoundDrawablesRelative() {
final Drawables dr = mDrawables;
@@ -4543,6 +4551,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
+ /**
+ * @hide
+ */
@Override
public int getResolvedLayoutDirection(Drawable who) {
if (who == null) return View.LAYOUT_DIRECTION_LTR;
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index ed711f3ecc27..2cbd9cc90287 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -39,8 +39,8 @@ import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
-import android.os.Build;
import android.os.Handler;
+import android.util.Log;
import android.util.TypedValue;
import android.view.ActionMode;
import android.view.ContextThemeWrapper;
@@ -110,10 +110,14 @@ public class ActionBarImpl extends ActionBar {
private int mCurWindowVisibility = View.VISIBLE;
+ private boolean mHiddenByApp;
+ private boolean mHiddenBySystem;
+ private boolean mShowingForMode;
+
+ private boolean mNowShowing = true;
+
private Animator mCurrentShowAnim;
- private Animator mCurrentModeAnim;
private boolean mShowHideAnimationEnabled;
- boolean mWasHiddenBeforeMode;
final AnimatorListener mHideListener = new AnimatorListenerAdapter() {
@Override
@@ -129,6 +133,9 @@ public class ActionBarImpl extends ActionBar {
mContainerView.setTransitioning(false);
mCurrentShowAnim = null;
completeDeferredDestroyActionMode();
+ if (mOverlayLayout != null) {
+ mOverlayLayout.requestFitSystemWindows();
+ }
}
};
@@ -430,16 +437,13 @@ public class ActionBarImpl extends ActionBar {
}
public ActionMode startActionMode(ActionMode.Callback callback) {
- boolean wasHidden = false;
if (mActionMode != null) {
- wasHidden = mWasHiddenBeforeMode;
mActionMode.finish();
}
mContextView.killMode();
ActionModeImpl mode = new ActionModeImpl(callback);
if (mode.dispatchOnCreate()) {
- mWasHiddenBeforeMode = !isShowing() || wasHidden;
mode.invalidate();
mContextView.initForMode(mode);
animateToMode(true);
@@ -584,21 +588,91 @@ public class ActionBarImpl extends ActionBar {
@Override
public void show() {
- show(true, false);
+ if (mHiddenByApp) {
+ mHiddenByApp = false;
+ updateVisibility(false);
+ }
}
- public void show(boolean markHiddenBeforeMode, boolean alwaysAnimate) {
+ private void showForActionMode() {
+ if (!mShowingForMode) {
+ mShowingForMode = true;
+ if (mOverlayLayout != null) {
+ mOverlayLayout.setShowingForActionMode(true);
+ }
+ updateVisibility(false);
+ }
+ }
+
+ public void showForSystem() {
+ if (mHiddenBySystem) {
+ mHiddenBySystem = false;
+ updateVisibility(true);
+ }
+ }
+
+ @Override
+ public void hide() {
+ if (!mHiddenByApp) {
+ mHiddenByApp = true;
+ updateVisibility(false);
+ }
+ }
+
+ private void hideForActionMode() {
+ if (mShowingForMode) {
+ mShowingForMode = false;
+ if (mOverlayLayout != null) {
+ mOverlayLayout.setShowingForActionMode(false);
+ }
+ updateVisibility(false);
+ }
+ }
+
+ public void hideForSystem() {
+ if (!mHiddenBySystem) {
+ mHiddenBySystem = true;
+ updateVisibility(true);
+ }
+ }
+
+ private static boolean checkShowingFlags(boolean hiddenByApp, boolean hiddenBySystem,
+ boolean showingForMode) {
+ if (showingForMode) {
+ return true;
+ } else if (hiddenByApp || hiddenBySystem) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ private void updateVisibility(boolean fromSystem) {
+ // Based on the current state, should we be hidden or shown?
+ final boolean shown = checkShowingFlags(mHiddenByApp, mHiddenBySystem,
+ mShowingForMode);
+
+ if (shown) {
+ if (!mNowShowing) {
+ mNowShowing = true;
+ doShow(fromSystem);
+ }
+ } else {
+ if (mNowShowing) {
+ mNowShowing = false;
+ doHide(fromSystem);
+ }
+ }
+ }
+
+ public void doShow(boolean fromSystem) {
if (mCurrentShowAnim != null) {
mCurrentShowAnim.end();
}
- if (mTopVisibilityView.getVisibility() == View.VISIBLE) {
- if (markHiddenBeforeMode) mWasHiddenBeforeMode = false;
- return;
- }
mTopVisibilityView.setVisibility(View.VISIBLE);
if (mCurWindowVisibility == View.VISIBLE && (mShowHideAnimationEnabled
- || alwaysAnimate)) {
+ || fromSystem)) {
mTopVisibilityView.setAlpha(0);
mTopVisibilityView.setTranslationY(-mTopVisibilityView.getHeight());
AnimatorSet anim = new AnimatorSet();
@@ -617,6 +691,18 @@ public class ActionBarImpl extends ActionBar {
}
anim.setInterpolator(AnimationUtils.loadInterpolator(mContext,
com.android.internal.R.interpolator.decelerate_quad));
+ anim.setDuration(mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_mediumAnimTime));
+ // If this is being shown from the system, add a small delay.
+ // This is because we will also be animating in the status bar,
+ // and these two elements can't be done in lock-step. So we give
+ // a little time for the status bar to start its animation before
+ // the action bar animates. (This corresponds to the corresponding
+ // case when hiding, where the status bar has a small delay before
+ // starting.)
+ if (fromSystem) {
+ anim.setStartDelay(100);
+ }
anim.addListener(mShowListener);
mCurrentShowAnim = anim;
anim.start();
@@ -625,23 +711,18 @@ public class ActionBarImpl extends ActionBar {
mContainerView.setTranslationY(0);
mShowListener.onAnimationEnd(null);
}
+ if (mOverlayLayout != null) {
+ mOverlayLayout.requestFitSystemWindows();
+ }
}
- @Override
- public void hide() {
- hide(false);
- }
-
- public void hide(boolean alwaysAnimate) {
+ public void doHide(boolean fromSystem) {
if (mCurrentShowAnim != null) {
mCurrentShowAnim.end();
}
- if (mTopVisibilityView.getVisibility() == View.GONE) {
- return;
- }
if (mCurWindowVisibility == View.VISIBLE && (mShowHideAnimationEnabled
- || alwaysAnimate)) {
+ || fromSystem)) {
mTopVisibilityView.setAlpha(1);
mContainerView.setTransitioning(true);
AnimatorSet anim = new AnimatorSet();
@@ -660,6 +741,8 @@ public class ActionBarImpl extends ActionBar {
}
anim.setInterpolator(AnimationUtils.loadInterpolator(mContext,
com.android.internal.R.interpolator.accelerate_quad));
+ anim.setDuration(mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_mediumAnimTime));
anim.addListener(mHideListener);
mCurrentShowAnim = anim;
anim.start();
@@ -669,15 +752,18 @@ public class ActionBarImpl extends ActionBar {
}
public boolean isShowing() {
- return mTopVisibilityView.getVisibility() == View.VISIBLE;
+ return mNowShowing;
+ }
+
+ public boolean isSystemShowing() {
+ return !mHiddenBySystem;
}
void animateToMode(boolean toActionMode) {
if (toActionMode) {
- show(false, false);
- }
- if (mCurrentModeAnim != null) {
- mCurrentModeAnim.end();
+ showForActionMode();
+ } else {
+ hideForActionMode();
}
mActionView.animateToVisibility(toActionMode ? View.GONE : View.VISIBLE);
@@ -736,11 +822,13 @@ public class ActionBarImpl extends ActionBar {
return;
}
- // If we were hidden before the mode was shown, defer the onDestroy
- // callback until the animation is finished and associated relayout
- // is about to happen. This lets apps better anticipate visibility
- // and layout behavior.
- if (mWasHiddenBeforeMode) {
+ // If this change in state is going to cause the action bar
+ // to be hidden, defer the onDestroy callback until the animation
+ // is finished and associated relayout is about to happen. This lets
+ // apps better anticipate visibility and layout behavior.
+ if (!checkShowingFlags(mHiddenByApp, mHiddenBySystem, false)) {
+ // With the current state but the action bar hidden, our
+ // overall showing state is going to be false.
mDeferredDestroyActionMode = this;
mDeferredModeDestroyCallback = mCallback;
} else {
@@ -754,10 +842,6 @@ public class ActionBarImpl extends ActionBar {
mActionView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
mActionMode = null;
-
- if (mWasHiddenBeforeMode) {
- hide();
- }
}
@Override
@@ -817,6 +901,7 @@ public class ActionBarImpl extends ActionBar {
@Override
public void setTitleOptionalHint(boolean titleOptional) {
+ super.setTitleOptionalHint(titleOptional);
mContextView.setTitleOptional(titleOptional);
}
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 51bbdf19b2dd..4f2afa71365d 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -19,15 +19,17 @@ package com.android.internal.app;
import com.android.internal.R;
import com.android.internal.content.PackageMonitor;
+import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.LabeledIntent;
import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
@@ -38,8 +40,8 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
+import android.widget.Button;
+import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
@@ -56,12 +58,19 @@ import java.util.Set;
* which there is more than one matching activity, allowing the user to decide
* which to go to. It is not normally used directly by application developers.
*/
-public class ResolverActivity extends AlertActivity implements
- DialogInterface.OnClickListener, CheckBox.OnCheckedChangeListener {
+public class ResolverActivity extends AlertActivity implements AdapterView.OnItemClickListener {
+ private static final String TAG = "ResolverActivity";
+
private ResolveListAdapter mAdapter;
- private CheckBox mAlwaysCheck;
- private TextView mClearDefaultHint;
private PackageManager mPm;
+ private boolean mAlwaysUseOption;
+ private boolean mShowExtended;
+ private GridView mGrid;
+ private Button mAlwaysButton;
+ private Button mOnceButton;
+ private int mIconDpi;
+ private int mIconSize;
+ private int mMaxColumns;
private boolean mRegistered;
private final PackageMonitor mPackageMonitor = new PackageMonitor() {
@@ -91,33 +100,38 @@ public class ResolverActivity extends AlertActivity implements
protected void onCreate(Bundle savedInstanceState, Intent intent,
CharSequence title, Intent[] initialIntents, List<ResolveInfo> rList,
boolean alwaysUseOption) {
+ setTheme(R.style.Theme_DeviceDefault_Light_Dialog_Alert);
super.onCreate(savedInstanceState);
mPm = getPackageManager();
+ mAlwaysUseOption = alwaysUseOption;
+ mMaxColumns = getResources().getInteger(R.integer.config_maxResolverActivityColumns);
intent.setComponent(null);
AlertController.AlertParams ap = mAlertParams;
ap.mTitle = title;
- ap.mOnClickListener = this;
mPackageMonitor.register(this, getMainLooper(), false);
mRegistered = true;
- if (alwaysUseOption) {
- LayoutInflater inflater = (LayoutInflater) getSystemService(
- Context.LAYOUT_INFLATER_SERVICE);
- ap.mView = inflater.inflate(R.layout.always_use_checkbox, null);
- mAlwaysCheck = (CheckBox)ap.mView.findViewById(com.android.internal.R.id.alwaysUse);
- mAlwaysCheck.setText(R.string.alwaysUse);
- mAlwaysCheck.setOnCheckedChangeListener(this);
- mClearDefaultHint = (TextView)ap.mView.findViewById(
- com.android.internal.R.id.clearDefaultHint);
- mClearDefaultHint.setVisibility(View.GONE);
- }
+ final ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
+ mIconDpi = am.getLauncherLargeIconDensity();
+ mIconSize = am.getLauncherLargeIconSize();
+
mAdapter = new ResolveListAdapter(this, intent, initialIntents, rList);
int count = mAdapter.getCount();
if (count > 1) {
- ap.mAdapter = mAdapter;
+ ap.mView = getLayoutInflater().inflate(R.layout.resolver_grid, null);
+ mGrid = (GridView) ap.mView.findViewById(R.id.resolver_grid);
+ mGrid.setAdapter(mAdapter);
+ mGrid.setOnItemClickListener(this);
+ mGrid.setOnItemLongClickListener(new ItemLongClickListener());
+
+ if (alwaysUseOption) {
+ mGrid.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+ }
+
+ resizeGrid();
} else if (count == 1) {
startActivity(mAdapter.intentForPosition(0));
mPackageMonitor.unregister();
@@ -125,17 +139,57 @@ public class ResolverActivity extends AlertActivity implements
finish();
return;
} else {
- ap.mMessage = getResources().getText(com.android.internal.R.string.noApplications);
+ ap.mMessage = getResources().getText(R.string.noApplications);
}
setupAlert();
- ListView lv = mAlert.getListView();
- if (lv != null) {
- lv.setOnItemLongClickListener(new ItemLongClickListener());
+ if (alwaysUseOption) {
+ final ViewGroup buttonLayout = (ViewGroup) findViewById(R.id.button_bar);
+ buttonLayout.setVisibility(View.VISIBLE);
+ mAlwaysButton = (Button) buttonLayout.findViewById(R.id.button_always);
+ mOnceButton = (Button) buttonLayout.findViewById(R.id.button_once);
}
}
+ void resizeGrid() {
+ final int itemCount = mAdapter.getCount();
+ mGrid.setNumColumns(Math.min(itemCount, mMaxColumns));
+ }
+
+ Drawable getIcon(Resources res, int resId) {
+ Drawable result;
+ try {
+ result = res.getDrawableForDensity(resId, mIconDpi);
+ } catch (Resources.NotFoundException e) {
+ result = null;
+ }
+
+ return result;
+ }
+
+ Drawable loadIconForResolveInfo(ResolveInfo ri) {
+ Drawable dr;
+ try {
+ if (ri.resolvePackageName != null && ri.icon != 0) {
+ dr = getIcon(mPm.getResourcesForApplication(ri.resolvePackageName), ri.icon);
+ if (dr != null) {
+ return dr;
+ }
+ }
+ final int iconRes = ri.getIconResource();
+ if (iconRes != 0) {
+ dr = getIcon(mPm.getResourcesForApplication(ri.activityInfo.packageName), iconRes);
+ if (dr != null) {
+ return dr;
+ }
+ }
+ } catch (NameNotFoundException e) {
+ Log.e(TAG, "Couldn't find resources for package", e);
+ }
+ return ri.loadIcon(mPm);
+ }
+
@Override
protected void onRestart() {
super.onRestart();
@@ -155,11 +209,28 @@ public class ResolverActivity extends AlertActivity implements
}
}
- public void onClick(DialogInterface dialog, int which) {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ if (mAlwaysUseOption) {
+ final int checkedPos = mGrid.getCheckedItemPosition();
+ final boolean enabled = checkedPos != GridView.INVALID_POSITION;
+ mAlwaysButton.setEnabled(enabled);
+ mOnceButton.setEnabled(enabled);
+ } else {
+ startSelected(position, false);
+ }
+ }
+
+ public void onButtonClick(View v) {
+ final int id = v.getId();
+ startSelected(mGrid.getCheckedItemPosition(), id == R.id.button_always);
+ dismiss();
+ }
+
+ void startSelected(int which, boolean always) {
ResolveInfo ri = mAdapter.resolveInfoForPosition(which);
Intent intent = mAdapter.intentForPosition(which);
- boolean alwaysCheck = (mAlwaysCheck != null && mAlwaysCheck.isChecked());
- onIntentSelected(ri, intent, alwaysCheck);
+ onIntentSelected(ri, intent, always);
finish();
}
@@ -249,6 +320,12 @@ public class ResolverActivity extends AlertActivity implements
}
}
+ void showAppDetails(ResolveInfo ri) {
+ Intent in = new Intent().setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
+ .setData(Uri.fromParts("package", ri.activityInfo.packageName, null));
+ startActivity(in);
+ }
+
private final class DisplayResolveInfo {
ResolveInfo ri;
CharSequence displayLabel;
@@ -285,12 +362,18 @@ public class ResolverActivity extends AlertActivity implements
}
public void handlePackagesChanged() {
+ final int oldItemCount = getCount();
rebuildList();
notifyDataSetChanged();
if (mList.size() <= 0) {
// We no longer have any items... just finish the activity.
finish();
}
+
+ final int newItemCount = getCount();
+ if (newItemCount != oldItemCount) {
+ resizeGrid();
+ }
}
private void rebuildList() {
@@ -299,7 +382,7 @@ public class ResolverActivity extends AlertActivity implements
} else {
mCurrentResolveList = mPm.queryIntentActivities(
mIntent, PackageManager.MATCH_DEFAULT_ONLY
- | (mAlwaysCheck != null ? PackageManager.GET_RESOLVED_FILTER : 0));
+ | (mAlwaysUseOption ? PackageManager.GET_RESOLVED_FILTER : 0));
}
int N;
if ((mCurrentResolveList != null) && ((N = mCurrentResolveList.size()) > 0)) {
@@ -363,6 +446,7 @@ public class ResolverActivity extends AlertActivity implements
r0 = mCurrentResolveList.get(0);
int start = 0;
CharSequence r0Label = r0.loadLabel(mPm);
+ mShowExtended = false;
for (int i = 1; i < N; i++) {
if (r0Label == null) {
r0Label = r0.activityInfo.packageName;
@@ -393,6 +477,7 @@ public class ResolverActivity extends AlertActivity implements
// No duplicate labels. Use label for entry at start
mList.add(new DisplayResolveInfo(ro, roLabel, null, null));
} else {
+ mShowExtended = true;
boolean usePkg = false;
CharSequence startApp = ro.activityInfo.applicationInfo.loadLabel(mPm);
if (startApp == null) {
@@ -473,6 +558,11 @@ public class ResolverActivity extends AlertActivity implements
if (convertView == null) {
view = mInflater.inflate(
com.android.internal.R.layout.resolve_list_item, parent, false);
+
+ // Fix the icon size even if we have different sized resources
+ ImageView icon = (ImageView)view.findViewById(R.id.icon);
+ ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) icon.getLayoutParams();
+ lp.width = lp.height = mIconSize;
} else {
view = convertView;
}
@@ -485,37 +575,25 @@ public class ResolverActivity extends AlertActivity implements
TextView text2 = (TextView)view.findViewById(com.android.internal.R.id.text2);
ImageView icon = (ImageView)view.findViewById(R.id.icon);
text.setText(info.displayLabel);
- if (info.extendedInfo != null) {
+ if (mShowExtended) {
text2.setVisibility(View.VISIBLE);
text2.setText(info.extendedInfo);
} else {
text2.setVisibility(View.GONE);
}
if (info.displayIcon == null) {
- info.displayIcon = info.ri.loadIcon(mPm);
+ info.displayIcon = loadIconForResolveInfo(info.ri);
}
icon.setImageDrawable(info.displayIcon);
}
}
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- if (mClearDefaultHint == null) return;
-
- if(isChecked) {
- mClearDefaultHint.setVisibility(View.VISIBLE);
- } else {
- mClearDefaultHint.setVisibility(View.GONE);
- }
- }
-
class ItemLongClickListener implements AdapterView.OnItemLongClickListener {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
ResolveInfo ri = mAdapter.resolveInfoForPosition(position);
- Intent in = new Intent().setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
- .setData(Uri.fromParts("package", ri.activityInfo.packageName, null));
- startActivity(in);
+ showAppDetails(ri);
return true;
}
diff --git a/core/java/com/android/internal/net/NetworkStatsFactory.java b/core/java/com/android/internal/net/NetworkStatsFactory.java
index d59585f2fe98..8b222f02a3ca 100644
--- a/core/java/com/android/internal/net/NetworkStatsFactory.java
+++ b/core/java/com/android/internal/net/NetworkStatsFactory.java
@@ -24,20 +24,12 @@ import static com.android.server.NetworkManagementSocketTagger.kernelToTag;
import android.net.NetworkStats;
import android.os.StrictMode;
import android.os.SystemClock;
-import android.util.Slog;
import com.android.internal.util.ProcFileReader;
-import com.google.android.collect.Lists;
-import com.google.android.collect.Sets;
-import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileReader;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.StringTokenizer;
import libcore.io.IoUtils;
@@ -50,14 +42,10 @@ public class NetworkStatsFactory {
// TODO: consider moving parsing to native code
- /** Path to {@code /proc/net/dev}. */
- @Deprecated
- private final File mStatsIface;
- /** Path to {@code /proc/net/xt_qtaguid/iface_stat}. */
- @Deprecated
- private final File mStatsXtIface;
/** Path to {@code /proc/net/xt_qtaguid/iface_stat_all}. */
private final File mStatsXtIfaceAll;
+ /** Path to {@code /proc/net/xt_qtaguid/iface_stat_fmt}. */
+ private final File mStatsXtIfaceFmt;
/** Path to {@code /proc/net/xt_qtaguid/stats}. */
private final File mStatsXtUid;
@@ -67,28 +55,20 @@ public class NetworkStatsFactory {
// @VisibleForTesting
public NetworkStatsFactory(File procRoot) {
- mStatsIface = new File(procRoot, "net/dev");
- mStatsXtUid = new File(procRoot, "net/xt_qtaguid/stats");
- mStatsXtIface = new File(procRoot, "net/xt_qtaguid/iface_stat");
mStatsXtIfaceAll = new File(procRoot, "net/xt_qtaguid/iface_stat_all");
+ mStatsXtIfaceFmt = new File(procRoot, "net/xt_qtaguid/iface_stat_fmt");
+ mStatsXtUid = new File(procRoot, "net/xt_qtaguid/stats");
}
/**
- * Parse and return interface-level summary {@link NetworkStats}. Values
- * monotonically increase since device boot, and may include details about
- * inactive interfaces.
+ * Parse and return interface-level summary {@link NetworkStats} measured
+ * using {@code /proc/net/dev} style hooks, which may include non IP layer
+ * traffic. Values monotonically increase since device boot, and may include
+ * details about inactive interfaces.
*
* @throws IllegalStateException when problem parsing stats.
*/
- public NetworkStats readNetworkStatsSummary() throws IllegalStateException {
- if (mStatsXtIfaceAll.exists()) {
- return readNetworkStatsSummarySingleFile();
- } else {
- return readNetworkStatsSummaryMultipleFiles();
- }
- }
-
- private NetworkStats readNetworkStatsSummarySingleFile() {
+ public NetworkStats readNetworkStatsSummaryDev() throws IllegalStateException {
final StrictMode.ThreadPolicy savedPolicy = StrictMode.allowThreadDiskReads();
final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 6);
@@ -137,79 +117,40 @@ public class NetworkStatsFactory {
}
/**
- * @deprecated remove once {@code iface_stat_all} is merged to all kernels.
+ * Parse and return interface-level summary {@link NetworkStats}. Designed
+ * to return only IP layer traffic. Values monotonically increase since
+ * device boot, and may include details about inactive interfaces.
+ *
+ * @throws IllegalStateException when problem parsing stats.
*/
- @Deprecated
- private NetworkStats readNetworkStatsSummaryMultipleFiles() {
+ public NetworkStats readNetworkStatsSummaryXt() throws IllegalStateException {
final StrictMode.ThreadPolicy savedPolicy = StrictMode.allowThreadDiskReads();
+ // return null when kernel doesn't support
+ if (!mStatsXtIfaceFmt.exists()) return null;
+
final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 6);
final NetworkStats.Entry entry = new NetworkStats.Entry();
- final HashSet<String> knownIfaces = Sets.newHashSet();
- final HashSet<String> activeIfaces = Sets.newHashSet();
-
- // collect any historical stats and active state
- for (String iface : fileListWithoutNull(mStatsXtIface)) {
- final File ifacePath = new File(mStatsXtIface, iface);
-
- final long active = readSingleLongFromFile(new File(ifacePath, "active"));
- if (active == 1) {
- knownIfaces.add(iface);
- activeIfaces.add(iface);
- } else if (active == 0) {
- knownIfaces.add(iface);
- } else {
- continue;
- }
-
- entry.iface = iface;
- entry.uid = UID_ALL;
- entry.set = SET_ALL;
- entry.tag = TAG_NONE;
- entry.rxBytes = readSingleLongFromFile(new File(ifacePath, "rx_bytes"));
- entry.rxPackets = readSingleLongFromFile(new File(ifacePath, "rx_packets"));
- entry.txBytes = readSingleLongFromFile(new File(ifacePath, "tx_bytes"));
- entry.txPackets = readSingleLongFromFile(new File(ifacePath, "tx_packets"));
+ ProcFileReader reader = null;
+ try {
+ // open and consume header line
+ reader = new ProcFileReader(new FileInputStream(mStatsXtIfaceFmt));
+ reader.finishLine();
- stats.addValues(entry);
- }
+ while (reader.hasMoreData()) {
+ entry.iface = reader.nextString();
+ entry.uid = UID_ALL;
+ entry.set = SET_ALL;
+ entry.tag = TAG_NONE;
- final ArrayList<String> values = Lists.newArrayList();
+ entry.rxBytes = reader.nextLong();
+ entry.rxPackets = reader.nextLong();
+ entry.txBytes = reader.nextLong();
+ entry.txPackets = reader.nextLong();
- BufferedReader reader = null;
- try {
- reader = new BufferedReader(new FileReader(mStatsIface));
-
- // skip first two header lines
- reader.readLine();
- reader.readLine();
-
- // parse remaining lines
- String line;
- while ((line = reader.readLine()) != null) {
- splitLine(line, values);
-
- try {
- entry.iface = values.get(0);
- entry.uid = UID_ALL;
- entry.set = SET_ALL;
- entry.tag = TAG_NONE;
- entry.rxBytes = Long.parseLong(values.get(1));
- entry.rxPackets = Long.parseLong(values.get(2));
- entry.txBytes = Long.parseLong(values.get(9));
- entry.txPackets = Long.parseLong(values.get(10));
-
- if (activeIfaces.contains(entry.iface)) {
- // combine stats when iface is active
- stats.combineValues(entry);
- } else if (!knownIfaces.contains(entry.iface)) {
- // add stats when iface is unknown
- stats.addValues(entry);
- }
- } catch (NumberFormatException e) {
- Slog.w(TAG, "problem parsing stats row '" + line + "': " + e);
- }
+ stats.addValues(entry);
+ reader.finishLine();
}
} catch (NullPointerException e) {
throw new IllegalStateException("problem parsing stats: " + e);
@@ -221,7 +162,6 @@ public class NetworkStatsFactory {
IoUtils.closeQuietly(reader);
StrictMode.setThreadPolicy(savedPolicy);
}
-
return stats;
}
@@ -286,41 +226,4 @@ public class NetworkStatsFactory {
return stats;
}
-
- /**
- * Split given line into {@link ArrayList}.
- */
- @Deprecated
- private static void splitLine(String line, ArrayList<String> outSplit) {
- outSplit.clear();
-
- final StringTokenizer t = new StringTokenizer(line, " \t\n\r\f:");
- while (t.hasMoreTokens()) {
- outSplit.add(t.nextToken());
- }
- }
-
- /**
- * Utility method to read a single plain-text {@link Long} from the given
- * {@link File}, usually from a {@code /proc/} filesystem.
- */
- private static long readSingleLongFromFile(File file) {
- try {
- final byte[] buffer = IoUtils.readFileAsByteArray(file.toString());
- return Long.parseLong(new String(buffer).trim());
- } catch (NumberFormatException e) {
- return -1;
- } catch (IOException e) {
- return -1;
- }
- }
-
- /**
- * Wrapper for {@link File#list()} that returns empty array instead of
- * {@code null}.
- */
- private static String[] fileListWithoutNull(File file) {
- final String[] list = file.list();
- return list != null ? list : new String[0];
- }
}
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 86118b1d2904..515738555e8e 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -5719,7 +5719,7 @@ public final class BatteryStatsImpl extends BatteryStats {
if (SystemProperties.getBoolean(PROP_QTAGUID_ENABLED, false)) {
try {
- mNetworkSummaryCache = mNetworkStatsFactory.readNetworkStatsSummary();
+ mNetworkSummaryCache = mNetworkStatsFactory.readNetworkStatsSummaryDev();
} catch (IllegalStateException e) {
Log.wtf(TAG, "problem reading network stats", e);
}
diff --git a/core/java/com/android/internal/view/StandaloneActionMode.java b/core/java/com/android/internal/view/StandaloneActionMode.java
index 4b681ec3a44c..fae7ea12fd83 100644
--- a/core/java/com/android/internal/view/StandaloneActionMode.java
+++ b/core/java/com/android/internal/view/StandaloneActionMode.java
@@ -73,6 +73,7 @@ public class StandaloneActionMode extends ActionMode implements MenuBuilder.Call
@Override
public void setTitleOptionalHint(boolean titleOptional) {
+ super.setTitleOptionalHint(titleOptional);
mContextView.setTitleOptional(titleOptional);
}
diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
index d5c2018d2b3a..449194bdfd90 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
@@ -70,8 +70,13 @@ public class ActionMenuItemView extends TextView
setOnClickListener(this);
setOnLongClickListener(this);
- // Save the inflated padding for later, we'll need it.
- mSavedPaddingLeft = getPaddingLeft();
+ mSavedPaddingLeft = -1;
+ }
+
+ @Override
+ public void setPadding(int l, int t, int r, int b) {
+ mSavedPaddingLeft = l;
+ super.setPadding(l, t, r, b);
}
public MenuItemImpl getItemData() {
@@ -217,8 +222,9 @@ public class ActionMenuItemView extends TextView
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final boolean textVisible = hasText();
- if (textVisible) {
- setPadding(mSavedPaddingLeft, getPaddingTop(), getPaddingRight(), getPaddingBottom());
+ if (textVisible && mSavedPaddingLeft >= 0) {
+ super.setPadding(mSavedPaddingLeft, getPaddingTop(),
+ getPaddingRight(), getPaddingBottom());
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
@@ -240,7 +246,7 @@ public class ActionMenuItemView extends TextView
// a little coercion. Pad in to center the icon after we've measured.
final int w = getMeasuredWidth();
final int dw = mIcon.getIntrinsicWidth();
- setPadding((w - dw) / 2, getPaddingTop(), getPaddingRight(), getPaddingBottom());
+ super.setPadding((w - dw) / 2, getPaddingTop(), getPaddingRight(), getPaddingBottom());
}
}
}
diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java
index af67d55016be..f54575b827df 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuView.java
@@ -17,6 +17,7 @@ package com.android.internal.view.menu;
import android.content.Context;
import android.content.res.Configuration;
+import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
@@ -25,6 +26,8 @@ import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.widget.LinearLayout;
+import com.android.internal.R;
+
/**
* @hide
*/
@@ -43,6 +46,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
private int mMinCellSize;
private int mGeneratedItemPadding;
private int mMeasuredExtraWidth;
+ private int mMaxItemHeight;
public ActionMenuView(Context context) {
this(context, null);
@@ -54,6 +58,11 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
final float density = context.getResources().getDisplayMetrics().density;
mMinCellSize = (int) (MIN_CELL_SIZE * density);
mGeneratedItemPadding = (int) (GENERATED_ITEM_PADDING * density);
+
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ActionBar,
+ R.attr.actionBarStyle, 0);
+ mMaxItemHeight = a.getDimensionPixelSize(R.styleable.ActionBar_height, 0);
+ a.recycle();
}
public void setPresenter(ActionMenuPresenter presenter) {
@@ -116,6 +125,11 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
final int widthPadding = getPaddingLeft() + getPaddingRight();
final int heightPadding = getPaddingTop() + getPaddingBottom();
+ final int itemHeightSpec = heightMode == MeasureSpec.EXACTLY
+ ? MeasureSpec.makeMeasureSpec(heightSize - heightPadding, MeasureSpec.EXACTLY)
+ : MeasureSpec.makeMeasureSpec(
+ Math.min(mMaxItemHeight, heightSize - heightPadding), MeasureSpec.AT_MOST);
+
widthSize -= widthPadding;
// Divide the view into cells.
@@ -167,7 +181,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
final int cellsAvailable = lp.isOverflowButton ? 1 : cellsRemaining;
final int cellsUsed = measureChildForCells(child, cellSize, cellsAvailable,
- heightMeasureSpec, heightPadding);
+ itemHeightSpec, heightPadding);
maxCellsUsed = Math.max(maxCellsUsed, cellsUsed);
if (lp.expandable) expandableItemCount++;
@@ -298,7 +312,6 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
// Remeasure any items that have had extra space allocated to them.
if (needsExpansion) {
- int heightSpec = MeasureSpec.makeMeasureSpec(heightSize - heightPadding, heightMode);
for (int i = 0; i < childCount; i++) {
final View child = getChildAt(i);
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
@@ -306,7 +319,8 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
if (!lp.expanded) continue;
final int width = lp.cellsUsed * cellSize + lp.extraPixels;
- child.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), heightSpec);
+ child.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+ itemHeightSpec);
}
}
diff --git a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
index d1652df22afb..a129496f80c2 100644
--- a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
+++ b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
@@ -22,6 +22,7 @@ import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Rect;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
@@ -76,6 +77,26 @@ public class ActionBarOverlayLayout extends FrameLayout {
}
}
+ public void setShowingForActionMode(boolean showing) {
+ if (showing) {
+ // Here's a fun hack: if the status bar is currently being hidden,
+ // and the application has asked for stable content insets, then
+ // we will end up with the action mode action bar being shown
+ // without the status bar, but moved below where the status bar
+ // would be. Not nice. Trying to have this be positioned
+ // correctly is not easy (basically we need yet *another* content
+ // inset from the window manager to know where to put it), so
+ // instead we will just temporarily force the status bar to be shown.
+ if ((getWindowSystemUiVisibility() & (SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | SYSTEM_UI_FLAG_LAYOUT_STABLE))
+ == (SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | SYSTEM_UI_FLAG_LAYOUT_STABLE)) {
+ setDisabledSystemUiVisibility(SYSTEM_UI_FLAG_FULLSCREEN);
+ }
+ } else {
+ setDisabledSystemUiVisibility(0);
+ }
+ }
+
@Override
public void onWindowSystemUiVisibilityChanged(int visible) {
super.onWindowSystemUiVisibilityChanged(visible);
@@ -83,11 +104,13 @@ public class ActionBarOverlayLayout extends FrameLayout {
final int diff = mLastSystemUiVisibility ^ visible;
mLastSystemUiVisibility = visible;
final boolean barVisible = (visible&SYSTEM_UI_FLAG_FULLSCREEN) == 0;
- final boolean wasVisible = mActionBar != null ? mActionBar.isShowing() : true;
- if (barVisible != wasVisible || (diff&SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0) {
+ final boolean wasVisible = mActionBar != null ? mActionBar.isSystemShowing() : true;
+ if (mActionBar != null) {
+ if (barVisible) mActionBar.showForSystem();
+ else mActionBar.hideForSystem();
+ }
+ if ((diff&SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0) {
if (mActionBar != null) {
- if (barVisible) mActionBar.show(true, true);
- else mActionBar.hide(true);
requestFitSystemWindows();
}
}
diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp
index a33b46abb100..2c388935148f 100644
--- a/core/jni/android/graphics/TextLayoutCache.cpp
+++ b/core/jni/android/graphics/TextLayoutCache.cpp
@@ -30,7 +30,7 @@ extern "C" {
namespace android {
//--------------------------------------------------------------------------------------------------
-#define TYPEFACE_ARABIC "/system/fonts/DroidNaskh-Regular-Shift.ttf"
+#define TYPEFACE_ARABIC "/system/fonts/DroidNaskh-Regular-SystemUI.ttf"
#define TYPE_FACE_HEBREW_REGULAR "/system/fonts/DroidSansHebrew-Regular.ttf"
#define TYPE_FACE_HEBREW_BOLD "/system/fonts/DroidSansHebrew-Bold.ttf"
#define TYPEFACE_BENGALI "/system/fonts/Lohit-Bengali.ttf"
@@ -739,18 +739,18 @@ void TextLayoutShaper::computeRunValues(const SkPaint* paint, const UChar* chars
#endif
}
-
-size_t TextLayoutShaper::shapeFontRun(const SkPaint* paint, bool isRTL) {
- // Reset kerning
- mShaperItem.kerning_applied = false;
-
- // Update Harfbuzz Shaper
- mShaperItem.item.bidiLevel = isRTL;
-
- SkTypeface* typeface = paint->getTypeface();
-
+/**
+ * Return the first typeface in the logical change, starting with this typeface,
+ * that contains the specified unichar, or NULL if none is found.
+ *
+ * Note that this function does _not_ increment the reference count on the typeface, as the
+ * assumption is that its lifetime is managed elsewhere - in particular, the fallback typefaces
+ * for the default font live in a global cache.
+ */
+SkTypeface* TextLayoutShaper::typefaceForUnichar(const SkPaint* paint, SkTypeface* typeface,
+ SkUnichar unichar, HB_Script script) {
// Set the correct Typeface depending on the script
- switch (mShaperItem.item.script) {
+ switch (script) {
case HB_Script_Arabic:
typeface = getCachedTypeface(&mArabicTypeface, TYPEFACE_ARABIC);
#if DEBUG_GLYPHS
@@ -815,32 +815,31 @@ size_t TextLayoutShaper::shapeFontRun(const SkPaint* paint, bool isRTL) {
break;
default:
- if (!typeface) {
- typeface = mDefaultTypeface;
-#if DEBUG_GLYPHS
- ALOGD("Using Default Typeface");
-#endif
- } else {
#if DEBUG_GLYPHS
+ if (typeface) {
ALOGD("Using Paint Typeface");
-#endif
}
+#endif
break;
}
+ return typeface;
+}
- mShapingPaint.setTypeface(typeface);
- mShaperItem.face = getCachedHBFace(typeface);
+size_t TextLayoutShaper::shapeFontRun(const SkPaint* paint, bool isRTL) {
+ // Reset kerning
+ mShaperItem.kerning_applied = false;
-#if DEBUG_GLYPHS
- ALOGD("Run typeface = %p, uniqueID = %d, hb_face = %p",
- typeface, typeface->uniqueID(), mShaperItem.face);
-#endif
+ // Update Harfbuzz Shaper
+ mShaperItem.item.bidiLevel = isRTL;
+
+ SkTypeface* typeface = paint->getTypeface();
// Get the glyphs base count for offsetting the glyphIDs returned by Harfbuzz
// This is needed as the Typeface used for shaping can be not the default one
// when we are shaping any script that needs to use a fallback Font.
// If we are a "common" script we dont need to shift
size_t baseGlyphCount = 0;
+ SkUnichar firstUnichar = 0;
switch (mShaperItem.item.script) {
case HB_Script_Arabic:
case HB_Script_Hebrew:
@@ -849,7 +848,11 @@ size_t TextLayoutShaper::shapeFontRun(const SkPaint* paint, bool isRTL) {
case HB_Script_Tamil:
case HB_Script_Thai:{
const uint16_t* text16 = (const uint16_t*)(mShaperItem.string + mShaperItem.item.pos);
- SkUnichar firstUnichar = SkUTF16_NextUnichar(&text16);
+ const uint16_t* text16End = text16 + mShaperItem.item.length;
+ firstUnichar = SkUTF16_NextUnichar(&text16);
+ while (firstUnichar == ' ' && text16 < text16End) {
+ firstUnichar = SkUTF16_NextUnichar(&text16);
+ }
baseGlyphCount = paint->getBaseGlyphCount(firstUnichar);
break;
}
@@ -857,6 +860,25 @@ size_t TextLayoutShaper::shapeFontRun(const SkPaint* paint, bool isRTL) {
break;
}
+ // We test the baseGlyphCount to see if the typeface supports the requested script
+ if (baseGlyphCount != 0) {
+ typeface = typefaceForUnichar(paint, typeface, firstUnichar, mShaperItem.item.script);
+ }
+
+ if (!typeface) {
+ typeface = mDefaultTypeface;
+#if DEBUG_GLYPHS
+ ALOGD("Using Default Typeface");
+#endif
+ }
+ mShapingPaint.setTypeface(typeface);
+ mShaperItem.face = getCachedHBFace(typeface);
+
+#if DEBUG_GLYPHS
+ ALOGD("Run typeface = %p, uniqueID = %d, hb_face = %p",
+ typeface, typeface->uniqueID(), mShaperItem.face);
+#endif
+
// Shape
assert(mShaperItem.item.length > 0); // Harfbuzz will overwrite other memory if length is 0.
ensureShaperItemGlyphArrays(mShaperItem.item.length * 3 / 2);
diff --git a/core/jni/android/graphics/TextLayoutCache.h b/core/jni/android/graphics/TextLayoutCache.h
index 3c834a408854..7d7caacadfa7 100644
--- a/core/jni/android/graphics/TextLayoutCache.h
+++ b/core/jni/android/graphics/TextLayoutCache.h
@@ -217,6 +217,9 @@ private:
*/
UnicodeString mBuffer;
+ SkTypeface* typefaceForUnichar(const SkPaint* paint, SkTypeface* typeface,
+ SkUnichar unichar, HB_Script script);
+
size_t shapeFontRun(const SkPaint* paint, bool isRTL);
void computeValues(const SkPaint* paint, const UChar* chars,
diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp
index 9abfb3afc9fb..eddd8381ec1d 100644
--- a/core/jni/android_hardware_SensorManager.cpp
+++ b/core/jni/android_hardware_SensorManager.cpp
@@ -69,7 +69,7 @@ sensors_module_get_next_sensor(JNIEnv *env, jobject clazz, jobject sensor, jint
jstring vendor = env->NewStringUTF(list->getVendor().string());
env->SetObjectField(sensor, sensorOffsets.name, name);
env->SetObjectField(sensor, sensorOffsets.vendor, vendor);
- env->SetIntField(sensor, sensorOffsets.version, 1);
+ env->SetIntField(sensor, sensorOffsets.version, list->getVersion());
env->SetIntField(sensor, sensorOffsets.handle, list->getHandle());
env->SetIntField(sensor, sensorOffsets.type, list->getType());
env->SetFloatField(sensor, sensorOffsets.range, list->getMaxValue());
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index e1eaf41bd71d..e16e49a1d08f 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -139,16 +139,30 @@
<eat-comment />
<!-- Used for permissions that can be used to make the user spend money
- without their direct involvement. For example, this is the group
- for permissions that allow you to directly place phone calls,
- directly send SMS messages, etc. -->
+ without their direct involvement. -->
<permission-group android:name="android.permission-group.COST_MONEY"
android:label="@string/permgrouplab_costMoney"
android:description="@string/permgroupdesc_costMoney" />
- <!-- Allows an application to send SMS messages. -->
+ <!-- ================================== -->
+ <!-- Permissions for accessing messages -->
+ <!-- ================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that allow an application to send messages
+ on behalf of the user or intercept messages being received by the
+ user. This is primarily intended for SMS/MMS messaging, such as
+ receiving or reading an MMS. -->
+ <permission-group android:name="android.permission-group.MESSAGES"
+ android:label="@string/permgrouplab_messages"
+ android:icon="@drawable/perm_group_messages"
+ android:description="@string/permgroupdesc_messages"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="360"/>
+
+ <!-- Allows an application to send SMS messages. -->
<permission android:name="android.permission.SEND_SMS"
- android:permissionGroup="android.permission-group.COST_MONEY"
+ android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="dangerous"
android:label="@string/permlab_sendSms"
android:description="@string/permdesc_sendSms" />
@@ -157,33 +171,11 @@
input or confirmation.
@hide -->
<permission android:name="android.permission.SEND_SMS_NO_CONFIRMATION"
- android:permissionGroup="android.permission-group.COST_MONEY"
+ android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="signature|system"
android:label="@string/permlab_sendSmsNoConfirmation"
android:description="@string/permdesc_sendSmsNoConfirmation" />
- <!-- Allows an application to initiate a phone call without going through
- the Dialer user interface for the user to confirm the call
- being placed. -->
- <permission android:name="android.permission.CALL_PHONE"
- android:permissionGroup="android.permission-group.COST_MONEY"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_callPhone"
- android:description="@string/permdesc_callPhone" />
-
- <!-- ================================== -->
- <!-- Permissions for accessing messages -->
- <!-- ================================== -->
- <eat-comment />
-
- <!-- Used for permissions that allow an application to send messages
- on behalf of the user or intercept messages being received by the
- user. This is primarily intended for SMS/MMS messaging, such as
- receiving or reading an MMS. -->
- <permission-group android:name="android.permission-group.MESSAGES"
- android:label="@string/permgrouplab_messages"
- android:description="@string/permgroupdesc_messages" />
-
<!-- Allows an application to monitor incoming SMS messages, to record
or perform processing on them. -->
<permission android:name="android.permission.RECEIVE_SMS"
@@ -248,22 +240,25 @@
android:description="@string/permdesc_receiveWapPush" />
<!-- =============================================================== -->
- <!-- Permissions for accessing personal info (contacts and calendar) -->
+ <!-- Permissions for accessing social info (contacts and social) -->
<!-- =============================================================== -->
<eat-comment />
- <!-- Used for permissions that provide access to the user's private data,
- such as contacts, calendar events, e-mail messages, etc. This includes
+ <!-- Used for permissions that provide access to the user's social connections,
+ such as contacts, call logs, social stream, etc. This includes
both reading and writing of this data (which should generally be
expressed as two distinct permissions). -->
- <permission-group android:name="android.permission-group.PERSONAL_INFO"
- android:label="@string/permgrouplab_personalInfo"
- android:description="@string/permgroupdesc_personalInfo"
- android:permissionGroupFlags="personalInfo" />
+
+ <permission-group android:name="android.permission-group.SOCIAL_INFO"
+ android:label="@string/permgrouplab_socialInfo"
+ android:icon="@drawable/perm_group_social_info"
+ android:description="@string/permgroupdesc_socialInfo"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="320" />
<!-- Allows an application to read the user's contacts data. -->
<permission android:name="android.permission.READ_CONTACTS"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.SOCIAL_INFO"
android:protectionLevel="dangerous"
android:label="@string/permlab_readContacts"
android:description="@string/permdesc_readContacts" />
@@ -271,14 +266,14 @@
<!-- Allows an application to write (but not read) the user's
contacts data. -->
<permission android:name="android.permission.WRITE_CONTACTS"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.SOCIAL_INFO"
android:protectionLevel="dangerous"
android:label="@string/permlab_writeContacts"
android:description="@string/permdesc_writeContacts" />
<!-- Allows an application to read the user's call log. -->
<permission android:name="android.permission.READ_CALL_LOG"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.SOCIAL_INFO"
android:protectionLevel="dangerous"
android:label="@string/permlab_readCallLog"
android:description="@string/permdesc_readCallLog" />
@@ -286,11 +281,41 @@
<!-- Allows an application to write (but not read) the user's
contacts data. -->
<permission android:name="android.permission.WRITE_CALL_LOG"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.SOCIAL_INFO"
android:protectionLevel="dangerous"
android:label="@string/permlab_writeCallLog"
android:description="@string/permdesc_writeCallLog" />
+ <!-- Allows an application to read from the user's social stream. -->
+ <permission android:name="android.permission.READ_SOCIAL_STREAM"
+ android:permissionGroup="android.permission-group.SOCIAL_INFO"
+ android:protectionLevel="dangerous"
+ android:label="@string/permlab_readSocialStream"
+ android:description="@string/permdesc_readSocialStream" />
+
+ <!-- Allows an application to write (but not read) the user's
+ social stream data. -->
+ <permission android:name="android.permission.WRITE_SOCIAL_STREAM"
+ android:permissionGroup="android.permission-group.SOCIAL_INFO"
+ android:protectionLevel="dangerous"
+ android:label="@string/permlab_writeSocialStream"
+ android:description="@string/permdesc_writeSocialStream" />
+
+ <!-- =============================================================== -->
+ <!-- Permissions for accessing information about the device owner -->
+ <!-- =============================================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide access to information about the device
+ user such as profile information. This includes both reading and
+ writing of this data (which should generally be expressed as two
+ distinct permissions). -->
+ <permission-group android:name="android.permission-group.PERSONAL_INFO"
+ android:label="@string/permgrouplab_personalInfo"
+ android:icon="@drawable/perm_group_personal_info"
+ android:description="@string/permgroupdesc_personalInfo"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="310" />
<!-- Allows an application to read the user's personal profile data. -->
<permission android:name="android.permission.READ_PROFILE"
@@ -307,20 +332,19 @@
android:label="@string/permlab_writeProfile"
android:description="@string/permdesc_writeProfile" />
- <!-- Allows an application to read from the user's social stream. -->
- <permission android:name="android.permission.READ_SOCIAL_STREAM"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_readSocialStream"
- android:description="@string/permdesc_readSocialStream" />
+ <!-- =============================================================== -->
+ <!-- Permissions for accessing the device calendar -->
+ <!-- =============================================================== -->
+ <eat-comment />
- <!-- Allows an application to write (but not read) the user's
- social stream data. -->
- <permission android:name="android.permission.WRITE_SOCIAL_STREAM"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_writeSocialStream"
- android:description="@string/permdesc_writeSocialStream" />
+ <!-- Used for permissions that provide access to the device
+ calendar to create / view events.-->
+ <permission-group android:name="android.permission-group.CALENDAR"
+ android:label="@string/permgrouplab_calendar"
+ android:icon="@drawable/perm_group_calendar"
+ android:description="@string/permgroupdesc_calendar"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="290" />
<!-- Allows an application to read the user's calendar data. -->
<permission android:name="android.permission.READ_CALENDAR"
@@ -337,26 +361,63 @@
android:label="@string/permlab_writeCalendar"
android:description="@string/permdesc_writeCalendar" />
+ <!-- =============================================================== -->
+ <!-- Permissions for accessing the user dictionary-->
+ <!-- =============================================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide access to the user
+ calendar to create / view events.-->
+ <permission-group android:name="android.permission-group.USER_DICTIONARY"
+ android:label="@string/permgrouplab_dictionary"
+ android:icon="@drawable/perm_group_user_dictionary"
+ android:description="@string/permgroupdesc_dictionary"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="170" />
+
<!-- Allows an application to read the user dictionary. This should
really only be required by an IME, or a dictionary editor like
the Settings app. -->
<permission android:name="android.permission.READ_USER_DICTIONARY"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.USER_DICTIONARY"
android:protectionLevel="dangerous"
android:label="@string/permlab_readDictionary"
android:description="@string/permdesc_readDictionary" />
+ <!-- Used for permissions that provide access to the user
+ calendar to create / view events.-->
+ <permission-group android:name="android.permission-group.WRITE_USER_DICTIONARY"
+ android:label="@string/permgrouplab_writeDictionary"
+ android:icon="@drawable/perm_group_user_dictionary_write"
+ android:description="@string/permgroupdesc_writeDictionary"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="160" />
+
<!-- Allows an application to write to the user dictionary. -->
<permission android:name="android.permission.WRITE_USER_DICTIONARY"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.WRITE_USER_DICTIONARY"
android:protectionLevel="normal"
android:label="@string/permlab_writeDictionary"
android:description="@string/permdesc_writeDictionary" />
+ <!-- =============================================================== -->
+ <!-- Permissions for accessing the user bookmarks -->
+ <!-- =============================================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide access to the user
+ bookmarks and browser history.-->
+ <permission-group android:name="android.permission-group.BOOKMARKS"
+ android:label="@string/permgrouplab_bookmarks"
+ android:icon="@drawable/perm_group_bookmarks"
+ android:description="@string/permgroupdesc_bookmarks"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="300" />
+
<!-- Allows an application to read (but not write) the user's
browsing history and bookmarks. -->
<permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.BOOKMARKS"
android:label="@string/permlab_readHistoryBookmarks"
android:description="@string/permdesc_readHistoryBookmarks"
android:protectionLevel="dangerous" />
@@ -364,22 +425,48 @@
<!-- Allows an application to write (but not read) the user's
browsing history and bookmarks. -->
<permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.BOOKMARKS"
android:label="@string/permlab_writeHistoryBookmarks"
android:description="@string/permdesc_writeHistoryBookmarks"
android:protectionLevel="dangerous" />
+ <!-- =============================================================== -->
+ <!-- Permissions for setting the device alarm -->
+ <!-- =============================================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide access to the user voicemail box. -->
+ <permission-group android:name="android.permission-group.DEVICE_ALARMS"
+ android:label="@string/permgrouplab_deviceAlarms"
+ android:icon="@drawable/perm_group_device_alarms"
+ android:description="@string/permgroupdesc_deviceAlarms"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="210" />
+
<!-- Allows an application to broadcast an Intent to set an alarm for the
user. -->
<permission android:name="com.android.alarm.permission.SET_ALARM"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.DEVICE_ALARMS"
android:label="@string/permlab_setAlarm"
android:description="@string/permdesc_setAlarm"
android:protectionLevel="normal" />
+ <!-- =============================================================== -->
+ <!-- Permissions for accessing the user voicemail -->
+ <!-- =============================================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide access to the user voicemail box. -->
+ <permission-group android:name="android.permission-group.VOICEMAIL"
+ android:label="@string/permgrouplab_voicemail"
+ android:icon="@drawable/perm_group_voicemail"
+ android:description="@string/permgroupdesc_voicemail"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="280" />
+
<!-- Allows an application to add voicemails into the system. -->
<permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.VOICEMAIL"
android:protectionLevel="dangerous"
android:label="@string/permlab_addVoicemail"
android:description="@string/permdesc_addVoicemail" />
@@ -393,7 +480,10 @@
location. -->
<permission-group android:name="android.permission-group.LOCATION"
android:label="@string/permgrouplab_location"
- android:description="@string/permgroupdesc_location" />
+ android:icon="@drawable/perm_group_location"
+ android:description="@string/permgroupdesc_location"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="330" />
<!-- Allows an application to access fine (e.g., GPS) location -->
<permission android:name="android.permission.ACCESS_FINE_LOCATION"
@@ -440,7 +530,9 @@
or other related network operations. -->
<permission-group android:name="android.permission-group.NETWORK"
android:label="@string/permgrouplab_network"
- android:description="@string/permgroupdesc_network" />
+ android:icon="@drawable/perm_group_network"
+ android:description="@string/permgroupdesc_network"
+ android:priority="270" />
<!-- Allows applications to open network sockets. -->
<permission android:name="android.permission.INTERNET"
@@ -462,6 +554,13 @@
android:protectionLevel="normal"
android:description="@string/permdesc_accessWifiState"
android:label="@string/permlab_accessWifiState" />
+
+ <!-- Allows applications to change Wi-Fi connectivity state -->
+ <permission android:name="android.permission.CHANGE_WIFI_STATE"
+ android:permissionGroup="android.permission-group.NETWORK"
+ android:protectionLevel="normal"
+ android:description="@string/permdesc_changeWifiState"
+ android:label="@string/permlab_changeWifiState" />
<!-- @hide -->
<permission android:name="android.permission.ACCESS_WIMAX_STATE"
@@ -469,36 +568,57 @@
android:protectionLevel="normal"
android:description="@string/permdesc_accessWimaxState"
android:label="@string/permlab_accessWimaxState" />
+
+ <!-- @hide -->
+ <permission android:name="android.permission.CHANGE_WIMAX_STATE"
+ android:permissionGroup="android.permission-group.NETWORK"
+ android:protectionLevel="dangerous"
+ android:description="@string/permdesc_changeWimaxState"
+ android:label="@string/permlab_changeWimaxState" />
+
+ <!-- ======================================= -->
+ <!-- Permissions for short range, peripheral networks -->
+ <!-- ======================================= -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide access to other devices through Bluetooth.-->
+ <permission-group android:name="android.permission-group.BLUETOOTH_NETWORK"
+ android:label="@string/permgrouplab_bluetoothNetwork"
+ android:icon="@drawable/perm_group_bluetooth"
+ android:description="@string/permgroupdesc_bluetoothNetwork"
+ android:priority="260" />
+
<!-- Allows applications to connect to paired bluetooth devices -->
<permission android:name="android.permission.BLUETOOTH"
- android:permissionGroup="android.permission-group.NETWORK"
+ android:permissionGroup="android.permission-group.BLUETOOTH_NETWORK"
android:protectionLevel="dangerous"
android:description="@string/permdesc_bluetooth"
android:label="@string/permlab_bluetooth" />
+
+ <!-- Allows applications to discover and pair bluetooth devices -->
+ <permission android:name="android.permission.BLUETOOTH_ADMIN"
+ android:permissionGroup="android.permission-group.BLUETOOTH_NETWORK"
+ android:protectionLevel="dangerous"
+ android:description="@string/permdesc_bluetoothAdmin"
+ android:label="@string/permlab_bluetoothAdmin" />
+
+ <!-- Used for permissions that provide access to network services that
+ are for peripherals and other nearby devices. These networks
+ generally do not provide IP based networking or internet access.-->
+ <permission-group android:name="android.permission-group.SHORTRANGE_NETWORK"
+ android:label="@string/permgrouplab_shortrangeNetwork"
+ android:icon="@drawable/perm_group_shortrange_network"
+ android:description="@string/permgroupdesc_shortrangeNetwork"
+ android:priority="250" />
<!-- Allows applications to perform I/O operations over NFC -->
<permission android:name="android.permission.NFC"
- android:permissionGroup="android.permission-group.NETWORK"
+ android:permissionGroup="android.permission-group.SHORTRANGE_NETWORK"
android:protectionLevel="dangerous"
android:description="@string/permdesc_nfc"
android:label="@string/permlab_nfc" />
- <!-- Allows an application to use SIP service -->
- <permission android:name="android.permission.USE_SIP"
- android:permissionGroup="android.permission-group.NETWORK"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_use_sip"
- android:label="@string/permlab_use_sip" />
-
- <!-- Allows applications to call into AccountAuthenticators. Only
- the system can get this permission. -->
- <permission android:name="android.permission.ACCOUNT_MANAGER"
- android:permissionGroup="android.permission-group.ACCOUNTS"
- android:protectionLevel="signature"
- android:description="@string/permdesc_accountManagerService"
- android:label="@string/permlab_accountManagerService" />
-
- <!-- Allows an internal user to use privaledged ConnectivityManager
+ <!-- Allows an internal user to use privileged ConnectivityManager
APIs.
@hide -->
<permission android:name="android.permission.CONNECTIVITY_INTERNAL"
@@ -514,7 +634,10 @@
by the Account Manager. -->
<permission-group android:name="android.permission-group.ACCOUNTS"
android:label="@string/permgrouplab_accounts"
- android:description="@string/permgroupdesc_accounts" />
+ android:icon="@drawable/perm_group_accounts"
+ android:description="@string/permgroupdesc_accounts"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="200" />
<!-- Allows access to the list of accounts in the Accounts Service -->
<permission android:name="android.permission.GET_ACCOUNTS"
@@ -545,58 +668,89 @@
android:label="@string/permlab_manageAccounts"
android:description="@string/permdesc_manageAccounts" />
+ <!-- Allows applications to call into AccountAuthenticators. Only
+ the system can get this permission. -->
+ <permission android:name="android.permission.ACCOUNT_MANAGER"
+ android:permissionGroup="android.permission-group.ACCOUNTS"
+ android:protectionLevel="signature"
+ android:description="@string/permdesc_accountManagerService"
+ android:label="@string/permlab_accountManagerService" />
+
<!-- ================================== -->
- <!-- Permissions for accessing hardware -->
+ <!-- Permissions for accessing hardware that may effect battery life-->
<!-- ================================== -->
<eat-comment />
<!-- Used for permissions that provide direct access to the hardware on
- the device. This includes audio, the camera, vibrator, etc. -->
- <permission-group android:name="android.permission-group.HARDWARE_CONTROLS"
- android:label="@string/permgrouplab_hardwareControls"
- android:description="@string/permgroupdesc_hardwareControls" />
+ the device that has an effect on battery life. This includes vibrator,
+ flashlight, etc. -->
- <!-- Allows an application to modify global audio settings -->
- <permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"
- android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_modifyAudioSettings"
- android:description="@string/permdesc_modifyAudioSettings" />
+ <permission-group android:name="android.permission-group.AFFECTS_BATTERY"
+ android:label="@string/permgrouplab_affectsBattery"
+ android:icon="@drawable/perm_group_affects_battery"
+ android:description="@string/permgroupdesc_affectsBattery"
+ android:priority="180" />
- <!-- Allows an application to record audio -->
- <permission android:name="android.permission.RECORD_AUDIO"
- android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_recordAudio"
- android:description="@string/permdesc_recordAudio" />
-
- <!-- Required to be able to access the camera device.
- <p>This will automatically enforce the <a
- href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
- &lt;uses-feature&gt;}</a> manifest element for <em>all</em> camera features.
- If you do not require all camera features or can properly operate if a camera
- is not available, then you must modify your manifest as appropriate in order to
- install on devices that don't support all camera features.</p> -->
- <permission android:name="android.permission.CAMERA"
- android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_camera"
- android:description="@string/permdesc_camera" />
+ <!-- Allows applications to enter Wi-Fi Multicast mode -->
+ <permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"
+ android:permissionGroup="android.permission-group.AFFECTS_BATTERY"
+ android:protectionLevel="normal"
+ android:description="@string/permdesc_changeWifiMulticastState"
+ android:label="@string/permlab_changeWifiMulticastState" />
<!-- Allows access to the vibrator -->
<permission android:name="android.permission.VIBRATE"
- android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
+ android:permissionGroup="android.permission-group.AFFECTS_BATTERY"
android:protectionLevel="normal"
android:label="@string/permlab_vibrate"
android:description="@string/permdesc_vibrate" />
<!-- Allows access to the flashlight -->
<permission android:name="android.permission.FLASHLIGHT"
- android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
+ android:permissionGroup="android.permission-group.AFFECTS_BATTERY"
android:protectionLevel="normal"
android:label="@string/permlab_flashlight"
android:description="@string/permdesc_flashlight" />
+ <!-- Allows using PowerManager WakeLocks to keep processor from sleeping or screen
+ from dimming -->
+ <permission android:name="android.permission.WAKE_LOCK"
+ android:permissionGroup="android.permission-group.AFFECTS_BATTERY"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_wakeLock"
+ android:description="@string/permdesc_wakeLock" />
+
+ <!-- ==================================================== -->
+ <!-- Permissions related to changing audio settings -->
+ <!-- ==================================================== -->
+
+ <!-- Used for permissions that provide direct access to speaker settings
+ the device. -->
+ <permission-group android:name="android.permission-group.AUDIO_SETTINGS"
+ android:label="@string/permgrouplab_audioSettings"
+ android:icon="@drawable/perm_group_audio_settings"
+ android:description="@string/permgroupdesc_audioSettings"
+ android:priority="130" />
+
+ <!-- Allows an application to modify global audio settings -->
+ <permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"
+ android:permissionGroup="android.permission-group.AUDIO_SETTINGS"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_modifyAudioSettings"
+ android:description="@string/permdesc_modifyAudioSettings" />
+
+ <!-- ================================== -->
+ <!-- Permissions for accessing hardware -->
+ <!-- ================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide direct access to the hardware on
+ the device. This includes audio, the camera, vibrator, etc. -->
+ <permission-group android:name="android.permission-group.HARDWARE_CONTROLS"
+ android:label="@string/permgrouplab_hardwareControls"
+ android:description="@string/permgroupdesc_hardwareControls"
+ android:priority="260"/>
+
<!-- Allows an application to manage preferences and permissions for USB devices
@hide -->
<permission android:name="android.permission.MANAGE_USB"
@@ -633,18 +787,68 @@
android:protectionLevel="signature" />
<!-- =========================================== -->
+ <!-- Permissions associated with audio capture -->
+ <!-- =========================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that are associated with accessing
+ microphone audio from the device. Note that phone calls also capture audio
+ but are in a separate (more visible) permission group. -->
+ <permission-group android:name="android.permission-group.MICROPHONE"
+ android:label="@string/permgrouplab_microphone"
+ android:icon="@drawable/perm_group_microphone"
+ android:description="@string/permgroupdesc_microphone"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="340" />
+
+ <!-- Allows an application to record audio -->
+ <permission android:name="android.permission.RECORD_AUDIO"
+ android:permissionGroup="android.permission-group.MICROPHONE"
+ android:protectionLevel="dangerous"
+ android:label="@string/permlab_recordAudio" />
+
+
+ <!-- =========================================== -->
+ <!-- Permissions associated with camera and image capture -->
+ <!-- =========================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that are associated with accessing
+ camera or capturing images/video from the device. -->
+ <permission-group android:name="android.permission-group.CAMERA"
+ android:label="@string/permgrouplab_camera"
+ android:icon="@drawable/perm_group_camera"
+ android:description="@string/permgroupdesc_camera"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="350" />
+
+ <!-- Required to be able to access the camera device.
+ <p>This will automatically enforce the <a
+ href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
+ &lt;uses-feature&gt;}</a> manifest element for <em>all</em> camera features.
+ If you do not require all camera features or can properly operate if a camera
+ is not available, then you must modify your manifest as appropriate in order to
+ install on devices that don't support all camera features.</p> -->
+ <permission android:name="android.permission.CAMERA"
+ android:permissionGroup="android.permission-group.CAMERA"
+ android:protectionLevel="dangerous"
+ android:label="@string/permlab_camera"
+ android:description="@string/permdesc_camera" />
+
+ <!-- =========================================== -->
<!-- Permissions associated with telephony state -->
<!-- =========================================== -->
<eat-comment />
<!-- Used for permissions that are associated with accessing and modifyign
- telephony state: intercepting outgoing calls, reading
- and modifying the phone state. Note that
- placing phone calls is not in this group, since that is in the
- more important "takin' yer moneys" group. -->
+ telephony state: placing calls, intercepting outgoing calls, reading
+ and modifying the phone state. -->
<permission-group android:name="android.permission-group.PHONE_CALLS"
android:label="@string/permgrouplab_phoneCalls"
- android:description="@string/permgroupdesc_phoneCalls" />
+ android:icon="@drawable/perm_group_phone_calls"
+ android:description="@string/permgroupdesc_phoneCalls"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="370" />
<!-- Allows an application to monitor, modify, or abort outgoing
calls. -->
@@ -675,6 +879,22 @@
android:permissionGroup="android.permission-group.PHONE_CALLS"
android:protectionLevel="signature|system" />
+ <!-- Allows an application to initiate a phone call without going through
+ the Dialer user interface for the user to confirm the call
+ being placed. -->
+ <permission android:name="android.permission.CALL_PHONE"
+ android:permissionGroup="android.permission-group.PHONE_CALLS"
+ android:protectionLevel="dangerous"
+ android:label="@string/permlab_callPhone"
+ android:description="@string/permdesc_callPhone" />
+
+ <!-- Allows an application to use SIP service -->
+ <permission android:name="android.permission.USE_SIP"
+ android:permissionGroup="android.permission-group.PHONE_CALLS"
+ android:protectionLevel="dangerous"
+ android:description="@string/permdesc_use_sip"
+ android:label="@string/permlab_use_sip" />
+
<!-- ================================== -->
<!-- Permissions for sdcard interaction -->
<!-- ================================== -->
@@ -683,7 +903,10 @@
<!-- Group of permissions that are related to SD card access. -->
<permission-group android:name="android.permission-group.STORAGE"
android:label="@string/permgrouplab_storage"
- android:description="@string/permgroupdesc_storage" />
+ android:icon="@drawable/perm_group_storage"
+ android:description="@string/permgroupdesc_storage"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="240" />
<!-- Allows an application to read from external storage -->
<permission android:name="android.permission.READ_EXTERNAL_STORAGE"
@@ -707,45 +930,44 @@
android:description="@string/permdesc_mediaStorageWrite"
android:protectionLevel="signature|system" />
- <!-- ============================================ -->
- <!-- Permissions for low-level system interaction -->
- <!-- ============================================ -->
+ <!-- ================================== -->
+ <!-- Permissions for screenlock -->
+ <!-- ================================== -->
<eat-comment />
- <!-- Group of permissions that are related to system APIs. Many
- of these are not permissions the user will be expected to understand,
- and such permissions should generally be marked as "normal" protection
- level so they don't get displayed. This can also, however, be used
- for miscellaneous features that provide access to the operating system,
- such as writing the global system settings. -->
- <permission-group android:name="android.permission-group.SYSTEM_TOOLS"
- android:label="@string/permgrouplab_systemTools"
- android:description="@string/permgroupdesc_systemTools" />
+ <!-- Group of permissions that are related to the screenlock. -->
+ <permission-group android:name="android.permission-group.SCREENLOCK"
+ android:label="@string/permgrouplab_storage"
+ android:icon="@drawable/perm_group_screenlock"
+ android:permissionGroupFlags="personalInfo"
+ android:description="@string/permgroupdesc_storage"
+ android:priority="230" />
- <!-- Allows an application to read or write the system settings. -->
- <permission android:name="android.permission.WRITE_SETTINGS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+ <!-- Allows applications to disable the keyguard -->
+ <permission android:name="android.permission.DISABLE_KEYGUARD"
+ android:permissionGroup="android.permission-group.SCREENLOCK"
android:protectionLevel="dangerous"
- android:label="@string/permlab_writeSettings"
- android:description="@string/permdesc_writeSettings" />
+ android:description="@string/permdesc_disableKeyguard"
+ android:label="@string/permlab_disableKeyguard" />
- <!-- Allows an application to modify the Google service map. -->
- <permission android:name="android.permission.WRITE_GSERVICES"
- android:protectionLevel="signature|system"
- android:label="@string/permlab_writeGservices"
- android:description="@string/permdesc_writeGservices" />
+ <!-- ================================== -->
+ <!-- Permissions to access other installed applications -->
+ <!-- ================================== -->
+ <eat-comment />
- <!-- Allows an application to expand or collapse the status bar. -->
- <permission android:name="android.permission.EXPAND_STATUS_BAR"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:label="@string/permlab_expandStatusBar"
- android:description="@string/permdesc_expandStatusBar" />
+ <!-- Group of permissions that are related to the other applications
+ installed on the system. Examples include such as listing
+ running apps, or killing background processes. -->
+ <permission-group android:name="android.permission-group.APP_INFO"
+ android:label="@string/permgrouplab_appInfo"
+ android:icon="@drawable/perm_group_app_info"
+ android:description="@string/permgroupdesc_appInfo"
+ android:priority="220" />
<!-- Allows an application to get information about the currently
or recently running tasks. -->
<permission android:name="android.permission.GET_TASKS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+ android:permissionGroup="android.permission-group.APP_INFO"
android:protectionLevel="dangerous"
android:label="@string/permlab_getTasks"
android:description="@string/permdesc_getTasks" />
@@ -761,14 +983,14 @@
<!-- Allows an application to change the Z-order of tasks -->
<permission android:name="android.permission.REORDER_TASKS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
+ android:permissionGroup="android.permission-group.APP_INFO"
+ android:protectionLevel="normal"
android:label="@string/permlab_reorderTasks"
android:description="@string/permdesc_reorderTasks" />
<!-- @hide Allows an application to change to remove/kill tasks -->
<permission android:name="android.permission.REMOVE_TASKS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+ android:permissionGroup="android.permission-group.APP_INFO"
android:protectionLevel="signature"
android:label="@string/permlab_removeTasks"
android:description="@string/permdesc_removeTasks" />
@@ -781,6 +1003,167 @@
android:label="@string/permlab_startAnyActivity"
android:description="@string/permdesc_startAnyActivity" />
+ <!-- @deprecated The {@link android.app.ActivityManager#restartPackage}
+ API is no longer supported. -->
+ <permission android:name="android.permission.RESTART_PACKAGES"
+ android:permissionGroup="android.permission-group.APP_INFO"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_killBackgroundProcesses"
+ android:description="@string/permdesc_killBackgroundProcesses" />
+
+ <!-- Allows an application to call
+ {@link android.app.ActivityManager#killBackgroundProcesses}. -->
+ <permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"
+ android:permissionGroup="android.permission-group.APP_INFO"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_killBackgroundProcesses"
+ android:description="@string/permdesc_killBackgroundProcesses" />
+
+ <!-- ================================== -->
+ <!-- Permissions affecting the display of other applications -->
+ <!-- ================================== -->
+ <eat-comment />
+
+ <!-- Group of permissions that allow manipulation of how
+ another application displays UI to the user. -->
+ <permission-group android:name="android.permission-group.DISPLAY"
+ android:label="@string/permgrouplab_display"
+ android:icon="@drawable/perm_group_display"
+ android:description="@string/permgroupdesc_display"
+ android:priority="190"/>
+
+ <!-- Allows an application to open windows using the type
+ {@link android.view.WindowManager.LayoutParams#TYPE_SYSTEM_ALERT},
+ shown on top of all other applications. Very few applications
+ should use this permission; these windows are intended for
+ system-level interaction with the user. -->
+ <permission android:name="android.permission.SYSTEM_ALERT_WINDOW"
+ android:permissionGroup="android.permission-group.DISPLAY"
+ android:protectionLevel="dangerous"
+ android:label="@string/permlab_systemAlertWindow"
+ android:description="@string/permdesc_systemAlertWindow" />
+
+ <!-- ================================== -->
+ <!-- Permissions affecting the system wallpaper -->
+ <!-- ================================== -->
+ <eat-comment />
+
+ <!-- Group of permissions that allow manipulation of how
+ another application displays UI to the user. -->
+ <permission-group android:name="android.permission-group.WALLPAPER"
+ android:label="@string/permgrouplab_wallpaper"
+ android:icon="@drawable/perm_group_wallpaper"
+ android:description="@string/permgroupdesc_wallpaper"
+ android:priority="150" />
+
+ <!-- Allows applications to set the wallpaper -->
+ <permission android:name="android.permission.SET_WALLPAPER"
+ android:permissionGroup="android.permission-group.WALLPAPER"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_setWallpaper"
+ android:description="@string/permdesc_setWallpaper" />
+
+ <!-- Allows applications to set the wallpaper hints -->
+ <permission android:name="android.permission.SET_WALLPAPER_HINTS"
+ android:permissionGroup="android.permission-group.WALLPAPER"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_setWallpaperHints"
+ android:description="@string/permdesc_setWallpaperHints" />
+
+ <!-- ============================================ -->
+ <!-- Permissions for changing the system clock -->
+ <!-- ============================================ -->
+ <eat-comment />
+
+ <!-- Group of permissions that are related to system clock. -->
+ <permission-group android:name="android.permission-group.SYSTEM_CLOCK"
+ android:label="@string/permgrouplab_systemClock"
+ android:icon="@drawable/perm_group_system_clock"
+ android:description="@string/permgroupdesc_systemClock"
+ android:priority="140" />
+
+ <!-- Allows applications to set the system time -->
+ <permission android:name="android.permission.SET_TIME"
+ android:protectionLevel="signature|system"
+ android:label="@string/permlab_setTime"
+ android:description="@string/permdesc_setTime" />
+
+ <!-- Allows applications to set the system time zone -->
+ <permission android:name="android.permission.SET_TIME_ZONE"
+ android:permissionGroup="android.permission-group.SYSTEM_CLOCK"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_setTimeZone"
+ android:description="@string/permdesc_setTimeZone" />
+
+ <!-- ==================================================== -->
+ <!-- Permissions related to changing status bar -->
+ <!-- ==================================================== -->
+
+ <!-- Used for permissions that change the status bar -->
+ <permission-group android:name="android.permission-group.STATUS_BAR"
+ android:label="@string/permgrouplab_statusBar"
+ android:icon="@drawable/perm_group_status_bar"
+ android:description="@string/permgroupdesc_statusBar"
+ android:priority="110" />
+
+ <!-- Allows an application to expand or collapse the status bar. -->
+ <permission android:name="android.permission.EXPAND_STATUS_BAR"
+ android:permissionGroup="android.permission-group.STATUS_BAR"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_expandStatusBar"
+ android:description="@string/permdesc_expandStatusBar" />
+
+ <!-- ==================================================== -->
+ <!-- Permissions related to accessing sync settings -->
+ <!-- ==================================================== -->
+
+ <!-- Used for permissions that access the sync settings or sync
+ related information. -->
+ <permission-group android:name="android.permission-group.SYNC_SETTINGS"
+ android:label="@string/permgrouplab_syncSettings"
+ android:icon="@drawable/perm_group_sync_settings"
+ android:description="@string/permgroupdesc_syncSettings"
+ android:priority="120" />
+
+ <!-- Allows applications to read the sync settings -->
+ <permission android:name="android.permission.READ_SYNC_SETTINGS"
+ android:permissionGroup="android.permission-group.SYNC_SETTINGS"
+ android:protectionLevel="normal"
+ android:description="@string/permdesc_readSyncSettings"
+ android:label="@string/permlab_readSyncSettings" />
+
+ <!-- Allows applications to write the sync settings -->
+ <permission android:name="android.permission.WRITE_SYNC_SETTINGS"
+ android:permissionGroup="android.permission-group.SYNC_SETTINGS"
+ android:protectionLevel="normal"
+ android:description="@string/permdesc_writeSyncSettings"
+ android:label="@string/permlab_writeSyncSettings" />
+
+ <!-- Allows applications to read the sync stats -->
+ <permission android:name="android.permission.READ_SYNC_STATS"
+ android:permissionGroup="android.permission-group.SYNC_SETTINGS"
+ android:protectionLevel="normal"
+ android:description="@string/permdesc_readSyncStats"
+ android:label="@string/permlab_readSyncStats" />
+
+
+ <!-- ============================================ -->
+ <!-- Permissions for low-level system interaction -->
+ <!-- ============================================ -->
+ <eat-comment />
+
+ <!-- Group of permissions that are related to system APIs. Many
+ of these are not permissions the user will be expected to understand,
+ and such permissions should generally be marked as "normal" protection
+ level so they don't get displayed. This can also, however, be used
+ for miscellaneous features that provide access to the operating system,
+ such as writing the global system settings. -->
+ <permission-group android:name="android.permission-group.SYSTEM_TOOLS"
+ android:label="@string/permgrouplab_systemTools"
+ android:icon="@drawable/perm_group_system_tools"
+ android:description="@string/permgroupdesc_systemTools"
+ android:priority="100" />
+
<!-- @hide Change the screen compatibility mode of applications -->
<permission android:name="android.permission.SET_SCREEN_COMPATIBILITY"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
@@ -796,21 +1179,33 @@
android:label="@string/permlab_changeConfiguration"
android:description="@string/permdesc_changeConfiguration" />
- <!-- @deprecated The {@link android.app.ActivityManager#restartPackage}
- API is no longer supported. -->
- <permission android:name="android.permission.RESTART_PACKAGES"
+ <!-- Allows an application to read or write the system settings. -->
+ <permission android:name="android.permission.WRITE_SETTINGS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="normal"
- android:label="@string/permlab_killBackgroundProcesses"
- android:description="@string/permdesc_killBackgroundProcesses" />
+ android:label="@string/permlab_writeSettings"
+ android:description="@string/permdesc_writeSettings" />
- <!-- Allows an application to call
- {@link android.app.ActivityManager#killBackgroundProcesses}. -->
- <permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"
+ <!-- Allows an application to modify the Google service map. -->
+ <permission android:name="android.permission.WRITE_GSERVICES"
+ android:protectionLevel="signature|system"
+ android:label="@string/permlab_writeGservices"
+ android:description="@string/permdesc_writeGservices" />
+
+ <!-- @hide Change the screen compatibility mode of applications -->
+ <permission android:name="android.permission.SET_SCREEN_COMPATIBILITY"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:label="@string/permlab_killBackgroundProcesses"
- android:description="@string/permdesc_killBackgroundProcesses" />
+ android:protectionLevel="signature"
+ android:label="@string/permlab_setScreenCompatibility"
+ android:description="@string/permdesc_setScreenCompatibility" />
+
+ <!-- Allows an application to modify the current configuration, such
+ as locale. -->
+ <permission android:name="android.permission.CHANGE_CONFIGURATION"
+ android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+ android:protectionLevel="system|signature"
+ android:label="@string/permlab_changeConfiguration"
+ android:description="@string/permdesc_changeConfiguration" />
<!-- Allows an application to call
{@link android.app.ActivityManager#forceStopPackage}.
@@ -829,17 +1224,6 @@
android:label="@string/permlab_retrieve_window_content"
android:description="@string/permdesc_retrieve_window_content" />
- <!-- Allows an application to open windows using the type
- {@link android.view.WindowManager.LayoutParams#TYPE_SYSTEM_ALERT},
- shown on top of all other applications. Very few applications
- should use this permission; these windows are intended for
- system-level interaction with the user. -->
- <permission android:name="android.permission.SYSTEM_ALERT_WINDOW"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_systemAlertWindow"
- android:description="@string/permdesc_systemAlertWindow" />
-
<!-- Modify the global animation scaling factor. -->
<permission android:name="android.permission.SET_ANIMATION_SCALE"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
@@ -848,12 +1232,10 @@
android:description="@string/permdesc_setAnimationScale" />
<!-- @deprecated This functionality will be removed in the future; please do
- not use.
-
- Allow an application to make its activities persistent. -->
+ not use. Allow an application to make its activities persistent. -->
<permission android:name="android.permission.PERSISTENT_ACTIVITY"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
+ android:protectionLevel="normal"
android:label="@string/permlab_persistentActivity"
android:description="@string/permdesc_persistentActivity" />
@@ -900,52 +1282,17 @@
android:label="@string/permlab_broadcastSticky"
android:description="@string/permdesc_broadcastSticky" />
- <!-- Allows using PowerManager WakeLocks to keep processor from sleeping or screen
- from dimming -->
- <permission android:name="android.permission.WAKE_LOCK"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_wakeLock"
- android:description="@string/permdesc_wakeLock" />
-
- <!-- Allows applications to set the wallpaper -->
- <permission android:name="android.permission.SET_WALLPAPER"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:label="@string/permlab_setWallpaper"
- android:description="@string/permdesc_setWallpaper" />
-
- <!-- Allows applications to set the wallpaper hints -->
- <permission android:name="android.permission.SET_WALLPAPER_HINTS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:label="@string/permlab_setWallpaperHints"
- android:description="@string/permdesc_setWallpaperHints" />
-
- <!-- Allows applications to set the system time -->
- <permission android:name="android.permission.SET_TIME"
- android:protectionLevel="signature|system"
- android:label="@string/permlab_setTime"
- android:description="@string/permdesc_setTime" />
-
- <!-- Allows applications to set the system time zone -->
- <permission android:name="android.permission.SET_TIME_ZONE"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_setTimeZone"
- android:description="@string/permdesc_setTimeZone" />
-
<!-- Allows mounting and unmounting file systems for removable storage. -->
<permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
+ android:protectionLevel="system|signature"
android:label="@string/permlab_mount_unmount_filesystems"
android:description="@string/permdesc_mount_unmount_filesystems" />
<!-- Allows formatting file systems for removable storage. -->
<permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
+ android:protectionLevel="system|signature"
android:label="@string/permlab_mount_format_filesystems"
android:description="@string/permdesc_mount_format_filesystems" />
@@ -989,34 +1336,6 @@
android:label="@string/permlab_asec_rename"
android:description="@string/permdesc_asec_rename" />
- <!-- Allows applications to disable the keyguard -->
- <permission android:name="android.permission.DISABLE_KEYGUARD"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_disableKeyguard"
- android:label="@string/permlab_disableKeyguard" />
-
- <!-- Allows applications to read the sync settings -->
- <permission android:name="android.permission.READ_SYNC_SETTINGS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:description="@string/permdesc_readSyncSettings"
- android:label="@string/permlab_readSyncSettings" />
-
- <!-- Allows applications to write the sync settings -->
- <permission android:name="android.permission.WRITE_SYNC_SETTINGS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_writeSyncSettings"
- android:label="@string/permlab_writeSyncSettings" />
-
- <!-- Allows applications to read the sync stats -->
- <permission android:name="android.permission.READ_SYNC_STATS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:description="@string/permdesc_readSyncStats"
- android:label="@string/permlab_readSyncStats" />
-
<!-- Allows applications to write the apn settings -->
<permission android:name="android.permission.WRITE_APN_SETTINGS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
@@ -1040,37 +1359,10 @@
<!-- Allows applications to change network connectivity state -->
<permission android:name="android.permission.CHANGE_NETWORK_STATE"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
+ android:protectionLevel="normal"
android:description="@string/permdesc_changeNetworkState"
android:label="@string/permlab_changeNetworkState" />
- <!-- Allows applications to change Wi-Fi connectivity state -->
- <permission android:name="android.permission.CHANGE_WIFI_STATE"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_changeWifiState"
- android:label="@string/permlab_changeWifiState" />
-
- <!-- @hide -->
- <permission android:name="android.permission.CHANGE_WIMAX_STATE"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_changeWimaxState"
- android:label="@string/permlab_changeWimaxState" />
- <!-- Allows applications to enter Wi-Fi Multicast mode -->
- <permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_changeWifiMulticastState"
- android:label="@string/permlab_changeWifiMulticastState" />
-
- <!-- Allows applications to discover and pair bluetooth devices -->
- <permission android:name="android.permission.BLUETOOTH_ADMIN"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_bluetoothAdmin"
- android:label="@string/permlab_bluetoothAdmin" />
-
<!-- Allows an application to clear the caches of all installed
applications on the device. -->
<permission android:name="android.permission.CLEAR_APP_CACHE"
@@ -1097,7 +1389,8 @@
purposes. -->
<permission-group android:name="android.permission-group.DEVELOPMENT_TOOLS"
android:label="@string/permgrouplab_developmentTools"
- android:description="@string/permgroupdesc_developmentTools" />
+ android:description="@string/permgroupdesc_developmentTools"
+ android:priority="310" />
<!-- Allows an application to read or write the secure system settings. -->
<permission android:name="android.permission.WRITE_SECURE_SETTINGS"
diff --git a/core/res/res/drawable-hdpi/perm_group_accounts.png b/core/res/res/drawable-hdpi/perm_group_accounts.png
new file mode 100644
index 000000000000..db59ab0a2922
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_accounts.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_affects_battery.png b/core/res/res/drawable-hdpi/perm_group_affects_battery.png
new file mode 100644
index 000000000000..8ca8154da58c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_affects_battery.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_app_info.png b/core/res/res/drawable-hdpi/perm_group_app_info.png
new file mode 100644
index 000000000000..b03e2f343eaa
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_app_info.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_audio_settings.png b/core/res/res/drawable-hdpi/perm_group_audio_settings.png
new file mode 100644
index 000000000000..4e652a874d50
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_audio_settings.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_bluetooth.png b/core/res/res/drawable-hdpi/perm_group_bluetooth.png
new file mode 100644
index 000000000000..0f2845426f26
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_bookmarks.png b/core/res/res/drawable-hdpi/perm_group_bookmarks.png
new file mode 100644
index 000000000000..06f634459052
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_bookmarks.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_calendar.png b/core/res/res/drawable-hdpi/perm_group_calendar.png
new file mode 100644
index 000000000000..c0a4dfd54e5a
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_camera.png b/core/res/res/drawable-hdpi/perm_group_camera.png
new file mode 100644
index 000000000000..cbc07b062195
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_camera.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_device_alarms.png b/core/res/res/drawable-hdpi/perm_group_device_alarms.png
new file mode 100644
index 000000000000..d44b9deca776
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_device_alarms.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_display.png b/core/res/res/drawable-hdpi/perm_group_display.png
new file mode 100644
index 000000000000..e8afececbef2
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_display.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_location.png b/core/res/res/drawable-hdpi/perm_group_location.png
new file mode 100644
index 000000000000..dc2f8ef0991a
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_location.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_messages.png b/core/res/res/drawable-hdpi/perm_group_messages.png
new file mode 100644
index 000000000000..680c178b2006
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_messages.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_microphone.png b/core/res/res/drawable-hdpi/perm_group_microphone.png
new file mode 100644
index 000000000000..a73a945d04b8
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_microphone.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_network.png b/core/res/res/drawable-hdpi/perm_group_network.png
new file mode 100644
index 000000000000..c750e2aa02c3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_network.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_personal_info.png b/core/res/res/drawable-hdpi/perm_group_personal_info.png
new file mode 100644
index 000000000000..130e7adbedfc
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_personal_info.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_phone_calls.png b/core/res/res/drawable-hdpi/perm_group_phone_calls.png
new file mode 100644
index 000000000000..577855bd37d3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_phone_calls.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_screenlock.png b/core/res/res/drawable-hdpi/perm_group_screenlock.png
new file mode 100644
index 000000000000..9c5143d8daae
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_screenlock.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_shortrange_network.png b/core/res/res/drawable-hdpi/perm_group_shortrange_network.png
new file mode 100644
index 000000000000..554a4e46b4b9
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_shortrange_network.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_social_info.png b/core/res/res/drawable-hdpi/perm_group_social_info.png
new file mode 100644
index 000000000000..134990b79983
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_social_info.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_status_bar.png b/core/res/res/drawable-hdpi/perm_group_status_bar.png
new file mode 100644
index 000000000000..bda963bb9c51
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_status_bar.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_storage.png b/core/res/res/drawable-hdpi/perm_group_storage.png
new file mode 100644
index 000000000000..e6b39654b52b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_storage.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_sync_settings.png b/core/res/res/drawable-hdpi/perm_group_sync_settings.png
new file mode 100644
index 000000000000..be70866ac133
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_sync_settings.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_system_clock.png b/core/res/res/drawable-hdpi/perm_group_system_clock.png
new file mode 100644
index 000000000000..75794c3232b5
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_system_clock.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_system_tools.png b/core/res/res/drawable-hdpi/perm_group_system_tools.png
new file mode 100644
index 000000000000..3fd43853ac10
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_system_tools.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_user_dictionary.png b/core/res/res/drawable-hdpi/perm_group_user_dictionary.png
new file mode 100644
index 000000000000..98a08948def2
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_user_dictionary.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_user_dictionary_write.png b/core/res/res/drawable-hdpi/perm_group_user_dictionary_write.png
new file mode 100644
index 000000000000..784ea0fed6f7
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_user_dictionary_write.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_voicemail.png b/core/res/res/drawable-hdpi/perm_group_voicemail.png
new file mode 100644
index 000000000000..b08b15346068
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/perm_group_wallpaper.png b/core/res/res/drawable-hdpi/perm_group_wallpaper.png
new file mode 100644
index 000000000000..cf073a4d653c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_accounts.png b/core/res/res/drawable-mdpi/perm_group_accounts.png
new file mode 100644
index 000000000000..3dd4043b457a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_accounts.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_affects_battery.png b/core/res/res/drawable-mdpi/perm_group_affects_battery.png
new file mode 100644
index 000000000000..72919163ca38
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_affects_battery.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_app_info.png b/core/res/res/drawable-mdpi/perm_group_app_info.png
new file mode 100644
index 000000000000..8ba65bd86acc
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_app_info.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_audio_settings.png b/core/res/res/drawable-mdpi/perm_group_audio_settings.png
new file mode 100644
index 000000000000..f2f461bd3074
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_audio_settings.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_bluetooth.png b/core/res/res/drawable-mdpi/perm_group_bluetooth.png
new file mode 100644
index 000000000000..6db6fdea7626
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_bookmarks.png b/core/res/res/drawable-mdpi/perm_group_bookmarks.png
new file mode 100644
index 000000000000..f908e14c1e3a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_bookmarks.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_calendar.png b/core/res/res/drawable-mdpi/perm_group_calendar.png
new file mode 100644
index 000000000000..5905973ba19d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_camera.png b/core/res/res/drawable-mdpi/perm_group_camera.png
new file mode 100644
index 000000000000..be1c9e69fafb
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_camera.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_device_alarms.png b/core/res/res/drawable-mdpi/perm_group_device_alarms.png
new file mode 100644
index 000000000000..48d6d6a4f6f8
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_device_alarms.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_display.png b/core/res/res/drawable-mdpi/perm_group_display.png
new file mode 100644
index 000000000000..e10609c3f7ee
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_display.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_location.png b/core/res/res/drawable-mdpi/perm_group_location.png
new file mode 100644
index 000000000000..e79ec258db23
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_location.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_messages.png b/core/res/res/drawable-mdpi/perm_group_messages.png
new file mode 100644
index 000000000000..dfb3ba7fec0e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_messages.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_microphone.png b/core/res/res/drawable-mdpi/perm_group_microphone.png
new file mode 100644
index 000000000000..9bab315b88cf
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_microphone.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_network.png b/core/res/res/drawable-mdpi/perm_group_network.png
new file mode 100644
index 000000000000..f2798a7fa02d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_network.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_personal_info.png b/core/res/res/drawable-mdpi/perm_group_personal_info.png
new file mode 100644
index 000000000000..6233a8258d60
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_personal_info.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_phone_calls.png b/core/res/res/drawable-mdpi/perm_group_phone_calls.png
new file mode 100644
index 000000000000..ff3ffd530666
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_phone_calls.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_screenlock.png b/core/res/res/drawable-mdpi/perm_group_screenlock.png
new file mode 100644
index 000000000000..abfe6e4780a0
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_screenlock.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_shortrange_network.png b/core/res/res/drawable-mdpi/perm_group_shortrange_network.png
new file mode 100644
index 000000000000..5d733756525b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_shortrange_network.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_social_info.png b/core/res/res/drawable-mdpi/perm_group_social_info.png
new file mode 100644
index 000000000000..c862f9ef46f8
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_social_info.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_status_bar.png b/core/res/res/drawable-mdpi/perm_group_status_bar.png
new file mode 100644
index 000000000000..4158fa678a53
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_status_bar.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_storage.png b/core/res/res/drawable-mdpi/perm_group_storage.png
new file mode 100644
index 000000000000..3dcfb22fe1bf
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_storage.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_sync_settings.png b/core/res/res/drawable-mdpi/perm_group_sync_settings.png
new file mode 100644
index 000000000000..5a0e5ffaedd0
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_sync_settings.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_system_clock.png b/core/res/res/drawable-mdpi/perm_group_system_clock.png
new file mode 100644
index 000000000000..e4d574386705
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_system_clock.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_system_tools.png b/core/res/res/drawable-mdpi/perm_group_system_tools.png
new file mode 100644
index 000000000000..fc7337d5c9d1
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_system_tools.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_user_dictionary.png b/core/res/res/drawable-mdpi/perm_group_user_dictionary.png
new file mode 100644
index 000000000000..92864ba25d8f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_user_dictionary.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_user_dictionary_write.png b/core/res/res/drawable-mdpi/perm_group_user_dictionary_write.png
new file mode 100644
index 000000000000..9f4871398200
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_user_dictionary_write.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_voicemail.png b/core/res/res/drawable-mdpi/perm_group_voicemail.png
new file mode 100644
index 000000000000..a34d6897e0fe
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_wallpaper.png b/core/res/res/drawable-mdpi/perm_group_wallpaper.png
new file mode 100644
index 000000000000..b990e7f0852a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_accounts.png b/core/res/res/drawable-xhdpi/perm_group_accounts.png
new file mode 100644
index 000000000000..74cd33bd23e9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_accounts.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_affects_battery.png b/core/res/res/drawable-xhdpi/perm_group_affects_battery.png
new file mode 100644
index 000000000000..d4a9bb5d67e4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_affects_battery.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_app_info.png b/core/res/res/drawable-xhdpi/perm_group_app_info.png
new file mode 100644
index 000000000000..46089e5ba859
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_app_info.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_audio_settings.png b/core/res/res/drawable-xhdpi/perm_group_audio_settings.png
new file mode 100644
index 000000000000..2f7cbc3b10ff
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_audio_settings.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_bluetooth.png b/core/res/res/drawable-xhdpi/perm_group_bluetooth.png
new file mode 100644
index 000000000000..6bbde5235917
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_bookmarks.png b/core/res/res/drawable-xhdpi/perm_group_bookmarks.png
new file mode 100644
index 000000000000..1277d03e15fd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_bookmarks.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_calendar.png b/core/res/res/drawable-xhdpi/perm_group_calendar.png
new file mode 100644
index 000000000000..3c7f2d36d106
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_camera.png b/core/res/res/drawable-xhdpi/perm_group_camera.png
new file mode 100644
index 000000000000..a4545546abc6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_camera.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_device_alarms.png b/core/res/res/drawable-xhdpi/perm_group_device_alarms.png
new file mode 100644
index 000000000000..1bb151cf30bb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_device_alarms.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_display.png b/core/res/res/drawable-xhdpi/perm_group_display.png
new file mode 100644
index 000000000000..9e36cf83d550
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_display.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_location.png b/core/res/res/drawable-xhdpi/perm_group_location.png
new file mode 100644
index 000000000000..4c49521af13e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_location.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_messages.png b/core/res/res/drawable-xhdpi/perm_group_messages.png
new file mode 100644
index 000000000000..f046d46b55bd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_messages.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_microphone.png b/core/res/res/drawable-xhdpi/perm_group_microphone.png
new file mode 100644
index 000000000000..bdb66e263b07
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_microphone.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_network.png b/core/res/res/drawable-xhdpi/perm_group_network.png
new file mode 100644
index 000000000000..fe1adadb6b52
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_network.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_personal_info.png b/core/res/res/drawable-xhdpi/perm_group_personal_info.png
new file mode 100644
index 000000000000..1ae418f677bf
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_personal_info.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_phone_calls.png b/core/res/res/drawable-xhdpi/perm_group_phone_calls.png
new file mode 100644
index 000000000000..288e15cf1e39
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_phone_calls.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_screenlock.png b/core/res/res/drawable-xhdpi/perm_group_screenlock.png
new file mode 100644
index 000000000000..bf3ec34218cf
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_screenlock.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_shortrange_network.png b/core/res/res/drawable-xhdpi/perm_group_shortrange_network.png
new file mode 100644
index 000000000000..5e1e240796eb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_shortrange_network.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_social_info.png b/core/res/res/drawable-xhdpi/perm_group_social_info.png
new file mode 100644
index 000000000000..2111a837ef43
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_social_info.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_status_bar.png b/core/res/res/drawable-xhdpi/perm_group_status_bar.png
new file mode 100644
index 000000000000..ce65380f6cf2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_status_bar.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_storage.png b/core/res/res/drawable-xhdpi/perm_group_storage.png
new file mode 100644
index 000000000000..4cd5c9b05002
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_storage.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_sync_settings.png b/core/res/res/drawable-xhdpi/perm_group_sync_settings.png
new file mode 100644
index 000000000000..24eb5797dd06
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_sync_settings.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_system_clock.png b/core/res/res/drawable-xhdpi/perm_group_system_clock.png
new file mode 100644
index 000000000000..36d1294f406f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_system_clock.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_system_tools.png b/core/res/res/drawable-xhdpi/perm_group_system_tools.png
new file mode 100644
index 000000000000..7b6cdd8f8717
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_system_tools.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_user_dictionary.png b/core/res/res/drawable-xhdpi/perm_group_user_dictionary.png
new file mode 100644
index 000000000000..c0106bba1d71
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_user_dictionary.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_user_dictionary_write.png b/core/res/res/drawable-xhdpi/perm_group_user_dictionary_write.png
new file mode 100644
index 000000000000..36bb395d7d4c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_user_dictionary_write.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_voicemail.png b/core/res/res/drawable-xhdpi/perm_group_voicemail.png
new file mode 100644
index 000000000000..eb17a631c10d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_voicemail.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_wallpaper.png b/core/res/res/drawable-xhdpi/perm_group_wallpaper.png
new file mode 100644
index 000000000000..be4663c9b7d0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_wallpaper.png
Binary files differ
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml b/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml
index 2495b6771458..ff65c619eddf 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml
@@ -156,8 +156,8 @@
<RelativeLayout
android:id="@+id/faceLockAreaView"
android:visibility="invisible"
- android:layout_width="512dip"
- android:layout_height="512dip"
+ android:layout_width="530dip"
+ android:layout_height="530dip"
android:layout_centerInParent="true"
android:background="@drawable/intro_bg">
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml b/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml
index 36d4a2ab06ed..60401c9b125c 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml
@@ -159,8 +159,8 @@
<RelativeLayout
android:id="@+id/faceLockAreaView"
android:visibility="invisible"
- android:layout_width="512dip"
- android:layout_height="512dip"
+ android:layout_width="440dip"
+ android:layout_height="440dip"
android:layout_centerInParent="true"
android:background="@drawable/intro_bg">
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_unlock_landscape.xml b/core/res/res/layout-sw600dp/keyguard_screen_unlock_landscape.xml
index 53ecbac2935a..68499f4b2a64 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_unlock_landscape.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_unlock_landscape.xml
@@ -127,8 +127,8 @@
<RelativeLayout
android:id="@+id/faceLockAreaView"
android:visibility="invisible"
- android:layout_width="512dip"
- android:layout_height="512dip"
+ android:layout_width="530dip"
+ android:layout_height="530dip"
android:layout_centerInParent="true"
android:background="@drawable/intro_bg">
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_unlock_portrait.xml b/core/res/res/layout-sw600dp/keyguard_screen_unlock_portrait.xml
index 577668fe0da0..086757d00b49 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_unlock_portrait.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_unlock_portrait.xml
@@ -122,8 +122,8 @@
<RelativeLayout
android:id="@+id/faceLockAreaView"
android:visibility="invisible"
- android:layout_width="512dip"
- android:layout_height="512dip"
+ android:layout_width="440dip"
+ android:layout_height="440dip"
android:layout_centerInParent="true"
android:background="@drawable/intro_bg">
diff --git a/core/res/res/layout/app_permission_item.xml b/core/res/res/layout/app_permission_item.xml
index 1bd267f43cb4..c448bd1dbaef 100644
--- a/core/res/res/layout/app_permission_item.xml
+++ b/core/res/res/layout/app_permission_item.xml
@@ -19,37 +19,33 @@
Contains the group name and a list of permission labels under the group.
-->
-<RelativeLayout
+<view class="android.widget.AppSecurityPermissions$PermissionItemView"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="wrap_content">
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:background="?android:attr/selectableItemBackground">
<ImageView
android:id="@+id/perm_icon"
- android:layout_width="30dip"
- android:layout_height="30dip"
- android:layout_alignParentLeft="true"
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:layout_marginLeft="16dp"
+ android:layout_marginRight="8dp"
android:scaleType="fitCenter" />
-
- <TextView
- android:id="@+id/permission_group"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textStyle="bold"
- android:paddingLeft="6dip"
- android:layout_toRightOf="@id/perm_icon"
+ <ImageView
android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
+ android:layout_height="match_parent"
+ android:background="?android:attr/dividerVertical" />
<TextView
- android:id="@+id/permission_list"
+ android:id="@+id/perm_name"
android:textAppearance="?android:attr/textAppearanceSmall"
- android:layout_marginTop="-4dip"
- android:paddingBottom="8dip"
- android:paddingLeft="6dip"
- android:layout_below="@id/permission_group"
- android:layout_toRightOf="@id/perm_icon"
+ android:textSize="16sp"
+ android:layout_marginLeft="8dp"
android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:layout_gravity="top|left" />
-</RelativeLayout>
+</view>
diff --git a/core/res/res/layout/app_permission_item_old.xml b/core/res/res/layout/app_permission_item_old.xml
new file mode 100644
index 000000000000..1bd267f43cb4
--- /dev/null
+++ b/core/res/res/layout/app_permission_item_old.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<!--
+ Defines the layout of a single permission item.
+ Contains the group name and a list of permission labels under the group.
+-->
+
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <ImageView
+ android:id="@+id/perm_icon"
+ android:layout_width="30dip"
+ android:layout_height="30dip"
+ android:layout_alignParentLeft="true"
+ android:scaleType="fitCenter" />
+
+
+ <TextView
+ android:id="@+id/permission_group"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textStyle="bold"
+ android:paddingLeft="6dip"
+ android:layout_toRightOf="@id/perm_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <TextView
+ android:id="@+id/permission_list"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:layout_marginTop="-4dip"
+ android:paddingBottom="8dip"
+ android:paddingLeft="6dip"
+ android:layout_below="@id/permission_group"
+ android:layout_toRightOf="@id/perm_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+</RelativeLayout>
diff --git a/core/res/res/layout/app_perms_summary.xml b/core/res/res/layout/app_perms_summary.xml
index 77dbc2e97479..509c502770f7 100755
--- a/core/res/res/layout/app_perms_summary.xml
+++ b/core/res/res/layout/app_perms_summary.xml
@@ -26,88 +26,17 @@
android:id="@+id/no_permissions"
android:text="@string/no_permissions"
android:textAppearance="?android:attr/textAppearanceMedium"
- android:paddingLeft="16dip"
- android:paddingRight="12dip"
+ android:paddingLeft="8dp"
+ android:paddingRight="8dp"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
- <!-- List view containing list of new permissions categorized by groups. -->
+ <!-- Populated with all permissions. -->
<LinearLayout
- android:id="@+id/new_perms_list"
+ android:id="@+id/perms_list"
android:orientation="vertical"
android:layout_width="match_parent"
- android:paddingLeft="16dip"
- android:paddingRight="12dip"
- android:layout_height="wrap_content" />
-
- <!-- List view containing list of dangerous permissions categorized by groups. -->
- <LinearLayout
- android:id="@+id/dangerous_perms_list"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:paddingLeft="16dip"
- android:paddingRight="12dip"
- android:layout_height="wrap_content" />
-
- <!-- Clickable area letting user display additional permissions. -->
- <LinearLayout
- android:id="@+id/show_more"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:visibility="gone"
- android:layout_marginTop="12dip"
- android:layout_marginBottom="16dip">
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider" />
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="16dip"
- android:paddingBottom="12dip"
- android:paddingLeft="16dip"
- android:duplicateParentState="true"
- android:background="?android:attr/selectableItemBackground">
-
- <TextView
- android:id="@+id/show_more_text"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:duplicateParentState="true"
- android:layout_alignTop="@+id/show_more_icon"
- android:layout_gravity="center_vertical"
- android:paddingLeft="36dip"
- android:layout_weight="1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
-
- <ImageView
- android:id="@id/show_more_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginRight="12dip" />
-
- </LinearLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider" />
-
- </LinearLayout>
-
- <!-- List view containing list of permissions that aren't dangerous. -->
- <LinearLayout
- android:id="@+id/non_dangerous_perms_list"
- android:orientation="vertical"
- android:paddingLeft="16dip"
- android:paddingRight="12dip"
- android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
diff --git a/core/res/res/layout/notification_template_base.xml b/core/res/res/layout/notification_template_base.xml
index ae2953797b19..63d20e473d6c 100644
--- a/core/res/res/layout/notification_template_base.xml
+++ b/core/res/res/layout/notification_template_base.xml
@@ -85,6 +85,16 @@
android:ellipsize="marquee"
android:visibility="gone"
/>
+ <TextView android:id="@+id/overflow_title"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ android:visibility="gone"
+ android:layout_weight="1"
+ />
<LinearLayout
android:id="@+id/line3"
android:layout_width="match_parent"
@@ -129,14 +139,5 @@
android:visibility="gone"
style="?android:attr/progressBarStyleHorizontal"
/>
- <LinearLayout
- android:id="@+id/actions"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:visibility="gone"
- >
- <!-- actions will be added here -->
- </LinearLayout>
</LinearLayout>
</FrameLayout>
diff --git a/core/res/res/layout/notification_template_big_base.xml b/core/res/res/layout/notification_template_big_base.xml
index 5de584df624d..097d15da9f1b 100644
--- a/core/res/res/layout/notification_template_big_base.xml
+++ b/core/res/res/layout/notification_template_big_base.xml
@@ -137,12 +137,13 @@
style="?android:attr/progressBarStyleHorizontal"
/>
<LinearLayout
- android:id="@+id/actions"
+ android:id="@+id/actions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:orientation="vertical"
android:visibility="gone"
- >
- <!-- actions will be added here -->
+ >
+ <!-- actions will be added here -->
</LinearLayout>
</LinearLayout>
</FrameLayout>
diff --git a/core/res/res/layout/notification_template_big_text.xml b/core/res/res/layout/notification_template_big_text.xml
index ee6adc6bb675..a225ab1dc266 100644
--- a/core/res/res/layout/notification_template_big_text.xml
+++ b/core/res/res/layout/notification_template_big_text.xml
@@ -100,7 +100,7 @@
/>
</LinearLayout>
<LinearLayout
- android:id="@+id/actions"
+ android:id="@+id/actions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
@@ -108,6 +108,16 @@
>
<!-- actions will be added here -->
</LinearLayout>
+ <TextView android:id="@+id/overflow_title"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ android:visibility="gone"
+ android:layout_weight="1"
+ />
<LinearLayout
android:id="@+id/line3"
android:layout_width="match_parent"
diff --git a/core/res/res/layout/notification_template_inbox.xml b/core/res/res/layout/notification_template_inbox.xml
index 82342d43317f..05a3d6292d23 100644
--- a/core/res/res/layout/notification_template_inbox.xml
+++ b/core/res/res/layout/notification_template_inbox.xml
@@ -87,6 +87,8 @@
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="end"
+ android:paddingTop="4dp"
+ android:paddingBottom="4dp"
android:visibility="gone"
/>
<TextView android:id="@+id/inbox_text1"
@@ -95,6 +97,8 @@
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="end"
+ android:paddingTop="4dp"
+ android:paddingBottom="4dp"
android:visibility="gone"
/>
<TextView android:id="@+id/inbox_text2"
@@ -103,6 +107,8 @@
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="end"
+ android:paddingTop="4dp"
+ android:paddingBottom="4dp"
android:visibility="gone"
/>
<TextView android:id="@+id/inbox_text3"
@@ -111,6 +117,8 @@
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="end"
+ android:paddingTop="4dp"
+ android:paddingBottom="4dp"
android:visibility="gone"
/>
<TextView android:id="@+id/inbox_text4"
@@ -119,9 +127,30 @@
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="end"
+ android:paddingTop="4dp"
+ android:paddingBottom="4dp"
android:visibility="gone"
/>
<LinearLayout
+ android:id="@+id/actions"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:visibility="gone"
+ >
+ <!-- actions will be added here -->
+ </LinearLayout>
+ <TextView android:id="@+id/overflow_title"
+ android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ android:visibility="gone"
+ android:layout_weight="1"
+ />
+ <LinearLayout
android:id="@+id/line3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -165,13 +194,5 @@
android:visibility="gone"
style="?android:attr/progressBarStyleHorizontal"
/>
- <LinearLayout
- android:id="@+id/actions"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:visibility="gone"
- >
- <!-- actions will be added here -->
- </LinearLayout>
</LinearLayout>
</FrameLayout>
diff --git a/core/res/res/layout/resolve_list_item.xml b/core/res/res/layout/resolve_list_item.xml
index c0404be5e003..abeb7ba03b80 100644
--- a/core/res/res/layout/resolve_list_item.xml
+++ b/core/res/res/layout/resolve_list_item.xml
@@ -18,39 +18,40 @@
*/
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:gravity="center_vertical"
- android:orientation="horizontal"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:paddingLeft="16dip"
- android:paddingRight="16dip">
+ android:gravity="center"
+ android:orientation="vertical"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:background="?android:attr/activatedBackgroundIndicator"
+ android:padding="16dp">
- <!-- Activity icon when presenting dialog -->
+ <!-- Extended activity info to distinguish between duplicate activity names -->
+ <TextView android:id="@android:id/text2"
+ android:textAppearance="?android:attr/textAppearance"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:minLines="2"
+ android:maxLines="2"
+ android:paddingLeft="4dip"
+ android:paddingRight="4dip" />
+
+ <!-- Activity icon when presenting dialog
+ Size will be filled in by ResolverActivity -->
<ImageView android:id="@+id/icon"
- android:layout_width="@android:dimen/app_icon_size"
- android:layout_height="@android:dimen/app_icon_size"
- android:scaleType="fitCenter" />
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:scaleType="fitCenter" />
- <LinearLayout
- android:orientation="vertical"
- android:gravity="center_vertical"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" >
- <!-- Activity name -->
- <TextView android:id="@android:id/text1"
- android:textAppearance="?android:attr/textAppearanceListItemSmall"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:maxLines="2"
- android:paddingLeft="16dip" />
- <!-- Extended activity info to distinguish between duplicate activity names -->
- <TextView android:id="@android:id/text2"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:maxLines="2"
- android:paddingLeft="16dip" />
- </LinearLayout>
+ <!-- Activity name -->
+ <TextView android:id="@android:id/text1"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:minLines="2"
+ android:maxLines="2"
+ android:paddingLeft="4dip"
+ android:paddingRight="4dip" />
</LinearLayout>
diff --git a/core/res/res/layout/resolver_grid.xml b/core/res/res/layout/resolver_grid.xml
new file mode 100644
index 000000000000..f10a59f0f6b0
--- /dev/null
+++ b/core/res/res/layout/resolver_grid.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* Copyright 2012, The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:divider="?android:attr/dividerHorizontal"
+ android:showDividers="middle"
+ android:dividerPadding="0dip">
+ <GridView
+ android:layout_gravity="center"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:id="@+id/resolver_grid"
+ android:numColumns="4"
+ android:columnWidth="128dp"
+ android:padding="16dp"
+ android:clipToPadding="false" />
+ <LinearLayout
+ android:id="@+id/button_bar"
+ android:visibility="gone"
+ style="?android:attr/buttonBarStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:layoutDirection="locale"
+ android:measureWithLargestChild="true">
+ <Button android:id="@+id/button_always"
+ android:layout_width="wrap_content"
+ android:layout_gravity="right"
+ android:layout_weight="1"
+ android:maxLines="2"
+ android:minHeight="@dimen/alert_dialog_button_bar_height"
+ style="?android:attr/buttonBarButtonStyle"
+ android:textSize="14sp"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:text="@string/activity_resolver_use_always"
+ android:onClick="onButtonClick" />
+ <Button android:id="@+id/button_once"
+ android:layout_width="wrap_content"
+ android:layout_gravity="left"
+ android:layout_weight="1"
+ android:maxLines="2"
+ style="?android:attr/buttonBarButtonStyle"
+ android:textSize="14sp"
+ android:minHeight="@dimen/alert_dialog_button_bar_height"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:text="@string/activity_resolver_use_once"
+ android:onClick="onButtonClick" />
+ </LinearLayout>
+</LinearLayout> \ No newline at end of file
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index f4ffa06f2b1a..3eeffe4b1774 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Jou boodskappe"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Lees en skryf jou SMS, e-pos en ander boodskappe."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Jou persoonlike inligting"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direkte toegang tot jou kontakte en kalender wat op die tablet gestoor is."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direkte toegang tot jou kontakte en kalender wat op die foon gestoor is."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Jou ligging"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitor jou fisiese ligging."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netwerkkommunikasie"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Kry toegang tot verskeie netwerkfunksies."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Jou rekeninge"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Kry toegang tot beskikbare rekeninge."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardewarekontroles"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Laervlak-toegang en -beheer van die stelsel."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ontwikkelingshulpmiddels"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Kenmerke net nodig vir programontwikkelaars."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Stoor"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Gebruik die USB-berging."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Lees die SD-kaart."</string>
@@ -335,7 +403,7 @@
<string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"Laat die program toe om die stelsel se beveiligde instellingsdata te verander. Nie vir gebruik deur normale programme nie."</string>
<string name="permlab_writeGservices" msgid="2149426664226152185">"verander die Google-dienstekaart"</string>
<string name="permdesc_writeGservices" msgid="1287309437638380229">"Laat die program toe om die Google-dienste-kaart te verander. Nie vir gebruik deur normale programme nie."</string>
- <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"laat loop as begin"</string>
+ <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"laat loop wanneer begin"</string>
<string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Laat die program toe om homself te begin so gou as moontlik nadat die stelsel laai. Dit maak dat dit langer neem vir die tablet om te begin, en dit laat die foon toe om die tablet stadiger te maak omdat dit altyd loop."</string>
<string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Laat die program toe om homself te begin so gou as moontlik nadat die stelsel laai. Dit maak dat dit langer neem vir die foon om te begin, en dit laat die foon toe om die foon stadiger te maak omdat dit altyd loop."</string>
<string name="permlab_broadcastSticky" msgid="7919126372606881614">"Stuur klewerige uitsending"</string>
@@ -396,10 +464,10 @@
<string name="permlab_reboot" product="default" msgid="2898560872462638242">"forseer foonherlaai"</string>
<string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Laat die program toe om die tablet te dwing om te herselflaai."</string>
<string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Laat die program toe om die foon te dwing om te herselflaai."</string>
- <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"gaan in by USB-geheue se lêerstelsel"</string>
+ <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"gaan in by USB-berging se lêerstelsel"</string>
<string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"gaan in by SD-kaart se lêerstelsel"</string>
<string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Laat die program toe om lêerstelsels vir verwyderbare berging te heg of te ontheg."</string>
- <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"vee USB-geheue uit"</string>
+ <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"vee USB-berging uit"</string>
<string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"vee SD-kaart uit"</string>
<string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"Laat die program toe om verwyderbare geheue te formateer."</string>
<string name="permlab_asec_access" msgid="3411338632002193846">"kry inligting oor interne berging"</string>
@@ -519,11 +587,11 @@
<string name="permdesc_readDictionary" msgid="8977815988329283705">"Laat die program toe om enige private woorde, name en frases te lees wat die gebruiker in die gebruikerwoordeboek gestoor het."</string>
<string name="permlab_writeDictionary" msgid="2296383164914812772">"skryf na gebruikergedefinieerde woordeboek"</string>
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"Laat die program toe om nuwe woorde in die gebruikerwoordeboek te skryf."</string>
- <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"lees jou USB-geheue se inhoud"</string>
+ <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"lees jou USB-berging se inhoud"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"lees jou SD-kaart se inhoud"</string>
- <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Laat die program toe om die USB-geheue se inhoud te lees, wat foto\'s en media kan insluit."</string>
+ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Laat die program toe om die USB-berging se inhoud te lees, wat foto\'s en media kan insluit."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Laat die program toe om die SD-kaart se inhoud te lees, wat foto\'s en media kan insluit."</string>
- <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"verander of vee die inhoud van jou USB-geheue uit"</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"verander of vee die inhoud van jou USB-berging uit"</string>
<string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"verander of vee die inhoud van jou SD-kaart uit"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Laat die program toe om die USB-geheue te skryf."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Laat die program toe om na die SD-kaart te skryf."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Geen SIM-kaart in foon nie."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Steek \'n SIM-kaart in."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Die SIM-kaart is weg of nie leesbaar nie. Steek \'n SIM-kaart in."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Jou SIM-kaart is permanent gedeaktiveer."\n" Kontak jou draadlose diensverskaffer vir \'n ander SIM-kaart."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Vorigesnit-knoppie"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Volgendesnit-knoppie"</string>
@@ -779,7 +849,7 @@
<string name="autofill_emirate" msgid="2893880978835698818">"Emiraat"</string>
<string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"lees jou web-boekmerke en geskiedenis"</string>
<string name="permdesc_readHistoryBookmarks" msgid="4577476392604595921">"Laat die program toe om al die URL\'e te lees wat die blaaier besoek het, en al blaaier se boekmerke ook."</string>
- <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"skryf webboekmerke en geskiedenis"</string>
+ <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"skryf webboekmerke en -geskiedenis"</string>
<string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="1757103804824209530">"Laat die program toe om die blaaier se geskiedenis of boekmerke wat op jou tablet gestoor is, te verander. Kwaadwillige programme kan dit gebruik om jou blaaier se data uit te vee of te verander."</string>
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="6693764355720719197">"Laat die program toe om die blaaier se geskiedenis of boekmerke wat op jou foon gestoor is, te verander. Kwaadwillige programme kan dit gebruik om jou blaaier se data uit te vee of te verander."</string>
<string name="permlab_setAlarm" msgid="1379294556362091814">"stel \'n wekker"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Stel"</string>
<string name="date_time_done" msgid="2507683751759308828">"Klaar"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Verstek"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NUUT: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUUT: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Geen toestemmings benodig nie"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Versteek"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Wys alle"</b></string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 003d4b3feb3d..fc47c6becb4d 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"መልዕክቶችዎ"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"ኤስ ኤም ኤስህን፣ ኢሜይልህን እና ሌላ መልዕክቶችህን አንብብና ፃፍ።"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"የግል መረጃዎ"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"በጡባዊዎ ላይ የተከማቹ እውቂያዎች እና ቀን መቁጠሪያጋ ቀጥታ ይድረሱ።"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"በስልኩ ላይ ወደ ተከማቸው ዕውቂያዎችዎ እና የቀን መቁጠሪያዎበቀጥታ ይድረሱ"</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"ስፍራዎ"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"ያለህበትን አካባቢ ተቆጣጠር።"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"የአውታረ መረብ ግኑኙነት"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"የተለያዩ የአውታረ መረብ ባህሪያትን ድረስ።"</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"መለያዎችዎ"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">" ለተገኙት መለያዎች ድረስ"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"የሃርድዌር ቁጥጥሮች"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"የስርዓቱ ዝቅተኛ-ደረጃ ድረስ እና ጠብቅ"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"የግንባታ መሣሪያዎች"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"ባህሪያት ለመተግበሪያ ገንቢዎች ብቻ ያስፈልጋሉ።"</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"ማከማቻ"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"የUSB ማከማቻ ድረስ።"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD ካርድ ድረስ"</string>
@@ -267,7 +335,7 @@
<string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"ትግበራ ሙሉ የመጠባበቂያ ማረጋገጫ UI ለማስነሳት ይፈቅዳል። በሌላ በማንኛውም እንዳይገለገል።"</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"ያልተፈቀደ Windows አሳይ"</string>
<string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"በውስጣዊ የስርዓት የተጠቃሚ በይነገፅ ለመጠቀም የተዘጋጁ መስኮቶችን ለመፍጠር ለመተግበሪያው ይፈቅዳሉ። ለመደበኛ መተግበሪያዎች አገልግሎት አይደለም።"</string>
- <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"በሌሎች መተግበሪያዎች ላይ ሳብ"</string>
+ <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"በሌሎች መተግበሪያዎች ላይ ሳል"</string>
<string name="permdesc_systemAlertWindow" msgid="8507863469978066409">"የስርዓት ማንቂያ መስኮትን ለማሳየት ለመተግበሪያው ይፈቅዳሉ፡፡ ተንኮል አዘል መተግበሪያዎች ጠቅላላውን ማሳያ ሊቆጣጠሩት ይችላሉ፡፡"</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"የሁሉንም እነማ ፍጥነት ቀይር"</string>
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"የአለም አቀፍ ተልወስዋሽ ምስሎች ፍጥነት(ፈጣን ወይም ቀርፋፋ ተልወስዋሽ ምስሎችን) በማንኛውም ጊዜ ለመለወጥ ለመተግበሪያው ይፈቅዳሉ።"</string>
@@ -335,7 +403,7 @@
<string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"የስርዓቱን ደህንነቱ የተጠበቀ ቅንጅቶችን ውሂብ ለመቀየር ለመተግበሪያው ይፈቅዳሉ፡፡ለመደበኛ ትግበራዎች አያስፈልግም።"</string>
<string name="permlab_writeGservices" msgid="2149426664226152185">"የGoogle አገልግሎቶች ካርታን ቀይር"</string>
<string name="permdesc_writeGservices" msgid="1287309437638380229">"ትግበራ የGoogle ካርታ አገልግሎቶችን ለመቀየር ይፈቅዳል።ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
- <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"ጅማሬ ላይ አሂድ"</string>
+ <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"መነሻ ላይ አሂድ"</string>
<string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"ስርዓቱ ማስጀመር እንደጨረሰ ወዲያውኑ እራሱን እንዲያስጀምር ለመተግበሪያው ይፈቅዳሉ፡፡ ይሄ ጡባዊ ተኮን ለማስጀመር ብዙ ጊዜ ሊፈጅ ይችላል እና ሁልጊዜ በማስኬድ ጠቅላላውን ጡባዊ ተኮን እንዲቀራፈፍ ለመተግበሪያው ይፈቅዳል፡፡"</string>
<string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"ወዲያውኑ ስርዓቱ ማስነሳት ሲጨርስ ራሱን እንዲያስጀምር ለመተግበሪያው ይፈቅዳሉ፡፡ ይሄ ስልኩን ለማስጀመር ብዙ ጊዜ እንዲወስድ ሊያደርገው ይችላል እና ሁልጊዜ በማስኬድ ሁሉንም ስልክ ለማንቀራፈፍ ለመተግበሪያው ይፈቅዳል፡፡"</string>
<string name="permlab_broadcastSticky" msgid="7919126372606881614">"ልጥፍ ዝርዝር ላክ"</string>
@@ -353,9 +421,9 @@
<string name="permlab_writeCallLog" msgid="8552045664743499354">"የጥሪ ምዝግብ ማስታወሻን ፃፍ"</string>
<string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የጡባዊተኮህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።"</string>
<string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የስልክህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።"</string>
- <string name="permlab_readProfile" msgid="4701889852612716678">"የራስህ የእውቂያ ካርድ አንብብ"</string>
+ <string name="permlab_readProfile" msgid="4701889852612716678">"የራስህን የእውቂያ ካርድ አንብብ"</string>
<string name="permdesc_readProfile" product="default" msgid="94520753797630679">"ልክ እንደ አንተ ስም እና የዕውቂያ መረጃ ፣ በአንተ መሳሪያ ወስጥ የተከማቹ የግል መገለጫ መረጃ ለማንበብ ለመተግበሪያው ይፈቅዳሉ፡፡ይሄም ማለት ሌሎች መተግበሪያዎች ሊለዩህ ይችላሉ እና ለሌሎች የመገለጫ መረጃህን ይልካሉ፡፡"</string>
- <string name="permlab_writeProfile" msgid="907793628777397643">"የራስህ የዕውቂያ ካርድ አስተካክል"</string>
+ <string name="permlab_writeProfile" msgid="907793628777397643">"የራስህን የዕውቂያ ካርድ አስተካክል"</string>
<string name="permdesc_writeProfile" product="default" msgid="4637366723793045603">"ልክ እንደ አንተ ስም እና የዕውቂያ መረጃ ፣ በአንተ መሳሪያ ወስጥ የተከማቹ የግል መገለጫ መረጃ ለመለወጥ ወይም ለማከል ለመተግበሪያው ይፈቅዳሉ፡፡ይሄም ማለት ሌሎች መተግበሪያዎች ሊለዩህ ይችላሉ እና ለሌሎች የመገለጫ መረጃህን ይልካሉ፡፡"</string>
<string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"የአንተን ማህበራዊ የውይይት ክፍሎች አንብብ"</string>
<string name="permdesc_readSocialStream" product="default" msgid="3419050808547335320">" ከአንተ ጓደኞች ማህበራዊ ዝማኔዎችን እንዲደርስባቸው እና እንዲያመሳስል ለመተግበሪያውይፈቅዳሉ፡፡ ተንኮል አዘል መተግበሪያዎች ይህን መዳረሻ ባንተና በጓደኞችህ መካከል በማህበራዊ አውታረመረቦች ያሉ የግል ተግባቦቶችን ለመዳረስ ሊጠቀሙበት ይችላሉ፡፡"</string>
@@ -452,7 +520,7 @@
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"ለስልኩ ሀርድዌር ሙሉመድረስበመፍቀድእንደ ዝቅተኛ-ደረጃ አምራች ሙከራ አሂድ። የሚገኘው ስልኩ በአምራች ሙከራ ሁነታ ላይ ሲአሄድ ብቻ ነው።"</string>
<string name="permlab_setWallpaper" msgid="6627192333373465143">"ልጣፍአዘጋጅ"</string>
<string name="permdesc_setWallpaper" msgid="7373447920977624745">"የስረዓቱን ልጥፍ ለማዘጋጀት ለመተግበሪያው ይፈቅዳሉ ።"</string>
- <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"የግድግዳ ወረቀትህ መጠን አስተካክል"</string>
+ <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"የልጣፍህን መጠን አስተካክል"</string>
<string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"የስርዓቱን ልጥፍ መጠንለማዘጋጀት ለመተግበሪያው ይፈቅዳሉ፡፡"</string>
<string name="permlab_masterClear" msgid="2315750423139697397">"ስርዓትን ወደ ፋብሪካ ነባሪዎች ዳግም አስጀምር"</string>
<string name="permdesc_masterClear" msgid="3665380492633910226">"ወደ ፋብሪካው ቅንብሮች ሙሉ በሙሉ ስርዓቱን ዳግም ለማስጀመር ለመተግበሪያው ይፈቅዳሉ ፤ ሁሉንም ውሂብ፣ አወቃቀር፣ እና የተጫኑ መተግበሪያዎችን በማጥፈት፡፡"</string>
@@ -519,12 +587,12 @@
<string name="permdesc_readDictionary" msgid="8977815988329283705">" ተጠቃሚው በተጠቃሚ መዝገበ ቃላት ሊያከማች የቻለውን ማንኛውም የግል ቃላት፣ ስሞች፣እና ሀረጎች ለማንበብ ለመተግበሪያው ይፈቅዳሉ፡፡"</string>
<string name="permlab_writeDictionary" msgid="2296383164914812772">"በተጠቃሚ በተወሰነ መዝገበ ቃላት ፃፍ"</string>
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"በተጠቃሚ መዝገበ ቃላት ውስጥ አዲስ ቃል እንዲጽፍ ለመተግበሪያው ይፈቅዳሉ፡፡"</string>
- <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"የUSB ማከማቻህ ይዘቶችን አንብብ"</string>
- <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"የSD ካርድህ ይዘቶች አንብብ"</string>
+ <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"የUSB ማከማቻህን ይዘቶች አንብብ"</string>
+ <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"የSD ካርድህን ይዘቶች አንብብ"</string>
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"መተግበሪያው የUSB ማከማቻ ይዘቶችን እንዲያነብ ይፈቅዳል፣ ይህም ፎቶዎችና ሚዲያ ሊያካትት ይችላል።"</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"መተግበሪያው የSD ካርድ ይዘቶችን እንዲያነብ ይፈቅዳል፣ ይህም ፎቶዎችና ሚዲያ ሊያካትት ይችላል።"</string>
- <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"የUSB ማከማቻህ ይዘቶችን ቀይር ወይም ሰርዝ"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"የSD ካርድህ ይዘቶችን ቀይር ወይም ሰርዝ"</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"የUSB ማከማቻህን ይዘቶች ቀይር ወይም ሰርዝ"</string>
+ <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"የSD ካርድህን ይዘቶች ቀይር ወይም ሰርዝ"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"ወደ USB ማህደረ ትውስታው ለመፃፍ ለመተግበሪያው ይፈቅዳሉ፡፡"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"መተግበሪያውን ወደ SD ካርድ ለመፃፍ ይፈቅዳል።"</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"የውስጥ ማህደረ መረጃ ማከማቻ ይዘቶችን ቀይር/ሰርዝ"</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"በስልክ ውስጥ ምንም SIM ካርድ የለም።"</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"ሲም ካርድ አስገባ፡፡"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM ካርዱ ጠፍቷል ወይም መነበብ አይችልም።እባክህ SIM ካርድ አስገባ።"</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM ካርድህ በቋሚነት ቦዝኗል።"\n" ለሌላ SIM ካርድ የገመድ አልባ አገልግሎት አቅራቢህ ጋር ተገናኝ።"</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"የቀድሞ ዝርዝር አዝራር"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"ቀጣይ ዝርዝር አዝራር"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"አዘጋጅ"</string>
<string name="date_time_done" msgid="2507683751759308828">"ተጠናቋል"</string>
<string name="default_permission_group" msgid="2690160991405646128">"ነባሪ"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"አዲስ፦ "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"አዲስ፦ "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"ምንም ፍቃዶች አይጠየቁም"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"ደብቅ "</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"ሁሉንም አሳይ"</b></string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index eceea90ccf92..8c2e361c237f 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"رسائلك"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"قراءة وكتابة الرسائل القصيرة SMS والرسائل الإلكترونية والرسائل الأخرى."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"معلوماتك الشخصية"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"الدخول المباشر إلى جهات اتصالك والتقويم المخزنين على الجهاز اللوحي."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"الدخول المباشر إلى التقويم وجهات الاتصال المخزّنة على الهاتف."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"موقعك"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"يمكنك مراقبة موقعك الفعلي."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"اتصال الشبكة"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"يمكنك الدخول إلى ميزات متعددة عبر الشبكة."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"حساباتك"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"الوصول إلى الحسابات المتاحة."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"عناصر التحكم بالأجهزة"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"دخول المستوى الأقل والتحكم بالنظام."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"أدوات التطوير"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"الميزات مطلوبة لمطوّري التطبيقات فقط."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"التخزين"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"الدخول إلى وحدة تخزين USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"الدخول إلى بطاقة SD."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"ليس هناك بطاقة SIM في الهاتف."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"أدخل بطاقة SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"بطاقة SIM مفقودة أو غير قابلة للقراءة. أدخل بطاقة SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"تم تعطيل بطاقة SIM بشكل دائم."\n" اتصل بمقدم خدمة اللاسلكي للحصول على بطاقة SIM أخرى."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"زر المقطع الصوتي السابق"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"زر المقطع الصوتي التالي"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"تعيين"</string>
<string name="date_time_done" msgid="2507683751759308828">"تم"</string>
<string name="default_permission_group" msgid="2690160991405646128">"افتراضي"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"جديد: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"جديد: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"لا أذونات مطلوبة"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"إخفاء"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"عرض الكل"</b></string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 5672aca5c453..1a4d0d55f44d 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Вашыя паведамленні"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Счытваць і запісваць вашы SMS-паведамленні, паведамленні электроннай пошты і іншыя паведамленні."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Вашая персанальная інфармацыя"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Прамы доступ да кантактаў і календара, якія захоўваюцца на планшэце."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Прамы доступ да кантактаў і календара, захаваных на тэлефоне."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Ваша месцазнаходжанне"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Кантраляваць сваё фізічнае месцазнаходжанне."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Сеткавая сувязь"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Доступ да розных функцый сеткі."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Вашыя ўліковыя запісы"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Доступ да дзеючых уліковых запісаў."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Кіраванне апаратным забеспячэннем"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ніжні ўзровень доступу і кіравання сістэмай."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Сродкі распрацоўкі"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функцыi, патрэбныя толькі для распрацоўшчыкаў прыкладанняў."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Сховішча"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Атрымаць доступ да USB-назапашвальнiка."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ да SD-карты."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"У тэлефоне няма SIM-карты."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Усталюйце SIM-карту."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-карта адсутнічае ці не чытаецца. Устаўце SIM-карту."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Ваша SIM-карта была адключана назаўсёды."\n" Звяжыцеся з аператарам бесправадной сувязі, каб атрымаць іншую SIM-карту."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Кнопка папярэдняй кампазiцыi"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Кнопка наступнай кампазiцыi"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Задаць"</string>
<string name="date_time_done" msgid="2507683751759308828">"Гатова"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Па змаўчанні"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"НОВАЕ: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВАЕ: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Дазволу не патрабуецца"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Не паказваць"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Паказаць усе"</b></string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 71aab1c8d51a..0ab08d4f8d78 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Вашите съобщения"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Четене и запис на вашите SMS, имейли и други съобщения."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Вашите лични данни"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Пряк достъп до контактите и календара ви, съхранени в таблета."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Пряк достъп до контактите и календара ви, съхранени в телефона."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Местоположение"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Наблюдавайте физическото си местоположение."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Мрежова комуникация"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Осъществявайте достъп до различни мрежови функции."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Вашите профили"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Достъп до наличните профили."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Контрол върху хардуера"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Достъп и контрол на системата на ниско ниво."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Инструменти за програмиране"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функции, необходими само за програмисти на приложения."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Съхранение"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Достъп до USB хранилището."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Достъп до SD картата."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"В телефона няма SIM карта."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Поставете SIM карта."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM картата липсва или е нечетлива. Поставете SIM карта."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM картата ви е деактивирана за постоянно."\n"Свържете се с оператора на безжичната си връзка, за да получите друга."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Бутон за предишния запис"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Бутон за следващия запис"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Задаване"</string>
<string name="date_time_done" msgid="2507683751759308828">"Готово"</string>
<string name="default_permission_group" msgid="2690160991405646128">"По подразбиране"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"НОВО: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВО: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Не се изискват разрешения"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Скриване"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Показване на всички"</b></string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index ce789df4bc82..c9d7fe042a5e 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -168,12 +168,43 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Missatges"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Llegeix i escriu SMS, correus electrònics i altres missatges."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informació personal"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Accés directe als contactes i al calendari emmagatzemat a la tauleta."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Accés directe als contactes i al calendari emmagatzemats al telèfon."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Accés directe a informació sobre tu, emmagatzemada a la targeta de contacte."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Informació social"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Accés directe a informació sobre els teus contactes i sobre les teves connexions socials."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Ubicació"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Supervisa la teva ubicació física."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicació de xarxa"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accedeix a diverses funcions de xarxa."</string>
+ <string name="permgrouplab_shortRangeNetwork" msgid="4504840216096355984">"Bluetooth i NFC"</string>
+ <string name="permgroupdesc_shortRangeNetwork" msgid="8821013030346680806">"Accés a xarxes i dispositius Bluetooth o NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Configuració d\'àudio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Canviar la configuració de l\'àudio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afectar la bateria"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Fer servir funcions que poden consumir bateria ràpidament."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendari"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Accés directe a calendaris i a esdeveniments."</string>
+ <string name="permgrouplab_dictionary" msgid="8114410334955871144">"Diccionari de l\'usuari"</string>
+ <string name="permgroupdesc_dictionary" msgid="40926483968949978">"Accés directe al diccionari de l\'usuari."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcadors i historial"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Accés directe a l\'historial de marcadors i de navegació."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarma"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Definir l\'alarma."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Bústia de veu"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Accés directe a la bústia de veu."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Micròfon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Accés directe al micròfon per enregistrar l\'àudio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Càmera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Accés directe a la càmera per a la captura d\'imatges o de vídeos."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informació de les aplicacions"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Capacitat d\'afectar el rendiment d\'altres aplicacions del dispositiu."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Fons de pantalla"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Canviar la configuració del fons de pantalla del dispositiu."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Rellotge"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Canviar l\'hora o la zona horària del dispositiu."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barra d\'estat"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Canviar la configuració de la barra d\'estat del dispositiu."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Configuració de sincronització"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Accedir a la configuració de sincronització."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Comptes"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accedeix als comptes disponibles."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controls de maquinari"</string>
@@ -184,6 +215,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Accés de nivell inferior i control del sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Eines de desenvolupament"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funcions que només necessiten els desenvolupadors d\'aplicacions."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"IU d\'altres aplicacions"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Afectar la IU d\'altres aplicacions."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Emmagatzematge"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accedeix a l\'emmag. USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accedeix a la targeta SD."</string>
@@ -702,6 +735,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"No hi ha cap targeta SIM al telèfon."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Insereix una targeta SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Falta la targeta SIM o no es pot llegir. Insereix-ne una."</string>
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Targeta SIM no utilitzable."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"La targeta SIM està desactivada permanentment."\n" Contacta amb el teu proveïdor de serveis sense fil per obtenir-ne una altra."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botó de pista anterior"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botó de pista següent"</string>
@@ -1043,7 +1077,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Defineix"</string>
<string name="date_time_done" msgid="2507683751759308828">"Fet"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Predeterminat"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NOU: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOU: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"No cal cap permís"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Amaga"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostra\'ls tots"</b></string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 9c545475fd9c..6faf0fe4e96c 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vaše zprávy"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Čtení a zápis zpráv SMS, e-mailů a dalších zpráv."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vaše osobní informace"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Přímý přístup k vašim kontaktům a kalendáři v tabletu."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Přímý přístup k vašim kontaktům a kalendáři v telefonu."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Vaše poloha"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Sledovat vaši fyzickou polohu."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Síťová komunikace"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Přístup k různým funkcím sítě."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaše účty"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Přístup k dostupným účtům."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Řízení hardwaru"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Nízkoúrovňový přístup a kontrola nad systémem."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Nástroje pro vývojáře"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkce pouze pro vývojáře aplikací."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Úložiště"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Přístup do úložiště USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Přístup ke kartě SD."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"V telefonu není žádná SIM karta."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Vložte SIM kartu."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM karta chybí nebo je nečitelná. Vložte SIM kartu."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Vaše SIM karta byla natrvalo zablokována."\n" Požádejte svého poskytovatele bezdrátových služeb o další SIM kartu."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Tlačítko Předchozí stopa"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Tlačítko Další stopa"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Nastavit"</string>
<string name="date_time_done" msgid="2507683751759308828">"Hotovo"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Výchozí"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NOVÉ: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVÉ: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Nejsou vyžadována žádná oprávnění"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Skrýt"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Zobrazit vše"</b></string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 8dfed2f6fb4c..9570ef9cbd3c 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -168,12 +168,43 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Dine beskeder"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Læs og skriv sms-beskeder, e-mails og andre beskeder."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Dine personlige oplysninger"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Få direkte adgang til dine kontakter og din kalender, der er gemt på tabletcomputeren."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Få direkte adgang til dine kontakter og din kalender, der er gemt på telefonen."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direkte adgang til oplysninger om dig, som er gemt på dit kontaktkort."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Dine sociale oplysninger"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direkte adgang til oplysninger om dine kontaktpersoner og sociale forbindelser."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Din placering"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Overvåg din fysiske placering."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netværkskommunikation"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Få adgang til forskellige netværksfunktioner."</string>
+ <string name="permgrouplab_shortRangeNetwork" msgid="4504840216096355984">"Bluetooth og NFC"</string>
+ <string name="permgroupdesc_shortRangeNetwork" msgid="8821013030346680806">"Adgang til Bluetooth- eller NFC-netværk og -enheder."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Lydindstillinger"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Skifte lydindstillinger."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Påvirker batteriet"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Bruge funktioner, der hurtigt kan dræne batteriet."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direkte adgang til kalender og begivenheder."</string>
+ <string name="permgrouplab_dictionary" msgid="8114410334955871144">"Brugerordbog"</string>
+ <string name="permgroupdesc_dictionary" msgid="40926483968949978">"Direkte adgang til brugerordbogen."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bogmærker og historik"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direkte adgang til bogmærker og browserhistorik."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Indstille vækkeuret."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Telefonsvarer"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direkte adgang til telefonsvarer."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direkte adgang til mikrofonen, så der kan optages lyd."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direkte adgang til kamera, så der kan tages billeder eller optages video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Oplysninger om dine applikationer"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Evne til at påvirke andre applikationers adfærd på din enhed."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Baggrund"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Ændre enhedens baggrundsindstillinger."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Ur"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Ændre klokkeslæt eller tidszone på enheden."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusbjælke"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Ændre indstillinger for enhedens statusbjælke."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synkronisering"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Adgang til synkroniseringsindstillingerne."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Dine konti"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Få adgang til de tilgængelige konti."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardwarekontroller"</string>
@@ -184,6 +215,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Adgang og kontrol til systemet på lavere niveau."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Udviklingsværktøjer"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funktioner, der kun er nødvendige for udviklere af apps."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Andre applikationers brugergrænseflade"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Påvirke brugergrænsefladen for andre applikationer."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Få adgang til USB-lager."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Få adgang til SD-kortet."</string>
@@ -195,7 +228,7 @@
<string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Tillader, at appen kan udvide og skjule statusbjælken."</string>
<string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"omdirigere udgående opkald"</string>
<string name="permdesc_processOutgoingCalls" msgid="1152111671618301044">"Tillader, at appen kan behandle udgående opkald og ændre det nummer, der ringes op til. Ondsindede apps kan overvåge, omdirigere eller forhindre udgående opkald."</string>
- <string name="permlab_receiveSms" msgid="8673471768947895082">"modtage tekstbeskeder (sms)"</string>
+ <string name="permlab_receiveSms" msgid="8673471768947895082">"modtage tekstbeskeder (SMS)"</string>
<string name="permdesc_receiveSms" msgid="8107887121893611793">"Tillader, at appen kan modtage og behandle sms-beskeder. Ondsindede apps kan overvåge dine beskeder eller slette dem uden at vise dem til dig."</string>
<string name="permlab_receiveMms" msgid="1821317344668257098">"modtage tekstbeskeder (MMS)"</string>
<string name="permdesc_receiveMms" msgid="1424805308566612086">"Tillader, at appen kan modtage og behandle mms-beskeder. Ondsindede apps kan overvåge dine beskeder eller slette dem uden at vise dem til dig."</string>
@@ -207,10 +240,10 @@
<string name="permdesc_sendSms" msgid="906546667507626156">"Tillader, at appen kan sende sms-beskeder. Ondsindede apps kan medføre store omkostninger ved at sende beskeder uden din bekræftelse."</string>
<string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"sende sms-meddelelser uden bekræftelse"</string>
<string name="permdesc_sendSmsNoConfirmation" msgid="3437759207020400204">"Tillader, at appen kan sende sms-beskeder. Ondsindede apps kan koste dig penge, hvis de sender beskeder uden din bekræftelse."</string>
- <string name="permlab_readSms" msgid="8745086572213270480">"læse dine tekstbeskeder (sms eller MMS)"</string>
+ <string name="permlab_readSms" msgid="8745086572213270480">"læse dine tekstbeskeder (SMS eller MMS)"</string>
<string name="permdesc_readSms" product="tablet" msgid="2341692916884515613">"Tillader, at appen kan læse sms-beskeder, der er gemt på din tablet eller dit SIM-kort. Ondsindede apps kan læse dine fortrolige beskeder."</string>
<string name="permdesc_readSms" product="default" msgid="5653850482025875493">"Tillader, at appen kan læse sms-beskeder, der er gemt på din telefon eller dit SIM-kort. Ondsindede apps kan læse dine fortrolige beskeder."</string>
- <string name="permlab_writeSms" msgid="3216950472636214774">"redigere dine tekstbeskeder (sms eller MMS)"</string>
+ <string name="permlab_writeSms" msgid="3216950472636214774">"redigere dine tekstbeskeder (SMS eller MMS)"</string>
<string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Tillader, at appen kan skrive til sms-beskeder, der er gemt på din tablet eller på SIM-kortet. Ondsindede apps kan slette dine beskeder."</string>
<string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Tillader, at appen kan skrive til sms-beskeder, der er gemt på din telefon eller dit SIM-kort. Ondsindede apps kan slette dine beskeder."</string>
<string name="permlab_receiveWapPush" msgid="5991398711936590410">"modtage tekstbeskeder (WAP)"</string>
@@ -267,7 +300,7 @@
<string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Tillader, at appen kan åbne brugergrænsefladen til bekræftelse af komplet sikkerhedskopiering. Må ikke anvendes af nogen app."</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"vis uautoriserede vinduer"</string>
<string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Tillader, at appen kan oprette vinduer, der er beregnet til brugergrænsefladen i det interne system. Anvendes ikke af normale apps."</string>
- <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"overskrive andre apps"</string>
+ <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"tegne over andre apps"</string>
<string name="permdesc_systemAlertWindow" msgid="8507863469978066409">"Tillader, at appen kan vise vinduer med systemmeddelelser. Ondsindede apps kan overtage hele skærmen."</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"rediger global animationshastighed"</string>
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Tillader, at appen til enhver tid kan ændre den globale animationshastighed (hurtigere eller langsommere animationer)."</string>
@@ -702,6 +735,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Der er ikke noget SIM-kort i telefonen."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Indsæt et SIM-kort."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-kortet mangler eller kan ikke læses. Indsæt et SIM-kort."</string>
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Ubrugeligt SIM-kort."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Dit SIM-kort er blevet permanent deaktiveret."\n"Kontakt din tjenesteudbyder for at få et nyt SIM-kort."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Knap til forrige nummer"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Knap til næste nummer"</string>
@@ -1043,7 +1077,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Angiv"</string>
<string name="date_time_done" msgid="2507683751759308828">"Udført"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Standard"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NYHED! "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NYHED! "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Der kræves ingen tilladelser"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Skjul"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Vis alle"</b></string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 7f0b49b4f30f..d843a64718cc 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Ihre Nachrichten"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS, E-Mails und andere Nachrichten lesen und schreiben"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Ihre persönlichen Informationen"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direkter Zugriff auf die Kontakte und den Kalender Ihres Tablets"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direkter Zugriff auf die Kontakte und den Kalender Ihres Telefons"</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Ihren Standort"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Ihren physischen Standort überwachen"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netzkommunikation"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Zugriff auf verschiedene Netzwerkfunktionen"</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Ihre Konten"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Zugriff auf verfügbare Konten"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardware-Steuerelemente"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Zugriff und Steuerung des Systems auf niedrigerer Ebene."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Entwickler-Tools"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funktionen nur für App-Entwickler vorgesehen"</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Speicher"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Zugriff auf USB-Speicher"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Zugriff auf SD-Karte"</string>
@@ -464,7 +532,7 @@
<string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Ermöglicht der App, die Zeitzone des Telefons zu ändern"</string>
<string name="permlab_accountManagerService" msgid="4829262349691386986">"Als Konto-Manager fungieren"</string>
<string name="permdesc_accountManagerService" msgid="1948455552333615954">"Ermöglicht der App, Anrufe an Kontoauthentifizierer zu tätigen"</string>
- <string name="permlab_getAccounts" msgid="1086795467760122114">"Konten auf dem Gerät finden"</string>
+ <string name="permlab_getAccounts" msgid="1086795467760122114">"Konten auf dem Gerät suchen"</string>
<string name="permdesc_getAccounts" product="tablet" msgid="3238360555257773358">"Ermöglicht der App, eine Liste der dem Tablet bekannten Konten abzurufen"</string>
<string name="permdesc_getAccounts" product="default" msgid="2735689364629830348">"Ermöglicht der App, eine Liste der dem Telefon bekannten Konten abzurufen"</string>
<string name="permlab_authenticateAccounts" msgid="5265908481172736933">"Konten erstellen und Passwörter festlegen"</string>
@@ -515,14 +583,14 @@
<string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Ermöglicht der App, Details zu den zurzeit synchronisierten Feeds abzurufen"</string>
<string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"abonnierte Feeds schreiben"</string>
<string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Ermöglicht der App, Änderungen an kürzlich synchronisierten Feeds vorzunehmen. Schädliche Apps können so Ihre synchronisierten Feeds ändern."</string>
- <string name="permlab_readDictionary" msgid="4107101525746035718">"Begriffe lesen, die ich zum Wörterbuch hinzugefügt habe"</string>
+ <string name="permlab_readDictionary" msgid="4107101525746035718">"Begriffe lesen, die Sie zum Wörterbuch hinzugefügt haben"</string>
<string name="permdesc_readDictionary" msgid="8977815988329283705">"Ermöglicht der App, alle privaten Wörter, Namen und Ausdrücke zu lesen, die ein Nutzer in seinem Wörterbuch gespeichert hat"</string>
<string name="permlab_writeDictionary" msgid="2296383164914812772">"In benutzerdefiniertes Wörterbuch schreiben"</string>
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"Ermöglicht der App, dem Nutzerwörterbuch neue Einträge hinzuzufügen"</string>
<string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"USB-Speicherinhalte lesen"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"SD-Karteninhalte lesen"</string>
- <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Ermöglicht der App, die Inhalte des USB-Speichers, einschließlich Fotos und Medien, zu lesen"</string>
- <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Ermöglicht der App, die Inhalte der SD-Karte, einschließlich Fotos und Medien, zu lesen"</string>
+ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Ermöglicht der App, die Inhalte des USB-Speichers einschließlich Fotos und Medien, zu lesen"</string>
+ <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Ermöglicht der App, die Inhalte der SD-Karte einschließlich Fotos und Medien, zu lesen"</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"USB-Speicherinhalte ändern oder löschen"</string>
<string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"SD-Karteninhalte ändern oder löschen"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Ermöglicht der App, in den USB-Speicher zu schreiben"</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Keine SIM-Karte im Telefon"</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Legen Sie eine SIM-Karte ein."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-Karte fehlt oder ist nicht lesbar. Bitte legen Sie eine SIM-Karte ein."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Ihre SIM-Karte wurde dauerhaft deaktiviert."\n" Wenden Sie sich an Ihren Mobilfunkanbieter, um eine andere SIM-Karte zu erhalten."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Schaltfläche für vorherigen Track"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Schaltfläche für nächsten Track"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Speichern"</string>
<string name="date_time_done" msgid="2507683751759308828">"Fertig"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Standard"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"Neu: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"Neu: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Keine Berechtigungen erforderlich"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Ausblenden"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Alle anzeigen"</b></string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index eb099c7f5971..1f44b1b4db3f 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -168,12 +168,43 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Τα μηνύματά σας"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Ανάγνωση και εγγραφή μηνυμάτων SMS, μηνυμάτων ηλεκτρονικού ταχυδρομείου και άλλων μηνυμάτων."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Οι προσωπικές σας πληροφορίες"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Άμεση πρόσβαση στις επαφές και στο ημερολόγιό σας που είναι αποθηκευμένα στο tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Άμεση πρόσβαση στις επαφές και στο ημερολόγιό σας που είναι αποθηκευμένα στο τηλέφωνο."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Άμεση πρόσβαση σε πληροφορίες σχετικά με εσάς, οι οποίες είναι αποθηκευμένες στην κάρτα επαφών σας."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Οι κοινωνικές πληροφορίες σας"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Άμεση πρόσβαση σε πληροφορίες σχετικά με τις επαφές και τις κοινωνικές συνδέσεις σας."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Η τοποθεσία σας"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Παρακολούθηση της φυσικής τοποθεσίας σας."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Επικοινωνία δικτύου"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Πρόσβαση σε διάφορες λειτουργίες δικτύου."</string>
+ <string name="permgrouplab_shortRangeNetwork" msgid="4504840216096355984">"Bluetooth και NFC"</string>
+ <string name="permgroupdesc_shortRangeNetwork" msgid="8821013030346680806">"Πρόσβαση δικτύων και συσκευών Bluetooth ή NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ρυθμίσεις ήχου"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Αλλαγή ρυθμίσεων ήχου."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Επηρεάζει την μπαταρία"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Χρήση λειτουργιών που μπορούν να εξαντλήσουν γρήγορα την μπαταρία."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Ημερολόγιο"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Άμεση πρόσβαση σε ημερολόγιο και συμβάντα."</string>
+ <string name="permgrouplab_dictionary" msgid="8114410334955871144">"Λεξικό χρήστη"</string>
+ <string name="permgroupdesc_dictionary" msgid="40926483968949978">"Άμεση πρόσβαση στο λεξικό χρήστη."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Σελιδοδείκτες και ιστορικό"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Άμεση πρόσβαση σε σελιδοδείκτες και ιστορικού προγράμματος περιήγησης."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Ξυπνητήρι"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Ρύθμιση ξυπνητηριού."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Αυτόματος τηλεφωνητής"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Άμεση πρόσβαση στον αυτόματο τηλεφωνητή."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Μικρόφωνο"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Άμεση πρόσβαση στο μικρόφωνο για την εγγραφή ήχου."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Κάμερα"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Άμεση πρόσβαση σε κάμερα για λήψη εικόνας ή βίντεο."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Οι πληροφορίες των εφαρμογών σας"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Δυνατότητα επιρροής συμπεριφοράς άλλων εφαρμογών στη συσκευή σας."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Ταπετσαρία"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Αλλαγή των ρυθμίσεων ταπετσαρίας συσκευής."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Ρολόι"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Αλλαγή της ώρας ή της ζώνης ώρας συσκευής."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Γραμμή κατάστασης"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Αλλαγή των ρυθμίσεων γραμμής κατάστασης συσκευής."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Ρυθμίσεις συγχρονισμού"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Πρόσβαση στις ρυθμίσεις συγχρονισμού."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Οι λογαριασμοί σας"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Πρόσβαση στους διαθέσιμους λογαριασμούς."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Στοιχεία ελέγχου υλικού"</string>
@@ -184,6 +215,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Χαμηλού επιπέδου πρόσβαση και έλεγχος του συστήματος."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Εργαλεία ανάπτυξης"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Δυνατότητες που είναι απαραίτητες μόνο σε προγραμματιστές εφαρμογών."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Άλλες διεπαφές εφαρμογών"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Επιρροή διεπαφής άλλων εφαρμογών."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Αποθηκευτικός χώρος"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Πρόσβαση στον χώρο αποθ. USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Πρόσβαση στην κάρτα SD."</string>
@@ -702,6 +735,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Δεν υπάρχει κάρτα SIM στο τηλέφωνο."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Τοποθετήστε μια κάρτα SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Η κάρτα SIM δεν υπάρχει ή δεν είναι δυνατή η ανάγνωσή της. Τοποθετήστε μια κάρτα SIM."</string>
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Η κάρτα SIM δεν μπορεί να χρησιμοποιηθεί."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Η κάρτα SIM έχει απενεργοποιηθεί οριστικά."\n" Επικοινωνήστε με τον παροχέα υπηρεσιών ασύρματου δικτύου για να λάβετε μια νέα κάρτα SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Κουμπί προηγούμενου κομματιού"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Κουμπί επόμενου κομματιού"</string>
@@ -1043,7 +1077,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Ορισμός"</string>
<string name="date_time_done" msgid="2507683751759308828">"Τέλος"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Προεπιλεγμένο"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"ΝΕΟ: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"ΝΕΟ: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Δεν απαιτούνται άδειες"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Απόκρυψη"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Εμφάνιση όλων"</b></string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index ad45c770bc42..16b260740b47 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -168,12 +168,43 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Your messages"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Read and write your SMS, email and other messages."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Your personal information"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direct access to your contacts and calendar stored on the tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direct access to your contacts and calendar stored on the phone."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direct access to information about you, stored in on your contact card."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Your social information"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direct access to information about your contacts and social connections."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Your location"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitor your physical location."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Network communication"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Access various network features."</string>
+ <string name="permgrouplab_shortRangeNetwork" msgid="4504840216096355984">"Bluetooth and NFC"</string>
+ <string name="permgroupdesc_shortRangeNetwork" msgid="8821013030346680806">"Access Bluetooth or NFC networks and devices."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audio Settings"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Change audio settings."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Affects Battery"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Use features that can quickly drain battery."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendar"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direct access to calendar and events."</string>
+ <string name="permgrouplab_dictionary" msgid="8114410334955871144">"User Dictionary"</string>
+ <string name="permgroupdesc_dictionary" msgid="40926483968949978">"Direct access to the user dictionary."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bookmarks and History"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direct access to bookmarks and browser history."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Set the alarm clock."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Voicemail"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direct access to voicemail."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microphone"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direct access to the microphone to record audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direct access to camera for image or video capture."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Your applications information"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Ability to affect behaviour of other applications on your device."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Wallpaper"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Change the device wallpaper settings."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Clock"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Change the device time or timezone."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Status Bar"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Change the device status bar settings."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Sync Settings"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Access to the sync settings."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Your accounts"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Access the available accounts."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardware controls"</string>
@@ -184,6 +215,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Lower-level access and control of the system."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Development tools"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Features only needed for app developers."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Other Application UI"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Effect the UI of other applications."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Storage"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Access the USB storage."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Access the SD card."</string>
@@ -702,6 +735,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"No SIM card in phone."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Insert a SIM card."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"The SIM card is missing or not readable. Insert a SIM card."</string>
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Unusable SIM card."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Your SIM card has been permanently disabled."\n" Contact your wireless service provider for another SIM card."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Previous track button"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Next-track button"</string>
@@ -1043,7 +1077,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Set"</string>
<string name="date_time_done" msgid="2507683751759308828">"Done"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Default"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NEW: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NEW: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"No permission required"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Hide"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Show all"</b></string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 5193a8634a8c..edea70e2fcb0 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Tus mensajes"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Lee y escribe tus SMS, mensajes de correo y otros mensajes."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Tu información personal"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Acceso directo a los contactos y calendario guardados en tu dispositivo."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acceso directo a tus contactos y calendario guardado en el dispositivo."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Tu ubicación"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Controlar tu ubicación física"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicación de red"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Acceder a distintas funciones de red"</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Tus cuentas"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acceder a las cuentas disponibles."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controles de hardware"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acceso y control de nivel más bajo del sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Herramientas de desarrollo"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funciones únicamente necesarias para los programadores de aplicaciones."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Espacio de almacenamiento"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acceder al almacenamiento USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acceder a la tarjeta SD."</string>
@@ -257,7 +325,7 @@
<string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Permite que la aplicación transmita una notificación acerca de la recepción de un mensaje WAP PUSH. Las aplicaciones maliciosas pueden utilizar este permiso para falsificar la recepción de mensajes MMS o para reemplazar sin aviso el contenido de cualquier página web con variantes maliciosas."</string>
<string name="permlab_setProcessLimit" msgid="2451873664363662666">"limitar la cantidad de procesos en ejecución"</string>
<string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Permite que la aplicación controle la cantidad máxima de procesos que se ejecutarán. Las aplicaciones normales no deben utilizar este permiso."</string>
- <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"forzar el cierre de aplicaciones al salir"</string>
+ <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"forzar el cierre de aplicaciones de fondo"</string>
<string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"Permite que la aplicación controle si las actividades se deben finalizar al pasar a segundo plano. Las aplicaciones normales no deben utilizar este permiso."</string>
<string name="permlab_batteryStats" msgid="7863923071360031652">"modificar la estadística de la batería"</string>
<string name="permdesc_batteryStats" msgid="6835186932305744068">"Permite que la aplicación modifique las estadísticas recopiladas sobre la batería. Las aplicaciones normales no deben utilizar este permiso."</string>
@@ -353,9 +421,9 @@
<string name="permlab_writeCallLog" msgid="8552045664743499354">"escribir en el registro de llamadas"</string>
<string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Permite que la aplicación modifique el registro de llamadas de la tableta, incluidos los datos sobre llamadas entrantes y salientes. Las aplicaciones malintencionadas pueden usar este permiso para borrar o modificar el registro de llamadas."</string>
<string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Permite que la aplicación modifique el registro de llamadas del dispositivo, incluidos los datos sobre llamadas entrantes y salientes. Las aplicaciones malintencionadas pueden usar este permiso para borrar o modificar el registro de llamadas."</string>
- <string name="permlab_readProfile" msgid="4701889852612716678">"leer tu propia tarjeta de contacto"</string>
+ <string name="permlab_readProfile" msgid="4701889852612716678">"leer tarjeta contacto propia"</string>
<string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Permite que la aplicación lea la información de perfil almacenada en tu dispositivo, como tu nombre e información de contacto. Esto significa que la aplicación puede identificarte y enviar tu información de perfil a otros."</string>
- <string name="permlab_writeProfile" msgid="907793628777397643">"modificar tu propia tarjeta de contacto"</string>
+ <string name="permlab_writeProfile" msgid="907793628777397643">"modif. tarjeta contacto propia"</string>
<string name="permdesc_writeProfile" product="default" msgid="4637366723793045603">"Permite que la aplicación realice cambios o adiciones a la información personal almacenada en tu dispositivo, como tu nombre e información de contacto. Esto significa que otras aplicaciones pueden identificarte y enviar tu información de perfil a otros."</string>
<string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"Lectura de tu muro social"</string>
<string name="permdesc_readSocialStream" product="default" msgid="3419050808547335320">"Permite que la aplicación acceda y sincronice tus actualizaciones sociales y las de tus amigos. Las aplicaciones maliciosas pueden usar este permiso para leer las comunicaciones privadas que mantienes con tus amigos en las redes sociales."</string>
@@ -396,7 +464,7 @@
<string name="permlab_reboot" product="default" msgid="2898560872462638242">"forzar reinicio del dispositivo"</string>
<string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Permite que la aplicación provoque el reinicio de la tableta."</string>
<string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Permite que la aplicación fuerce el reinicio del dispositivo."</string>
- <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"acceder sist. de arch. de almac. USB"</string>
+ <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"acceder sistema de archivos USB"</string>
<string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"acceder al sistema de archivos de la tarjeta SD"</string>
<string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Permite que la aplicación active y desactive sistemas de archivos para un almacenamiento extraíble."</string>
<string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"borrar almacenamiento USB"</string>
@@ -437,7 +505,7 @@
<string name="permdesc_bindGadget" msgid="8261326938599049290">"Permite que la aplicación le indique al sistema qué widgets se pueden utilizar con cada aplicación. Una aplicación con este permiso puede proporcionar acceso a información personal por parte de otras aplicaciones. Las aplicaciones normales no deben utilizar este permiso."</string>
<string name="permlab_modifyPhoneState" msgid="8423923777659292228">"modificar el estado del dispositivo"</string>
<string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Permite que la aplicación controle las funciones de teléfono del dispositivo. Una aplicación con este permiso puede cambiar redes, encender y apagar la radio del teléfono y tareas similares sin siquiera notificártelo."</string>
- <string name="permlab_readPhoneState" msgid="9178228524507610486">"leer la identidad y el estado del teléfono"</string>
+ <string name="permlab_readPhoneState" msgid="9178228524507610486">"leer la identidad y el estado del dispositivo"</string>
<string name="permdesc_readPhoneState" msgid="5127767618743602782">"Permite que la aplicación acceda a las funciones de teléfono del dispositivo. Una aplicación con este permiso puede determinar el número de teléfono y el número de serie del teléfono, si hay una llamada activa, el número al que esa llamada está conectada, etc."</string>
<string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"evitar que el tablet entre en estado de inactividad"</string>
<string name="permlab_wakeLock" product="default" msgid="573480187941496130">"evitar que el dispositivo entre en estado de inactividad"</string>
@@ -452,7 +520,7 @@
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Se ejecuta como una prueba de fábrica de bajo nivel que permite un acceso completo al hardware del dispositivo. Sólo disponible cuando un dispositivo se ejecuta en el modo de prueba de fábrica."</string>
<string name="permlab_setWallpaper" msgid="6627192333373465143">"establecer papel tapiz"</string>
<string name="permdesc_setWallpaper" msgid="7373447920977624745">"Permite que la aplicación establezca el fondo de pantalla del sistema."</string>
- <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"ajustar el tamaño de fondo de pantalla"</string>
+ <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"ajustar el tamaño del fondo de pantalla"</string>
<string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Permite que la aplicación establezca el tamaño del fondo de pantalla del sistema."</string>
<string name="permlab_masterClear" msgid="2315750423139697397">"restablecer el sistema a las configuraciones predeterminadas de fábrica"</string>
<string name="permdesc_masterClear" msgid="3665380492633910226">"Permite que la aplicación restablezca por completo el sistema a su configuración de fábrica al eliminar todos los datos, la configuración y las aplicaciones instaladas."</string>
@@ -471,7 +539,7 @@
<string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Permite que la aplicación utilice las capacidades del autenticador de cuentas del administrador de cuentas, incluida la creación de cuentas y la obtención y configuración de sus contraseñas."</string>
<string name="permlab_manageAccounts" msgid="4983126304757177305">"agregar o eliminar cuentas"</string>
<string name="permdesc_manageAccounts" msgid="8698295625488292506">"Permite que la aplicación ejecute operaciones, como agregar y eliminar cuentas, y eliminar sus contraseñas."</string>
- <string name="permlab_useCredentials" msgid="235481396163877642">"utilizar las cuentas en el dispositivo"</string>
+ <string name="permlab_useCredentials" msgid="235481396163877642">"utilizar las cuentas del dispositivo"</string>
<string name="permdesc_useCredentials" msgid="7984227147403346422">"Permite que la aplicación solicite tokens de autenticación."</string>
<string name="permlab_accessNetworkState" msgid="4951027964348974773">"ver conexiones de red"</string>
<string name="permdesc_accessNetworkState" msgid="479772796952547198">"Permite que la aplicación vea el estado de todas las redes."</string>
@@ -503,7 +571,7 @@
<string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"Permite que la aplicación vea la configuración del dispositivo Bluetooth local, y que cree y acepte conexiones con los dispositivos sincronizados."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"controlar la Transmisión de datos en proximidad"</string>
<string name="permdesc_nfc" msgid="7120611819401789907">"Permite que la aplicación se comunique con lectores, tarjetas y etiquetas de Comunicación de campo cercano (NFC)."</string>
- <string name="permlab_disableKeyguard" msgid="3598496301486439258">"inhabilitar el bloqueo de pantalla"</string>
+ <string name="permlab_disableKeyguard" msgid="3598496301486439258">"desactivar el bloqueo de pantalla"</string>
<string name="permdesc_disableKeyguard" msgid="6231611286892232626">"Permite que la aplicación inhabilite el bloqueo del teclado y cualquier protección con contraseña asociada. Un ejemplo de este permiso es la inhabilitación por parte del dispositivo del bloqueo del teclado al recibir una llamada telefónica entrante y su posterior habilitación cuando finaliza la llamada."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"leer la configuración de sincronización"</string>
<string name="permdesc_readSyncSettings" msgid="5464056785274229278">"Permite que la aplicación lea la configuración de sincronización; por ejemplo, si está habilitada la sincronización para la aplicación Personas."</string>
@@ -519,12 +587,12 @@
<string name="permdesc_readDictionary" msgid="8977815988329283705">"Permite que la aplicación lea cualquier palabra, nombre o frase de carácter privado que el usuario haya almacenado en su diccionario."</string>
<string name="permlab_writeDictionary" msgid="2296383164914812772">"agregar al diccionario definido por el usuario"</string>
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"Permite que la aplicación ingrese palabras nuevas en el diccionario del usuario."</string>
- <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"leer cont. de disp. almac. USB"</string>
+ <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"leer contenido dispositivo USB"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"leer el contenido de tu tarjeta SD"</string>
- <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Permite que la aplic. lea cont. del disp. de alm. USB que puede incluir fotos y archivos multimedia."</string>
+ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Permite leer contenido USB."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Permite que la aplicación lea el contenido de la tarjeta SD que puede incluir fotos y archivos multimedia."</string>
- <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modif. o elim. cont. de disp. almac. USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modificar o eliminar el contenido de tu tarjeta SD"</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modificar/borrar contenido USB"</string>
+ <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modificar o borrar el contenido de tu tarjeta SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite que la aplicación escriba en el almacenamiento USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Admite que la aplicación escriba en la tarjeta SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modificar/eliminar los contenidos del almacenamientos de medios internos"</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"No hay tarjeta SIM en el dispositivo."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Inserta una tarjeta SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Falta la tarjeta SIM o no se puede leer. Introduce una tarjeta SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Tu tarjeta SIM se ha inhabilitado de forma permanente."\n" Ponte en contacto con tu proveedor de servicios inalámbricos para obtener otra tarjeta SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botón para pista anterior"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botón para pista siguiente"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Establecer"</string>
<string name="date_time_done" msgid="2507683751759308828">"Listo"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Predeterminado"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NUEVO: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUEVO: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"No se requieren permisos"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todos"</b></string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index ae519788cb1a..653671d0e21b 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Tus mensajes"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Leer y escribir SMS, correos electrónicos y otros mensajes"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Tu información personal"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Accede directamente al calendario y a los contactos almacenados en el tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acceso directo al calendario y a los contactos almacenados en el teléfono"</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Tu ubicación"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Controlar tu ubicación física"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicación de red"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Acceder a distintas funciones de red"</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Tus cuentas"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acceder a las cuentas disponibles"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controles de hardware"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acceso de nivel inferior y control del sistema"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Herramientas de desarrollo"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funciones necesarias solo para desarrolladores de aplicaciones"</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Almacenamiento"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acceso a almacenamiento USB"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acceder a la tarjeta SD"</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"No se ha insertado ninguna tarjeta SIM en el teléfono."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Inserta una tarjeta SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Falta la tarjeta SIM o no se puede leer. Introduce una tarjeta SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Tu tarjeta SIM se ha inhabilitado permanentemente."\n" Para obtener otra tarjeta SIM, ponte en contacto con tu proveedor de servicios de telefonía."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botón de canción anterior"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botón de siguiente canción"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Establecer"</string>
<string name="date_time_done" msgid="2507683751759308828">"Listo"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Predeterminado"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NUEVO:"</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUEVO:"</font></string>
<string name="no_permissions" msgid="7283357728219338112">"No es necesario ningún permiso"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todos"</b></string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index c80e10e3b86e..d944b686ca9d 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Teie sõnumid"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Teie SMS-, meili- ja muude sõnumite lugemine ja kirjutamine."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Teie isiklikud andmed"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Otsene juurdepääs tahvelarvutisse salvestatud kontaktidele ja kalendrile."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Otsene juurdepääs telefoni salvestatud kontaktidele ja kalendrile."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Teie asukoht"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Jälgige oma füüsilist asukohta."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Võrgusuhtlus"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Juurdepääs erinevatele võrgufunktsioonidele."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Teie kontod"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Juurdepääs saadaolevatele kontodele."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Riistvara juhtelemendid"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Süsteemi madalama taseme juurdepääs ja juhtimine."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Arendustööriistad"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funktsioonid on vajalikud ainult rakenduste arendajatele."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Mäluruum"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Juurdepääs USB-mäluseadmele."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Juurdepääs SD-kaardile."</string>
@@ -522,7 +590,7 @@
<string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"lugege USB-salvestusruumi sisu"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"lugege oma SD-kaardi sisu"</string>
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Võim. lugeda USB-ruumi sisu."</string>
- <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Võimaldab rakendusel lugeda SD-kaardi sisu, mis võib sisaldada fotosid ja meediat."</string>
+ <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Võimaldab rakendusel lugeda SD-kaardi sisu, mis võib sisaldada fotosid ja meediume."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"muutke, kustut. USB-ruumi sisu"</string>
<string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"muutke või kustutage oma SD-kaardi sisu"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Võimaldab rakendusel kirjutada USB-mäluseadmele."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefonis pole SIM-kaarti."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Sisestage SIM-kaart."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-kaart puudub või on loetamatu. Sisestage SIM-kaart."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM-kaart on jäädavalt keelatud."\n" Teise SIM-kaardi saamiseks võtke ühendust oma traadita side teenusepakkujaga."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Eelmise loo nupp"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Nupp Järgmine rada"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Määra"</string>
<string name="date_time_done" msgid="2507683751759308828">"Valmis"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Vaikimisi"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"UUS: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"UUS: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Lube pole vaja"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Peida"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Näita kõiki"</b></string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 8bc23c061e7b..c7a8be7d0c67 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"پیام های شما"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"پیام کوتاه، ایمیل و دیگر پیامها را بخوانید."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"اطلاعات شخصی شما"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"دسترسی مستقیم به مخاطبین و تقویم ذخیره شده در رایانه لوحی."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"دسترسی مستقیم به مخاطبین و تقویم ذخیره شده در گوشی."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"موقعیت مکانی شما"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"بر موقعیت مکانی فیزیکی خود نظارت داشته باشید."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"ارتباط شبکه"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"به ویژگی‎های مختلف شبکه دسترسی داشته باشید."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"حساب های شما"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"به حساب های موجود دسترسی داشته باشید."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"کنترل های سخت افزار"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"دسترسی سطح پایین و کنترل سیستم."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"ابزارهای توسعه"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"ویژگیهایی که فقط مورد نیاز برنامه نویسان است."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"ذخیره سازی"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"به حافظه USB دسترسی پیدا کنید."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"به کارت SD دسترسی داشته باشید."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"سیم کارت درون تلفن نیست."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"سیم کارت را وارد کنید."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"سیم کارت موجود نیست یا قابل خواندن نیست. یک سیم کارت وارد کنید."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"سیم کارت شما به طور دائم غیر فعال شده است. "\n"برای داشتن سیم کارت دیگر با ارائه‎دهنده سرویس بی‎سیم خود تماس بگیرید."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"دکمه تراک قبلی"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"دکمه تراک بعدی"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"تنظیم"</string>
<string name="date_time_done" msgid="2507683751759308828">"انجام شد"</string>
<string name="default_permission_group" msgid="2690160991405646128">"پیش فرض"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"جدید: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"جدید: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"مجوزی لازم نیست"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"پنهان کردن"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"نمایش همه"</b></string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 738856a916cc..3e27cbdfcb79 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Omat viestit"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Tekstiviestien, sähköpostin ja muiden viestien lukeminen ja kirjoittaminen."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Henkilötietosi"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Käyttöoikeudet tablet-laitteelle tallennettuihin yhteystietoihin ja kalenteriin."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Saa suora käyttöyhteys puhelimelle tallennettuihin yhteystietoihin ja kalenteriin."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Oma sijainti"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Tarkkaile fyysistä sijaintiasi."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Verkkoviestintä"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Käyttää useita ​​verkon ominaisuuksia."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Omat tilit"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Käytä saatavilla olevia tilejä."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Laitteiston hallinta"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Alemman tason käyttöoikeus ja järjestelmän hallintaoikeus."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Kehittäjätyökalut"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Vain sovelluskehittäjien tarvitsemat ominaisuudet."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Tallennustila"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Käytä USB-tallennustilaa."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Käytä SD-korttia."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Puhelimessa ei ole SIM-korttia."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Aseta SIM-kortti."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-korttia ei löydy tai ei voi lukea. Kytke SIM-kortti."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM-kortti on poistettu pysyvästi käytöstä."\n" Ota yhteyttä operaattoriisi ja hanki uusi SIM-kortti."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Edellinen kappale -painike"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Seuraava kappale -painike"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Aseta"</string>
<string name="date_time_done" msgid="2507683751759308828">"Valmis"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Oletus"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"UUTTA: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"UUTTA: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Lupia ei tarvita"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Piilota"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Näytä kaikki"</b></string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 32822b121913..6b8a2fd0fc09 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vos messages"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Permet de lire et de rédiger vos SMS, e-mails et autres messages."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vos informations personnelles"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Accéder directement aux contacts et à l\'agenda enregistrés sur la tablette"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Accéder directement aux contacts et à l\'agenda enregistrés sur votre téléphone"</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Votre position"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Déterminer votre position géographique"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Communications réseau"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accéder à différentes fonctionnalités du réseau"</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vos comptes"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accéder aux comptes disponibles"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Commandes du matériel"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Accès et contrôle de faible niveau du système."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Outils de développement"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Ces fonctionnalités sont destinées uniquement aux développeurs d\'applications."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Stockage"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accéder à la mémoire de stockage USB"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accéder à la carte SD"</string>
@@ -524,7 +592,7 @@
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Permet à l\'appli de lire le contenu de la mémoire USB (photos, fichiers multimédias, etc.)."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Permet à l\'application de lire le contenu d\'une carte SD, qui peut inclure des photos et des fichiers multimédias."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modifier ou supprimer le contenu de la mémoire USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modifier ou supprimer le contenu de la SD"</string>
+ <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"modifier ou supprimer le contenu de la carte SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permet à l\'application de modifier le contenu de la mémoire de stockage USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Permet à l\'application de modifier le contenu de la carte SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"Modifier/Supprimer contenu mémoire interne"</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Aucune carte SIM n\'est insérée dans le téléphone."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Insérez une carte SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Carte SIM absente ou illisible. Insérez une carte SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Votre carte SIM a été définitivement désactivée."\n" Veuillez contacter votre opérateur de téléphonie mobile pour en obtenir une autre."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Bouton du titre précédent"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Bouton du titre suivant"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Définir"</string>
<string name="date_time_done" msgid="2507683751759308828">"OK"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Par défaut"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NOUVEAU"</font>" :"</string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOUVEAU"</font>" :"</string>
<string name="no_permissions" msgid="7283357728219338112">"Aucune autorisation requise"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Masquer"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Tout afficher"</b></string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 6cbcea519162..1afc3cdfe94e 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"आपके संदेश"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"अपने SMS, ईमेल, और अन्य संदेशों को पढ़ें और लिखें."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"आपकी निजी जानकारी"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"टेबलेट पर संग्रहीत आपके संपर्कों और कैलेंडर में सीधे पहुंचें."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"फ़ोन पर संग्रहीत आपके संपर्कों और कैलेंडर में सीधे पहुंचें."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"आपका स्‍थान"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"अपने भौतिक स्‍थान पर नज़र रखें."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"नेटवर्क संचार"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"विभिन्‍न नेटवर्क सुविधाओं पर पहुंचें."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"आपके खाते"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"उपलब्‍ध खातों में पहुंचें."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"हार्डवेयर नियंत्रण"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"सिस्‍टम का निम्‍न-स्‍तर पहुंच और नियंत्रण."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"डेवलपमेंट टूल"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"सुविधाएं जो केवल एप्लिकेशन डेवलपर के लिए आवश्यक हैं."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"संग्रहण"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB संग्रहण में पहुंचें."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD कार्ड में पहुंचें."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"फ़ोन में कोई सिम कार्ड नहीं है."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"कोई सिमकार्ड डालें."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"सिम कार्ड गुम है या पढ़ने योग्‍य नहीं है. कोई सिम कार्ड डालें."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"आपका सिम कार्ड स्‍थायी रूप से अक्षम कर दिया गया है."\n" दूसरे SIM कार्ड के लिए अपने वायरलेस सेवा प्रदाता से संपर्क करें."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"पिछला ट्रैक बटन"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"अगला ट्रैक बटन"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"सेट करें"</string>
<string name="date_time_done" msgid="2507683751759308828">"पूर्ण"</string>
<string name="default_permission_group" msgid="2690160991405646128">"डिफ़ॉल्ट"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"नया: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"नया: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"किसी अनुमति की आवश्‍यकता नहीं है"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"छुपाएं"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"सभी दिखाएं"</b></string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index fb0e8d6dad87..fafb31c1fdf2 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vaše poruke"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Čitajte i pišite SMS-ove, poruke e-pošte i ostale poruke."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vaši osobni podaci"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Izravan pristup kontaktima i kalendaru pohranjenima na tabletnom uređaju."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Izravan pristup kontaktima i kalendaru pohranjenom na telefonu."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Vaša lokacija"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Pratite svoju fizičku lokaciju."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Mrežna komunikacija"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Pristupajte raznim značajkama mreže."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaši računi"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Pristup dostupnim računima."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardverske kontrole"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Niskorazinski pristup i nadzor nad sustavom."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Razvojni alati"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Značajke potrebne samo za razvojne programere aplikacija."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Prostor za pohranu"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Pristupi memoriji USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Pristup SD kartici."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"U telefonu nema SIM kartice."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Umetnite SIM karticu."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM kartica nedostaje ili nije čitljiva. Umetnite SIM karticu."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Vaša SIM kartica trajno je onemogućena."\n" Obratite se svom pružatelju bežičnih usluga da biste dobili drugu SIM karticu."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Gumb Prethodni zapis"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Gumb Sljedeći zapis"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Postavi"</string>
<string name="date_time_done" msgid="2507683751759308828">"Gotovo"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Zadano"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NOVO: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVO: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Nije potrebno dopuštenje"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Sakrij"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Pokaži sve"</b></string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 8667b8d501f6..4a36a8ad3e52 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Saját üzenetek"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS-ek, e-mailek és egyéb üzenetek olvasása és írása."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Az Ön személyes adatai"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Közvetlen hozzáférés a táblagépen tárolt névjegyekhez és naptárhoz."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Közvetlen hozzáférés a telefonon tárolt névjegyekhez és naptárhoz."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Tartózkodási hely"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Tartózkodási hely figyelése."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Hálózati kommunikáció"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Hozzáférés különböző hálózati funkciókhoz."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Az Ön fiókjai"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Hozzáférés az elérhető fiókokhoz."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardver vezérlése"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Alacsony szintű hozzáférés és a rendszer vezérlése."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Fejlesztői eszközök"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Csak az alkalmazásfejlesztők számára fontos funkciók."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Tárhely"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Az USB-tár elérése."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Az SD-kártya elérése."</string>
@@ -523,7 +591,7 @@
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"SD-kártya tartalmának olvasása"</string>
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Lehetővé teszi az alkalmazás számára az USB-háttértár tartalmának olvasását, beleértve a fényképeket és a médiafájlokat."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Lehetővé teszi az alkalmazás számára az SD-kártya tartalmának olvasását, beleértve a fényképeket és a médiafájlokat."</string>
- <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"USB-tár tart. mód./törlése"</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"USB-tár törlése/módosítása"</string>
<string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"SD-kártya tartalmának módosítása vagy törlése"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Az alkalmazás USB-tárra írhat."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Lehetővé teszi az alkalmazás számára, hogy írjon az SD-kártyára."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Nincs SIM-kártya a telefonban."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Helyezzen be egy SIM kártyát."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"A SIM kártya hiányzik vagy nem olvasható. Helyezzen be egy SIM kártyát."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM kártyája véglegesen letiltva."\n" Forduljon a vezeték nélküli szolgáltatójához másik SIM kártya beszerzése érdekében."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Előző szám gomb"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Következő szám gomb"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Beállítás"</string>
<string name="date_time_done" msgid="2507683751759308828">"Kész"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Alapértelmezett"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"ÚJ: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"ÚJ: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Nincs szükség engedélyre"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Elrejtés"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Az összes megjelenítése"</b></string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 6962481a4377..658bd2f1953d 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Pesan Anda"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Membaca dan menulis SMS, email, dan pesan Anda lainnya."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informasi pribadi Anda"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Akses langsung ke kontak dan kalender yang disimpan di tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"akses langsung pada kontak dan kalender yang tersimpan pada ponsel."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Lokasi Anda"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Memonitor lokasi fisik Anda."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Komunikasi jaringan"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Mengakses berbagai fitur jaringan."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Akun-akun Anda"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Akses akun yang tersedia."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kontrol perangkat keras"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Akses tingkat rendah dan kontrol sistem."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Peralatan pengembangan"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Fitur hanya diperlukan oleh pengembang apl."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Penyimpanan"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Akses penyimpanan USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Akses kartu SD."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Tidak ada Kartu SIM di dalam ponsel."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Masukkan kartu SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Kartu SIM tidak ada atau tidak dapat dibaca. Masukkan kartu SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Kartu SIM Anda telah dinonaktifkan secara permanen."\n" Hubungi penyedia layanan nirkabel Anda untuk kartu SIM lain."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Tombol trek sebelumnya"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Tombol trek berikutnya"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Setel"</string>
<string name="date_time_done" msgid="2507683751759308828">"Selesai"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Default"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"BARU: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"BARU: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Tidak perlu izin"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Sembunyikan"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Tampilkan semua"</b></string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 9b6220471a8b..8a4a54c01a78 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"I tuoi messaggi"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Consentono di leggere e scrivere SMS, email e altri messaggi."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informazioni personali"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Accedere direttamente ai contatti e al calendario memorizzati sul tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Accedere direttamente ai contatti e al calendario memorizzati sul telefono."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"La tua posizione"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitoraggio della posizione fisica dell\'utente."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicazione di rete"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accesso a varie funzioni di rete."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"I tuoi account"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accedere agli account disponibili."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controlli hardware"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Accesso al sistema e controllo di livello inferiore."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Strumenti di sviluppo"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funzionalità necessarie soltanto agli sviluppatori di applicazioni."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Archiviazione"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accesso all\'archivio USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accesso alla scheda SD."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Nessuna SIM presente nel telefono."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Inserisci una scheda SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Scheda SIM mancante o non leggibile. Inserisci una scheda SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"La scheda SIM è stata disattivata definitivamente."\n" Contatta il fornitore del tuo servizio wireless per ricevere un\'altra scheda SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Pulsante traccia precedente"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Pulsante traccia successiva"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Imposta"</string>
<string name="date_time_done" msgid="2507683751759308828">"Fine"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Predefinito"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NUOVA: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUOVA: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Nessuna autorizzazione richiesta"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Nascondi"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostra tutto"</b></string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 79e475b79acb..08a95d43b6a7 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"ההודעות שלך"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"קריאה וכתיבה בהודעות ה-SMS, הדוא\"ל והודעות אחרות שלך."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"המידע האישי שלך"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"גישה ישירה לאנשי הקשר וללוח השנה המאוחסנים בטבלט."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"גישה ישירה לאנשי הקשר וללוח השנה המאוחסנים בטלפון."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"המיקום שלך"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"עקוב אחר המיקום הפיזי שלך."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"תקשורת רשת"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"הרשאת גישה לתכונות רשת שונות."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"החשבונות שלך"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"גישה לכל החשבונות הזמינים."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"בקרת חומרה"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"גישה ושליטה במערכת ברמה נמוכה."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"כלי פיתוח"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"תכונות הדרושות למפתחי יישומים בלבד."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"אחסון"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"גישה לאמצעי אחסון מסוג USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"גש לכרטיס SD."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"אין כרטיס SIM בטלפון."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"הכנס כרטיס SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"כרטיס ה-SIM חסר או שלא ניתן לקרוא אותו. הכנס כרטיס SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"כרטיס ה-SIM שלך הושבת לצמיתות."\n"פנה לספק השירות האלחוטי שלך לקבלת כרטיס SIM אחר."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"לחצן הרצועה הקודמת"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"לחצן הרצועה הבאה"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"הגדר"</string>
<string name="date_time_done" msgid="2507683751759308828">"בוצע"</string>
<string name="default_permission_group" msgid="2690160991405646128">"ברירת מחדל"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"חדש: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"חדש: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"לא דרושים אישורים"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"הסתר"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"הצג הכל"</b></string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 7d51fceaf91f..2c87d0587be2 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"送受信したメッセージ"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS、メールなどのメッセージを読み書きします。"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"個人情報"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"タブレットの連絡先とカレンダーに直接アクセス"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"端末の連絡先とカレンダーに直接アクセス"</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"現在地"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"現在地を追跡します。"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"ネットワーク通信"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"さまざまなネットワーク機能にアクセスします。"</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"アカウント"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"利用可能なアカウントにアクセスします。"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"ハードウェアの制御"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"システムの低レベルのアクセスと制御"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"開発ツール"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"アプリのデベロッパーにのみ必要な機能です。"</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"ストレージ"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USBストレージへのアクセス"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SDカードにアクセスします。"</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"SIMカードが挿入されていません"</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"SIMカードを挿入してください。"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIMカードが見つからないか読み取れません。SIMカードを挿入してください。"</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"お使いのSIMカードは永久に無効となっています。"\n"ワイヤレスサービスプロバイダに問い合わせて新しいSIMカードを入手してください。"</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"前のトラックボタン"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"次のトラックボタン"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"設定"</string>
<string name="date_time_done" msgid="2507683751759308828">"完了"</string>
<string name="default_permission_group" msgid="2690160991405646128">"端末既定"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NEW: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NEW: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"権限の許可は必要ありません"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"隠す"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"すべて表示"</b></string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 0605a518b7a7..12a44fef8b78 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"메시지"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS, 이메일 및 기타 메시지를 읽고 씁니다."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"개인정보"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"태블릿에 저장된 주소록 및 캘린더에 직접 액세스합니다."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"휴대전화에 저장된 주소록 및 캘린더에 직접 액세스합니다."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"위치"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"실제 위치 모니터링"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"네트워크 통신"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"다양한 네트워크 기능에 액세스할 수 있도록 합니다."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"계정"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"사용 가능한 계정에 액세스합니다."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"하드웨어 제어"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"시스템을 하위 수준에서 액세스하고 제어합니다."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"개발 도구"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"앱 개발자에게만 필요한 기능입니다."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"저장"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB 저장소에 액세스합니다."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD 카드에 액세스합니다."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"휴대전화에 SIM 카드가 없습니다."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"SIM 카드를 삽입하세요."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM 카드가 없거나 읽을 수 없습니다. SIM 카드를 삽입하세요."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM 카드 사용이 영구적으로 사용중지되었습니다."\n"다른 SIM 카드를 사용하려면 무선 서비스 제공업체에 문의하시기 바랍니다."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"이전 트랙 버튼"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"다음 트랙 버튼"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"설정"</string>
<string name="date_time_done" msgid="2507683751759308828">"완료"</string>
<string name="default_permission_group" msgid="2690160991405646128">"기본값"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"신규: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"신규: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"권한 필요 없음"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"숨기기"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"모두 표시"</b></string>
diff --git a/core/res/res/values-large/dimens.xml b/core/res/res/values-large/dimens.xml
index 864675a49d26..8cd614dfe4c9 100644
--- a/core/res/res/values-large/dimens.xml
+++ b/core/res/res/values-large/dimens.xml
@@ -24,10 +24,6 @@
<!-- keyboardHeight = key_height*4 + key_bottom_gap*3 -->
<dimen name="password_keyboard_height">48.0mm</dimen>
- <!-- The width that is used when creating thumbnails of applications. -->
- <dimen name="thumbnail_width">230dp</dimen>
- <!-- The height that is used when creating thumbnails of applications. -->
- <dimen name="thumbnail_height">135dp</dimen>
<!-- Minimum width of the search view text entry area. -->
<dimen name="search_view_text_min_width">192dip</dimen>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 4271cedf3446..c3d83e8b4dc8 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Jūsų pranešimai"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Skaitykite ir rašykite SMS, el. laiškus ir kitus pranešimus."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Asmeninė informacija"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Tiesioginė prieiga prie kontaktų ir kalendoriaus, išsaugotų planšetiniame kompiuteryje."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Tiesioginė prieiga prie adresatų ir kalendoriaus, saugomų telefone."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Jūsų vieta"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Stebėti fizinę vietą."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Tinklo ryšys"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Pasiekti įvairias tinklo funkcijas."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Jūsų paskyros"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Pasiekite galimas paskyras."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Aparatinės įrangos valdikliai"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Žemesnio lygio prieiga prie sistemos ir jos valdymas."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Kūrėjo įrankiai"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkcijos reikalingos tik programos kūrėjams."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Saugykla"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Pasiekti USB atmintinę."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Pasiekite SD kortelę."</string>
@@ -353,7 +421,7 @@
<string name="permlab_writeCallLog" msgid="8552045664743499354">"rašyti skambučių žurnalą"</string>
<string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Programai leidžiama skaityti planšetinio kompiuterio skambučių žurnalą, įskaitant duomenis apie gaunamus ir siunčiamus skambučius. Kenkėjiškos programos tai gali naudoti, kad ištrintų ar keistų jūsų skambučių žurnalą."</string>
<string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Programai leidžiama skaityti telefono skambučių žurnalą, įskaitant duomenis apie gaunamus ir siunčiamus skambučius. Kenkėjiškos programos tai gali naudoti, kad ištrintų ar keistų jūsų skambučių žurnalą."</string>
- <string name="permlab_readProfile" msgid="4701889852612716678">"skaityti jūsų kontaktinę kortelę"</string>
+ <string name="permlab_readProfile" msgid="4701889852612716678">"skaityti jūsų kontakt. kortelę"</string>
<string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Leidžiama programai skaityti asmeninę profilio informaciją, saugomą jūsų įrenginyje, pvz., jūsų vardą, pavardę ir kontaktinę informaciją. Tai reiškia, kad programa gali nustatyti jūsų tapatybę ir siųsti profilio informaciją kitiems."</string>
<string name="permlab_writeProfile" msgid="907793628777397643">"keisti jūsų kontaktinę kortelę"</string>
<string name="permdesc_writeProfile" product="default" msgid="4637366723793045603">"Leidžiama programai pakeisti asmeninę profilio informaciją, saugomą jūsų įrenginyje, pvz., jūsų vardą, pavardę ir kontaktinę informaciją, arba jos pridėti. Tai reiškia, kad kitos programos gali nustatyti jūsų tapatybę ir siųsti profilio informaciją kitiems."</string>
@@ -396,7 +464,7 @@
<string name="permlab_reboot" product="default" msgid="2898560872462638242">"pradėti telefono perkrovimą"</string>
<string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Leidžiama programai versti iš naujo paleisti planšetinio kompiuterio operacinę sistemą."</string>
<string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Leidžiama programai versti iš naujo paleisti telefono operacinę sistemą."</string>
- <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"pasiekti USB atminties failų sistemą"</string>
+ <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"pasiekti USB atm. failų sist."</string>
<string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"pasiekti SD kortelės failų sistemą"</string>
<string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Leidžiama programai įrengti ir pašalinti keičiamos atmintinės failų sistemas."</string>
<string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"ištrinti USB atmintį"</string>
@@ -521,9 +589,9 @@
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"Leidžiama programai rašyti naujus žodžius į naudotojo žodyną."</string>
<string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"skaityti USB atminties turinį"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"skaityti SD kortelės turinį"</string>
- <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Programai leidžiama skaityti USB atminties turinį, į kurį gali įeiti nuotraukos ir medija."</string>
- <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Programai leidžiama skaityti SD kortelės turinį, į kurį gali įeiti nuotraukos ir medija."</string>
- <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"keisti arba trinti USB atminties turinį"</string>
+ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Programai leidžiama skaityti USB atminties turinį, kurį gali sudaryti nuotraukos ir medija."</string>
+ <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Programai leidžiama skaityti SD kortelės turinį, kurį gali sudaryti nuotraukos ir medija."</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"keisti / trinti USB atm. turinį"</string>
<string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"keisti arba trinti SD kortelės turinį"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Leidž. progr. raš. į USB atm."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Leidžiama programai rašyti į SD kortelę."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefone nėra SIM kortelės."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Įdėkite SIM kortelę."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Trūksta SIM kortelės arba ji neskaitoma. Įdėkite SIM kortelę."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM kortelė visam laikui neleidžiama."\n" Jei norite gauti kitą SIM kortelę, susisiekite su belaidžio ryšio paslaugos teikėju."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Ankstesnio takelio mygtukas"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Kito takelio mygtukas"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Nustatyti"</string>
<string name="date_time_done" msgid="2507683751759308828">"Baigta"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Numatytasis"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NAUJAS: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NAUJAS: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Nereikia leidimų"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Slėpti"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Rodyti viską"</b></string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 077169c1b82b..50aa109acb50 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Jūsu ziņojumi"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Lasiet un rakstiet īsziņas, e-pasta un citus ziņojumus."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Personas informācija"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Tieša piekļuve planšetdatorā saglabātajām kontaktpersonām un kalendāram."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Tiešā piekļuve tālrunī saglabātajām kontaktpersonām un kalendāram."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Jūsu atrašanās vieta"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Pārrauga jūsu fizisko atrašanās vietu."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Tīkla sakari"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Piekļūst dažādām tīkla funkcijām."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Jūsu konti"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Piekļūstiet pieejamajiem kontiem."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Aparatūras vadīklas"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Sistēmas apakšējā līmeņa piekļuve un vadība."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Izstrādes rīki"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Tikai lietotņu izstrādātājiem nepieciešamās funkcijas."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Krātuve"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Piekļūst USB krātuvei."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Piekļūstiet SD kartei."</string>
@@ -521,7 +589,7 @@
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"Ļauj lietotnei rakstīt jaunus vārdus lietotāja vārdnīcā."</string>
<string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"lasīt USB atmiņas saturu"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"lasīt SD kartes saturu"</string>
- <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Ļauj las. USB atm.: foto un multiv."</string>
+ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Ļauj lasīt USB: foto un multiv."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Ļauj lietotnei lasīt SD kartes saturu, kurā var būt fotoattēli un multivide."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"mainīt vai dzēst USB atm. sat."</string>
<string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"mainīt vai dzēst SD kartes saturu"</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Tālrunī nav SIM kartes."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Ievietojiet SIM karti."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Nav SIM kartes, vai arī to nevar nolasīt. Ievietojiet SIM karti."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Jūsu SIM karte ir neatgriezeniski atspējota."\n"Sazinieties ar savu bezvadu pakalpojumu sniedzēju, lai iegūtu citu SIM karti."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Iepriekšējā ieraksta poga"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Nākamā ieraksta poga"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Iestatīt"</string>
<string name="date_time_done" msgid="2507683751759308828">"Gatavs"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Noklusējums"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"JAUNA: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"JAUNA: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Atļaujas nav nepieciešamas."</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Slēpt"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Rādīt visu"</b></string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index defcd0683d0f..8d3de4b70443 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Mesej anda"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Membaca dan menulis SMS, e-mel, dan mesej lain."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Maklumat peribadi anda"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Akses langsung kepada kenalan dan kalendar anda yang disimpan dalam tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Akses langsung kepada kenalan dan kalendar yang disimpan pada telefon."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Lokasi anda"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Pantau lokasi fizikal anda."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Komunikasi rangkaian"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Akses pelbagai ciri rangkaian."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Akaun anda"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Akses akaun yang tersedia."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kawalan perkakasan"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Akses dan kawalan peringkat lebih rendah bagi sistem."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Alatan pembangunan"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Ciri hanya diperlukan untuk pembangun apl."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Storan"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Akses storan USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Akses kad SD."</string>
@@ -355,7 +423,7 @@
<string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Membenarkan apl untuk mengubah suai panggilan telefon anda, termasuk data tentang panggilan masuk dan keluar. Apl hasad boleh menggunakannya untuk memadam atau mengubah suai log panggilan anda."</string>
<string name="permlab_readProfile" msgid="4701889852612716678">"baca kad kenalan anda sendiri"</string>
<string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Membenarkan apl untuk membaca maklumat profil peribadi yang disimpan dalam peranti anda, seperti nama dan maklumat kenalan anda. Ini bermakna apl lain boleh mengenal pasti anda dan menghantar maklumat profil anda kepada orang lain."</string>
- <string name="permlab_writeProfile" msgid="907793628777397643">"ubah suai kad kenalan anda sendiri"</string>
+ <string name="permlab_writeProfile" msgid="907793628777397643">"ubah suai kad kenalan sendiri"</string>
<string name="permdesc_writeProfile" product="default" msgid="4637366723793045603">"Membenarkan apl untuk menukar atau menambah maklumat profil peribadi yang disimpan dalam peranti anda, seperti nama dan maklumat kenalan anda. Ini bermakna apl lain boleh mengenal pasti anda dan menghantar maklumat profil anda kepada orang lain."</string>
<string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"baca aliran sosial anda"</string>
<string name="permdesc_readSocialStream" product="default" msgid="3419050808547335320">"Membenarkan apl mengakses dan menyegerakkan kemas kini sosial daripada rakan-rakan anda. Apl hasad boleh menggunakannya untuk membaca komunikasi peribadi di antara anda dan rakan-rakan anda pada rangkaian sosial."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Kad SIM tiada dalam telefon."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Masukkan kad SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Kad SIM tiada atau tidak boleh dibaca. Sila masukkan kad SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Kad SIM anda telah dilumpuhkan secara kekal."\n" Hubungi pembekal perkhidmatan wayarles anda untuk mendapatkan kad SIM lain."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Butang lagu sebelumnya"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Butang lagu seterusnya"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Tetapkan"</string>
<string name="date_time_done" msgid="2507683751759308828">"Selesai"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Lalai"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"BAHARU: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"BAHARU: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Tiada kebenaran diperlukan"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Sembunyikan"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Tunjukkan semua"</b></string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 4d55b1a7fe73..66cc3f8b97a6 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Meldinger"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Tillatelse til å lese og skrive SMS-ene dine, e-post og andre meldinger."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Personlig informasjon"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direkte tilgang til dine kontakter og kalender lagret på nettbrettet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direkte tilgang til kontakter og kalendre lagret på telefonen."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Din posisjon"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Overvåking av telefonens fysiske posisjon."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Nettverkstilgang"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Tilgang til ulike nettverksfunksjoner."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Google-kontoer"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Tilgang til tilgjengelige Google-kontoer."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Maskinvarekontroll"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Lavnivå tilgang og kontroll over systemet."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Utviklingsverktøy"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funksjoner som bare apputviklere trenger."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Tilgang til USB-lagring."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Tilgang til minnekortet."</string>
@@ -218,7 +286,7 @@
<string name="permlab_getTasks" msgid="6466095396623933906">"hente apper som kjører"</string>
<string name="permdesc_getTasks" msgid="6608159250520381359">"Lar appen hente ut informasjon om oppgaver som kjører eller nylig har kjørt. Ondsinnede apper kan bruke dette til å oppdage privat informasjon om andre apper."</string>
<string name="permlab_getDetailedTasks" msgid="6229468674753529501">"hente informasjon om apper som kjører"</string>
- <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Tillat at appen henter ut informasjon om oppgaver som kjører eller nylig har kjørt. Skadelige apper kan bruke dette til å oppdage privat informasjon om andre apper."</string>
+ <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Tillater at appen henter ut informasjon om oppgaver som kjører eller nylig har kjørt. Skadelige apper kan bruke dette til å oppdage privat informasjon om andre apper."</string>
<string name="permlab_reorderTasks" msgid="2018575526934422779">"Endre rekkefølge på apper som kjører"</string>
<string name="permdesc_reorderTasks" msgid="4175137612205663399">"Lar appen flytte oppgaver til forgrunnen eller bakgrunnen. Ondsinnede apper kan tvinge seg frem til forgrunnen utenfor din kontroll."</string>
<string name="permlab_removeTasks" msgid="6821513401870377403">"avslutte apper som kjører"</string>
@@ -342,11 +410,11 @@
<string name="permdesc_broadcastSticky" product="tablet" msgid="1181582512022829259">"Lar appen sende hengende kringkastinger («sticky broadcasts») som blir værende etter at kringkastingen er over. Ondsinnede apper kan gjøre nettbrettet tregt eller ustabilt ved å bruke for mye minne."</string>
<string name="permdesc_broadcastSticky" product="default" msgid="3287869131621514325">"Lar appen sende hengende kringkastinger («sticky broadcasts») som blir værende etter at kringkastingen er over. Ondsinnede apper kan gjøre telefonen treg eller ustabil ved å bruke for mye minne."</string>
<string name="permlab_readContacts" msgid="8348481131899886131">"leser kontaktene dine"</string>
- <string name="permdesc_readContacts" product="tablet" msgid="6370069055638209432">"Tillat at appen kan lese alle opplysningene om kontaktene lagret på nettbrettet ditt – inkludert hvor ofte du har ringt, sendt e-post til eller på andre måter kommunisert med spesifikke individer. Dette muliggjør autofullføring av e-postadresser og andre praktiske funksjoner. Skadelige apper kan bruke denne tillatelsen til å sende kontaktopplysningene dine til andre."</string>
- <string name="permdesc_readContacts" product="default" msgid="4093353182535351501">"Tillat at appen kan lese alle opplysningene om kontaktene lagret på telefonen din – inkludert hvor ofte du har ringt, sendt e-post til eller på andre måter kommunisert med spesifikke individer. Dette muliggjør autofullføring av e-postadresser og andre praktiske funksjoner. Skadelige apper kan bruke denne tillatelsen til å sende kontaktopplysningene dine til andre."</string>
+ <string name="permdesc_readContacts" product="tablet" msgid="6370069055638209432">"Tillater appen å lese alle opplysningene om kontaktene lagret på nettbrettet ditt – inkludert hvor ofte du har ringt, sendt e-post til eller på andre måter kommunisert med spesifikke individer. Dette muliggjør autofullføring av e-postadresser og andre praktiske funksjoner. Skadelige apper kan bruke denne tillatelsen til å sende kontaktopplysningene dine til andre."</string>
+ <string name="permdesc_readContacts" product="default" msgid="4093353182535351501">"Tillater appen å lese alle opplysningene om kontaktene lagret på telefonen din – inkludert hvor ofte du har ringt, sendt e-post til eller på andre måter kommunisert med spesifikke personer. Dette muliggjør autofullføring av e-postadresser og andre praktiske funksjoner. Skadelige apper kan bruke denne tillatelsen til å sende kontaktdata til andre."</string>
<string name="permlab_writeContacts" msgid="5107492086416793544">"endrer kontaktene dine"</string>
- <string name="permdesc_writeContacts" product="tablet" msgid="5495863352173533286">"Tillat at appen kan endre opplysningene om kontaktene lagret på nettbrettet – inkludert hvor ofte du har ringt, sendt e-post til eller på andre måter kommunisert med spesifikke individer. Dette muliggjør autofullføring av e-postadresser og andre praktiske funksjoner. Skadelige apper kan bruke denne tillatelsen til å slette eller endre kontaktopplysningene dine."</string>
- <string name="permdesc_writeContacts" product="default" msgid="6108469962248865715">"Tillat at appen kan endre opplysningene om kontaktene lagret på telefonen din – inkludert hvor ofte du har ringt, sendt e-post til eller på andre måter kommunisert med spesifikke individer. Dette muliggjør autofullføring av e-postadresser og andre praktiske funksjoner. Skadelige apper kan bruke denne tillatelsen til å slette eller endre kontaktopplysningene dine."</string>
+ <string name="permdesc_writeContacts" product="tablet" msgid="5495863352173533286">"Tillater appen å endre opplysningene om kontaktene lagret på nettbrettet – inkludert hvor ofte du har ringt, sendt e-post til eller på andre måter kommunisert med spesifikke individer. Dette muliggjør autofullføring av e-postadresser og andre praktiske funksjoner. Skadelige apper kan bruke denne tillatelsen til å slette eller endre kontaktopplysningene dine."</string>
+ <string name="permdesc_writeContacts" product="default" msgid="6108469962248865715">"Tillater appen å endre opplysningene om kontaktene lagret på telefonen din – inkludert hvor ofte du har ringt, sendt e-post til eller på andre måter kommunisert med spesifikke individer. Dette muliggjør autofullføring av e-postadresser og andre praktiske funksjoner. Skadelige apper kan bruke denne tillatelsen til å slette eller endre kontaktopplysningene dine."</string>
<string name="permlab_readCallLog" msgid="3478133184624102739">"lar appen lese anropsloggen"</string>
<string name="permdesc_readCallLog" product="tablet" msgid="3995157599976515002">"Lar appen lese nettbrettets samtalelogg, inkludert data om innkommende og utgående anrop. Skadelige apper kan utnytte denne tillatelsen til å sende dataene dine til andre personer."</string>
<string name="permdesc_readCallLog" product="default" msgid="3452017559804750758">"Lar appen lese telefonens samtalelogg, inkludert data om innkommende og utgående anrop. Skadelige apper kan utnytte denne tillatelsen til å sende dataene dine til andre personer."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Ikke noe SIM-kort i telefonen."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Sett inn et SIM-kort."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-kort mangler eller er uleselig. Sett inn et SIM-kort."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM-kortet er deaktivert permanent."\n"Ta kontakt med leverandøren av trådløstjenesten for å få et nytt SIM-kort."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Knapp for forrige sang"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Knapp for neste sang"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Lagre"</string>
<string name="date_time_done" msgid="2507683751759308828">"Ferdig"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Standard"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NYTT: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NYTT: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Trenger ingen rettigheter"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Skjul"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Vis alle"</b></string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index bd8a98b1448f..b744ad515d81 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -168,12 +168,43 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Uw berichten"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Sms, e-mail en andere berichten lezen en schrijven."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Uw persoonlijke informatie"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Rechtstreekse toegang tot de op uw tablet opgeslagen contacten en agenda."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Rechtstreekse toegang tot de op uw telefoon opgeslagen contacten en agenda."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Rechtstreeks toegang krijgen tot informatie over u die is opgeslagen op uw contactkaart."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Uw sociale informatie"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Rechtstreeks toegang krijgen tot informatie over uw contacten en sociale connecties."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Uw locatie"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Uw fysieke locatie bijhouden."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netwerkcommunicatie"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Toegang tot verschillende netwerkfuncties."</string>
+ <string name="permgrouplab_shortRangeNetwork" msgid="4504840216096355984">"Bluetooth en NFC"</string>
+ <string name="permgroupdesc_shortRangeNetwork" msgid="8821013030346680806">"Toegang krijgen tot Bluetooth of NFC-netwerken en -apparaten."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audio-instellingen"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Audio-instellingen wijzigen."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"De accu beïnvloeden"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Functies gebruiken waardoor de accu snel leeg kan raken."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Agenda"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Rechtstreeks toegang krijgen tot agenda en afspraken."</string>
+ <string name="permgrouplab_dictionary" msgid="8114410334955871144">"Gebruikerswoordenboek"</string>
+ <string name="permgroupdesc_dictionary" msgid="40926483968949978">"Rechtstreeks toegang krijgen tot het gebruikerswoordenboek."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bladwijzers en geschiedenis"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Rechtstreeks toegang krijgen tot bladwijzers en browsergeschiedenis."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"De wekker instellen."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Voicemail"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Rechtstreeks toegang krijgen tot voicemail."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfoon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Rechtstreeks toegang krijgen tot de microfoon om geluid op te nemen."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Rechtstreeks toegang krijgen tot de camera om afbeeldingen of video\'s vast te leggen."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informatie over uw applicaties"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Mogelijkheid om het gedrag van andere applicaties op uw apparaat te beïnvloeden."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Achtergrond"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"De achtergrondinstellingen van het apparaat wijzigen."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Klok"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"De tijd of tijdzone van het apparaat wijzigen."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusbalk"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"De instellingen van de apparaatstatusbalk wijzigen."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synchronisatie-instellingen"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Toegang krijgen tot de synchronisatie-instellingen."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Uw accounts"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Toegang tot de beschikbare accounts."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Bedieningselementen hardware"</string>
@@ -184,6 +215,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Toegang tot en beheer van het systeem op lager niveau."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ontwikkelingshulpprogramma\'s"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Functies die alleen nodig zijn voor app-ontwikkelaars."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Gebruikersinterface van andere applicaties"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"De gebruikersinterface van andere applicaties beïnvloeden."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Opslagruimte"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Toegang krijgen tot USB-opslag."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Toegang tot de SD-kaart."</string>
@@ -702,6 +735,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Geen SIM-kaart in telefoon."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Plaats een simkaart."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"De simkaart ontbreekt of kan niet worden gelezen. Plaats een simkaart."</string>
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Onbruikbare simkaart."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Uw simkaart is permanent uitgeschakeld."\n" Neem contact op met uw mobiele serviceprovider voor een nieuwe simkaart."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Knop voor vorig nummer"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Knop voor volgend nummer"</string>
@@ -1043,7 +1077,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Instellen"</string>
<string name="date_time_done" msgid="2507683751759308828">"Gereed"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Standaard"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NIEUW: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NIEUW: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Geen machtigingen vereist"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Verbergen"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Alles weergeven"</b></string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 5d3d9a3b8363..f18cb33ab3ff 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Twoje wiadomości"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Czytanie i zapisywanie wiadomości SMS, e-mail i innych"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informacje osobiste"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Bezpośredni dostęp do kalendarza i kontaktów zapisanych w tablecie."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Bezpośredni dostęp do kontaktów i kalendarza zapisanych w telefonie."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Twoja lokalizacja"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitorowanie fizycznej lokalizacji"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Połączenia sieciowe"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Uzyskiwanie dostępu do różnych funkcji sieciowych"</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Twoje konta"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Dostęp do udostępnionych kont."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Sterowanie sprzętowe"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Dostęp i kontrola systemu niższego poziomu."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Narzędzia programistyczne"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkcje potrzebne jedynie programistom."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Pamięć"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Dostęp do nośnika USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Dostęp do karty SD."</string>
@@ -498,7 +566,7 @@
<string name="permdesc_accessWimaxState" msgid="5914958077555177749">"Pozwala aplikacji na wyświetlanie informacji o stanie połączenia WiMAX."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Zmień stan WiMAX"</string>
<string name="permdesc_changeWimaxState" msgid="3328853825006455912">"Zezwala aplikacji na łączenie się i rozłączanie z siecią WiMAX."</string>
- <string name="permlab_bluetooth" msgid="6127769336339276828">"wiązanie z urządzeniami Bluetooth"</string>
+ <string name="permlab_bluetooth" msgid="6127769336339276828">"parowanie z urządzeniami Bluetooth"</string>
<string name="permdesc_bluetooth" product="tablet" msgid="7007851048416363446">"Pozwala aplikacji na wyświetlanie konfiguracji lokalnego tabletu z funkcją Bluetooth oraz na nawiązywanie i akceptowanie połączeń ze sparowanymi urządzeniami."</string>
<string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"Pozwala aplikacji na wyświetlanie konfiguracji lokalnego telefonu z funkcją Bluetooth oraz na nawiązywanie i akceptowanie połączeń ze sparowanymi urządzeniami."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"kontrolowanie łączności Near Field Communication"</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Brak karty SIM w telefonie."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Włóż kartę SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Brak karty SIM lub nie można jej odczytać. Włóż kartę SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Karta SIM jest trwale wyłączona."\n" Skontaktuj się z dostawcą usług bezprzewodowych, aby uzyskać inną kartę SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Przycisk poprzedniego utworu"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Przycisk następnego utworu"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Ustaw"</string>
<string name="date_time_done" msgid="2507683751759308828">"Gotowe"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Domyślne"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NOWE: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOWE: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Nie są wymagane żadne uprawnienia"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Ukryj"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Pokaż wszystko"</b></string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index d13d8adca217..c0102405d0ff 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"As suas mensagens"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Ler e escrever SMS, e-mail e outras mensagens."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Os seus dados pessoais"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Acesso directo aos seus contactos e calendário armazenados no tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acesso directo aos seus contactos e calendário armazenados no telefone."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"A sua localização"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitorizar a sua localização física."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicação de rede"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Aceder a várias funcionalidades de rede."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"As suas contas"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Aceda às contas disponíveis."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controlos de hardware"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acesso e controlo de nível inferior do sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ferramentas de desenvolvimento"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funcionalidades apenas necessárias para programadores de aplicações."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Armazenamento"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Aceder ao armazenamento USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Aceder ao cartão SD."</string>
@@ -342,11 +410,11 @@
<string name="permdesc_broadcastSticky" product="tablet" msgid="1181582512022829259">"Permite que uma aplicação envie difusões fixas, que permanecem após o fim da difusão. As aplicações maliciosas podem tornar o tablet lento ou instável, fazendo com que utilize demasiada memória."</string>
<string name="permdesc_broadcastSticky" product="default" msgid="3287869131621514325">"Permite que a aplicação envie difusões fixas, que permanecem após o fim da difusão. As aplicações maliciosas podem tornar o telemóvel lento ou instável, fazendo com que utilize demasiada memória."</string>
<string name="permlab_readContacts" msgid="8348481131899886131">"ler os contactos"</string>
- <string name="permdesc_readContacts" product="tablet" msgid="6370069055638209432">"Permite que a aplicação leia todos os dados sobre os seus contactos armazenados no seu tablet, incluindo a frequência com que ligou, enviou emails ou comunicou de outras formas com indivíduos específicos. Isto ajuda a preencher automaticamente os endereços de email e outras funcionalidades convenientes. As aplicações maliciosas podem utilizar esta permissão para enviar os seus dados de contacto a outras pessoas."</string>
- <string name="permdesc_readContacts" product="default" msgid="4093353182535351501">"Permite que a aplicação leia todos os dados sobre os seus contactos armazenados no seu telemóvel, incluindo a frequência com que ligou, enviou emails ou comunicou de outras formas com indivíduos específicos. Isto ajuda a preencher automaticamente os endereços de email e outras funcionalidades convenientes. As aplicações maliciosas podem utilizar esta permissão para enviar os seus dados de contacto a outras pessoas."</string>
+ <string name="permdesc_readContacts" product="tablet" msgid="6370069055638209432">"Permite que a aplicação leia todos os dados sobre os contactos armazenados no seu tablet, incluindo a frequência com que ligou, enviou emails ou comunicou de outras formas com indivíduos específicos. Tal ajuda a preencher automaticamente os endereços de email e outras funcionalidades convenientes. As aplicações maliciosas podem utilizar esta permissão para enviar os seus dados de contacto a outras pessoas."</string>
+ <string name="permdesc_readContacts" product="default" msgid="4093353182535351501">"Permite que a aplicação leia todos os dados sobre os contactos armazenados no seu telemóvel, incluindo a frequência com que ligou, enviou emails ou comunicou de outras formas com indivíduos específicos. Tal ajuda a preencher automaticamente os endereços de email e outras funcionalidades convenientes. As aplicações maliciosas podem utilizar esta permissão para enviar os seus dados de contacto a outras pessoas."</string>
<string name="permlab_writeContacts" msgid="5107492086416793544">"modificar os contactos"</string>
- <string name="permdesc_writeContacts" product="tablet" msgid="5495863352173533286">"Permite que a aplicação modifique os dados sobre os seus contactos armazenados no seu tablet, incluindo a frequência com que ligou, enviou emails ou comunicou de outras formas com indivíduos específicos. Isto ajuda a preencher automaticamente os endereços de email e outras funcionalidades convenientes. As aplicações maliciosas podem utilizar esta situação para apagar ou modificar os seus dados de contacto."</string>
- <string name="permdesc_writeContacts" product="default" msgid="6108469962248865715">"Permite que a aplicação modifique os dados sobre os seus contactos armazenados no seu telemóvel, incluindo a frequência com que ligou, enviou emails ou comunicou de outras formas com indivíduos específicos. Isto ajuda a preencher automaticamente os endereços de email e outras funcionalidades convenientes. As aplicações maliciosas podem utilizar esta situação para apagar ou modificar os seus dados de contacto."</string>
+ <string name="permdesc_writeContacts" product="tablet" msgid="5495863352173533286">"Permite que a aplicação modifique os dados sobre os contactos armazenados no seu tablet, incluindo a frequência com que ligou, enviou emails ou comunicou de outras formas com indivíduos específicos. Tal ajuda a preencher automaticamente os endereços de email e outras funcionalidades convenientes. As aplicações maliciosas podem utilizar esta permissão para apagar ou modificar os seus dados de contacto."</string>
+ <string name="permdesc_writeContacts" product="default" msgid="6108469962248865715">"Permite que a aplicação modifique os dados sobre os contactos armazenados no seu telemóvel, incluindo a frequência com que ligou, enviou emails ou comunicou de outras formas com indivíduos específicos. Tal ajuda a preencher automaticamente os endereços de email e outras funcionalidades convenientes. As aplicações maliciosas podem utilizar esta permissão para apagar ou modificar os seus dados de contacto."</string>
<string name="permlab_readCallLog" msgid="3478133184624102739">"ler registo de chamadas"</string>
<string name="permdesc_readCallLog" product="tablet" msgid="3995157599976515002">"Permite à aplicação ler o registo de chamadas do tablet, incluindo os dados sobre as chamadas recebidas e efetuadas. As aplicações maliciosas podem utilizar esta funcionalidade para enviar os seus dados para outras pessoas."</string>
<string name="permdesc_readCallLog" product="default" msgid="3452017559804750758">"Permite que a aplicação leia o registo de chamadas do telemóvel, incluindo os dados sobre as chamadas recebidas e efetuadas. As aplicações maliciosas podem utilizar esta funcionalidade para enviar os seus dados para outras pessoas."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Nenhum cartão SIM no telefone."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Insira um cartão SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"O cartão SIM está em falta ou não é legível. Introduza um cartão SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"O cartão SIM foi desativado definitivamente. "\n" Contacte o seu fornecedor de serviços de rede sem fios para obter outro cartão SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botão Faixa anterior"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botão Faixa seguinte"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Definir"</string>
<string name="date_time_done" msgid="2507683751759308828">"Concluído"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Predefinido"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NOVA: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVA: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Não são necessárias permissões"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar tudo"</b></string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 2e3d35c698d3..423eb9105239 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Suas mensagens"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Ler e gravar mensagens SMS, e-mails e outras mensagens."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Suas informações pessoais"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Acessa diretamente seus contatos e agenda armazenados no tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acessa diretamente os seus contatos e agenda armazenados no telefone."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Seu local"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitore seu local físico."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicação da rede"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Acesse diversos recursos de rede."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Suas contas"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acessar as contas disponíveis."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controles de hardware"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acesso de nível inferior e controle do sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ferramentas de desenvolvimento"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Recursos necessários apenas para desenvolvedores de aplicativos."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Armazenamento"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acessa o armazenamento USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acessar o cartão SD."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Não há um cartão SIM no telefone."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Insera um cartão SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"O cartão SIM não foi inserido ou não é possível lê-lo. Insira um cartão SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"O cartão SIM foi desativado permanentemente."\n"Entre em contato com seu provedor de serviços sem fio para obter outro cartão SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botão \"Faixa anterior\""</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botão \"Próxima faixa\""</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Definir"</string>
<string name="date_time_done" msgid="2507683751759308828">"Concluído"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Padrão"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NOVO: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVO: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Nenhuma permissão necessária"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todas"</b></string>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 37b3f702d419..f6177ba7f93f 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -209,15 +209,78 @@
<!-- no translation found for permgroupdesc_messages (7821999071003699236) -->
<skip />
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vossas infurmaziuns persunalas"</string>
- <!-- no translation found for permgroupdesc_personalInfo (6975389054186265786) -->
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
<skip />
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acceder directamain als contacts ed al chalender memorisà sin il telefonin."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Vossa posiziun"</string>
<!-- no translation found for permgroupdesc_location (5704679763124170100) -->
<skip />
<string name="permgrouplab_network" msgid="5808983377727109831">"Communicaziun rait"</string>
<!-- no translation found for permgroupdesc_network (4478299413241861987) -->
<skip />
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Voss contos"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Access als contos disponibels"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Cumonds da la hardware"</string>
@@ -229,6 +292,10 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Utensils per sviluppaders"</string>
<!-- no translation found for permgroupdesc_developmentTools (7058828032358142018) -->
<skip />
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Memoria"</string>
<!-- no translation found for permgroupdesc_storage (7442318502446874999) -->
<skip />
@@ -1089,6 +1156,8 @@
<skip />
<!-- no translation found for lockscreen_missing_sim_instructions_long (3526573099019319472) -->
<skip />
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<!-- no translation found for lockscreen_permanent_disabled_sim_instructions (910904643433151371) -->
<skip />
<!-- no translation found for lockscreen_transport_prev_description (201594905152746886) -->
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 07d2e5eca1bb..602236dbfd7b 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Mesajele dvs."</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Citire şi scriere mesaje SMS, e-mailuri şi alte mesaje."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informaţiile dvs. personale"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Acces direct la agenda şi la calendarul stocate pe computerul dvs. tablet PC."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acces direct la agenda şi la calendarul stocate pe telefonul dvs."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Locaţia dvs."</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitorizează locaţia dvs. fizică."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicare în reţea"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accesează diferite funcţii ale reţelei."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Conturile dvs."</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accesează conturile disponibile."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controale hardware"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acces şi control de nivel redus ale sistemului."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Instrumente de dezvoltare"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funcţii necesare doar pentru dezvoltatorii de aplicaţii."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Stocare"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accesează stocarea USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accesează cardul SD."</string>
@@ -267,7 +335,7 @@
<string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Permite aplicaţiei să lanseze interfaţa de utilizare pentru confirmarea copiei de rezervă complete. Nu poate fi utilizată de orice aplicaţie."</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"afişare ferestre neautorizate"</string>
<string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Permite aplicaţiei să creeze ferestre destinate a fi folosite de către interfaţa de utilizare a sistemului intern. Nu se utilizează de aplicaţiile obişnuite."</string>
- <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"desenează peste alte aplicaţii"</string>
+ <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"suprapune elemente vizuale peste alte aplicaţii"</string>
<string name="permdesc_systemAlertWindow" msgid="8507863469978066409">"Permite aplicaţiei să afişeze ferestre de alertă de sistem. Aplicaţiile rău intenţionate pot să preia controlul asupra întregului ecran."</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"modificare viteză de animaţie globală"</string>
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Permite aplicaţiei să modifice oricând viteza globală de animaţie (animaţii mai rapide sau mai lente)."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefonul nu are card SIM."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Introduceţi un card SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Cardul SIM lipseşte sau nu poate fi citit. Introduceţi un card SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Cardul dvs. SIM este dezactivat definitiv."\n" Contactaţi furnizorul de servicii wireless pentru a obţine un alt card SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Butonul Melodia anterioară"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Butonul Melodia următoare"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Setaţi"</string>
<string name="date_time_done" msgid="2507683751759308828">"Terminat"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Prestabilit"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NOU: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOU: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Nu se solicită nicio permisiune"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Ascundeţi"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Afişaţi-le pe toate"</b></string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index bcb34e335507..b9e8e774541b 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Сообщения"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Чтение и запись SMS, электронных писем и других сообщений."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Личная информация"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Прямой доступ к контактам и событиям календаря, сохраненным в памяти планшетного ПК."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Прямой доступ к контактам и событиям календаря, сохраненным в памяти телефона."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Ваше местоположение"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Приложение сможет отслеживать ваше местоположение."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Сетевой обмен данными"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Приложение сможет получать доступ к различным сетевым функциям."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Ваши аккаунты"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Доступ к имеющимся аккаунтам."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Управление оборудованием"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Доступ нижнего уровня и управление системой."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Инструменты разработки"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функции, предназначенные для разработчиков приложений."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Память"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Доступ к USB-накопителю."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ к SD-карте."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"SIM-карта не установлена."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Вставьте SIM-карту."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-карта отсутствует или недоступна. Вставьте SIM-карту."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM-карта окончательно заблокирована."\n"Чтобы получить новую, обратитесь к своему оператору."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Кнопка перехода к предыдущему треку"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Кнопка перехода к следующему треку"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Установить"</string>
<string name="date_time_done" msgid="2507683751759308828">"Готово"</string>
<string name="default_permission_group" msgid="2690160991405646128">"По умолчанию"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"НОВОЕ: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВОЕ: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Не требуется разрешений"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Скрыть"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Показать все"</b></string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 9d9ad1b697bb..005988cb6740 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vaše správy"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Čítanie a písanie správ SMS, e-mailov a ďalších správ."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vaše osobné informácie"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Priamy prístup k vašim kontaktom a kalendáru uloženým v tablete."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Priamy prístup k vašim kontaktom a kalendáru uloženým v telefóne."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Vaša poloha"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Sledovanie vašej fyzickej polohy."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Sieťová komunikácia"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Prístup k rôznym funkciám siete."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaše účty"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Prístup k dostupným účtom."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Ovládanie hardvéru"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Nízkoúrovňový prístup a ovládanie systému."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Nástroje pre vývoj"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkcie len pre vývojárov aplikácií."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Ukladací priestor"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Prístup do ukl. priestoru USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Prístup na kartu SD."</string>
@@ -519,11 +587,11 @@
<string name="permdesc_readDictionary" msgid="8977815988329283705">"Umožňuje aplikácii čítať súkromné slová, názvy a frázy, ktoré mohol používateľ uložiť do slovníka používateľa."</string>
<string name="permlab_writeDictionary" msgid="2296383164914812772">"zapisovať do slovníka definovaného používateľom"</string>
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"Umožňuje aplikácii zapisovať nové slová do používateľského slovníka."</string>
- <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"čítať obsah ukladacieho priestoru USB"</string>
+ <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"čítať obsah úložiska USB"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"čítať obsah karty SD"</string>
- <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Umožňuje aplikácii čítať obsah ukladacieho priestoru USB, ktorý môže zahrnovať fotografie a mediálne údaje."</string>
+ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Umožňuje aplikácii čítať obsah úložiska USB, ktorý môže obsahovať fotografie a mediálne údaje."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Umožňuje aplikácii čítať obsah karty SD, ktorý môže zahrnovať fotografie a mediálne údaje."</string>
- <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"upraviť alebo odstrániť obsah ukladacieho priestoru USB"</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"upraviť alebo odstrániť obsah úložiska USB"</string>
<string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"upraviť alebo odstrániť obsah karty SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Umožňuje aplikácii zápis do ukladacieho priestoru USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Umožňuje aplikácii zápis na kartu SD."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"V telefóne nie je žiadna karta SIM."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Vložte kartu SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Karta SIM chýba alebo sa z nej nedá čítať. Vložte kartu SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Vaša karta SIM bola natrvalo zakázaná."\n"Ak chcete získať inú kartu SIM, kontaktujte svojho operátora."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Tlačidlo Predchádzajúca stopa"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Tlačidlo Ďalšia stopa"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Nastaviť"</string>
<string name="date_time_done" msgid="2507683751759308828">"Hotovo"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Predvolené"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NOVINKA: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVINKA: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Nevyžadujú sa žiadne oprávnenia."</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Skryť"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Zobraziť všetky"</b></string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 326ca23fcc3a..693cdc3a2fcc 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vaša sporočila"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Pisanje in branje SMS-ov, e-pošte in drugih sporočil."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Osebni podatki"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Neposreden dostop do stikov in koledarskih vnosov, shranjenih v tabličnem računalniku."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Neposreden dostop do stikov in koledarja, shranjenega v telefonu."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Vaša lokacija"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Spremljanje fizične lokacije."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Omrežna komunikacija"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Dostop do različnih funkcij omrežja."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaši računi"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Dostop do razpoložljivih računov."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kontrolniki strojne opreme"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Dostop nižje ravni in nadzor sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Razvojna orodja"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkcije, ki jih potrebujejo le razvijalci programa."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Prostor za shranjevanje"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Dostop do pomnilnika USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Dostop do kartice SD."</string>
@@ -353,9 +421,9 @@
<string name="permlab_writeCallLog" msgid="8552045664743499354">"pisanje v dnevnik klicev"</string>
<string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Aplikaciji dovoli spreminjanje dnevnika klicev v tabličnem računalniku, vključno s podatki o dohodnih in odhodnih klicih. Zlonamerne aplikacije lahko tako izbrišejo ali spreminjajo vaš dnevnik klicev."</string>
<string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Aplikaciji dovoli spreminjanje dnevnika klicev v telefonu, vključno s podatki o dohodnih in odhodnih klicih. Zlonamerne aplikacije lahko tako izbrišejo ali spreminjajo vaš dnevnik klicev."</string>
- <string name="permlab_readProfile" msgid="4701889852612716678">"branje vizitke"</string>
+ <string name="permlab_readProfile" msgid="4701889852612716678">"branje vaše osebne vizitke"</string>
<string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Programu omogoča branje osebnih podatkov v profilu, kot so ime in podatki za stik. To pomeni, da vas lahko program prepozna in vaše podatke o profilu pošlje drugim."</string>
- <string name="permlab_writeProfile" msgid="907793628777397643">"spreminjanje vizitke"</string>
+ <string name="permlab_writeProfile" msgid="907793628777397643">"spreminj. vaše osebne vizitke"</string>
<string name="permdesc_writeProfile" product="default" msgid="4637366723793045603">"Programu omogoča spreminjanje ali dodajanje osebnih podatkov v profilu, kot so ime in podatki za stik. To pomeni, da vas lahko drugi programi prepoznajo in vaše podatke o profilu pošljejo drugim."</string>
<string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"preberite svoj družabni tok"</string>
<string name="permdesc_readSocialStream" product="default" msgid="3419050808547335320">"Programu omogoča dostop do družabnih posodobitev vas in vaših prijateljev. Zlonamerni programi lahko to uporabijo za branje zasebne komunikacije med vami in prijatelji v družabnih omrežjih."</string>
@@ -498,7 +566,7 @@
<string name="permdesc_accessWimaxState" msgid="5914958077555177749">"Programu omogoča, da prikaže informacije o stanju omrežja WiMAX."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Sprememba stanja omrežja WiMAX"</string>
<string name="permdesc_changeWimaxState" msgid="3328853825006455912">"Programu omogoča, da vzpostavi povezavo z omrežjem WiMAX in jo prekine."</string>
- <string name="permlab_bluetooth" msgid="6127769336339276828">"vzpostavljanje povezave z napravami Bluetooth"</string>
+ <string name="permlab_bluetooth" msgid="6127769336339276828">"seznanitev z napravami Bluetooth"</string>
<string name="permdesc_bluetooth" product="tablet" msgid="7007851048416363446">"Programu omogoča ogled konfiguracije lokalnega tabličnega računalnika Bluetooth ter vzpostavljanje in sprejemanje povezave z združenimi napravami."</string>
<string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"Programom omogoča ogled konfiguracije lokalnega telefona Bluetooth ter ustvarjanje in sprejemanje povezave s povezanimi napravami."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"nadzor nad komunikacijo s tehnologijo bližnjega polja"</string>
@@ -522,7 +590,7 @@
<string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"branje vsebine pomnilnika USB"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"branje vsebine kartice SD"</string>
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Apl. om. br. USB s fot. in pr."</string>
- <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Omogoča, da aplikacija bere vsebino kartice SD, ki lahko vključujejo fotografije in predstavnost."</string>
+ <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Omogoča, da aplikacija bere vsebino kartice SD, ki lahko vključuje fotografije in predstavnost."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"spr. ali bris. vseb. pomn. USB"</string>
<string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"spreminjanje ali brisanje vsebine kartice SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Programu omogoča zapisovanje v pomnilnik USB."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"V telefonu ni kartice SIM."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Vstavite kartico SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Ni kartice SIM ali je ni mogoče prebrati. Vstavite kartico SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Kartica SIM je trajno onemogočena."\n" Če želite dobiti drugo kartico SIM, se obrnite na ponudnika brezžičnih storitev."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Gumb za prejšnjo skladbo"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Gumb za naslednjo skladbo"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Nastavi"</string>
<string name="date_time_done" msgid="2507683751759308828">"Končano"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Privzeto"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NOVO: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVO: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Ni zahtevanih dovoljenj"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Skrij"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Pokaži vse"</b></string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index d947de6e46ff..0bef1e32aa07 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Поруке"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Читање и писање SMS порука, порука е-поште и осталих порука."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Личне информације"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Директни приступ контактима и календарима сачуваним на таблету."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Директни приступ контактима и календару сачуваним на телефону."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Локација"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Надгледајте своју физичку локацију."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Комуникација преко мреже"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Приступајте разним функцијама мреже."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Налози"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Приступ доступним налозима."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Контроле хардвера"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Нижи нивои приступа и контроле система."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Алатке за програмирање"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функције потребне само програмерима апликација."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Складиште"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Приступите USB меморији."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Приступ SD картици."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"У телефон није уметнута SIM картица."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Уметните SIM картицу."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM недостаје или не може да се прочита. Уметните SIM картицу."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM картица је трајно онемогућена."\n" Обратите се добављачу услуге бежичне мреже да бисте добили другу SIM картицу."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Дугме за претходну песму"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Дугме за следећу песму"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Подеси"</string>
<string name="date_time_done" msgid="2507683751759308828">"Готово"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Подразумевано"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"НОВО: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВО: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Није потребна ниједна дозвола"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Сакриј"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Прикажи све"</b></string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index a97daec450d1..7f2b2c92e8bd 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Dina meddelanden"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Läsa och skriva SMS, e-post och andra meddelanden."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Dina personliga uppgifter"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direktåtkomst till dina kontakter och kalendern som har lagrats på pekdatorn."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direktåtkomst till dina kontakter och kalendern som har lagrats på telefonen."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Din plats"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Övervaka din fysiska plats."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Nätverkskommunikation"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Åtkomst till olika nätverksfunktioner."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Dina konton"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Få åtkomst till tillgängliga konton."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kontroller för maskinvara"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Åtkomst och kontroll av systemet på lägre nivå."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Utvecklingsverktyg"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funktioner som endast behövs för apputvecklare."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Få åtkomst till USB-enheten."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Få åtkomst till SD-kortet."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Inget SIM-kort i telefonen."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Sätt i ett SIM-kort."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-kort saknas eller kan inte läsas. Sätt i ett SIM-kort."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM-kortet har inaktiverats permanent."\n" Beställ ett nytt SIM-kort från din operatör."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Knapp för föregående spår"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Knapp för nästa spår"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Ställ in"</string>
<string name="date_time_done" msgid="2507683751759308828">"Klar"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Standardinställning"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"NY: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NY: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Inga behörigheter krävs"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Dölj"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Visa alla"</b></string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 244e9d062504..3ce4cd21f36e 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Ujumbe wako"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Soma na kuandika SMS, barua pepe, na jumbe zako zingine."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Maelezo yako ya kibinafsi"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Ufikiaji wa moja kwa moja wa anwani zako na kalenda iliyohifadhiwa kwenye kompyuta ndogo."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Ufikiaji wa moja kwa moja wa anwani zako na kalenda zilizohifadhiwa kwenye simu."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Mahali pako"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Fuatilia eneo lako halisi."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Mawasiliano ya mtandao"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Fikia vipengele mbalimbali vya mtandao."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Akaunti zako"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Fikia akaunti zinazopatikana."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Vidhibiti vya maunzi"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ufikiaji wa kiwango cha chini na udhibiti wa mfumo."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Zana za utengenezaji"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Vipengee vinahitajika tu na wasinidi wa programu."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Hifadhi"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Fikia hifadhi ya USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Fikia kadi ya SD."</string>
@@ -193,14 +261,11 @@
<string name="permdesc_statusBarService" msgid="716113660795976060">"Inaruhusu programu kuwa upau wa hali."</string>
<string name="permlab_expandStatusBar" msgid="1148198785937489264">"panua/kunja mwambaa hali"</string>
<string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Inaruhusu programu kupanua au kukunja upau wa hali."</string>
- <!-- no translation found for permlab_processOutgoingCalls (3906007831192990946) -->
- <skip />
+ <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"panga upya simu zinazotoka"</string>
<string name="permdesc_processOutgoingCalls" msgid="1152111671618301044">"Inaruhusu programu kuchakata simu zinazotoka na kubadilisha nambari itakayopigwa. Programu hasidi zinaweza kufuatilia, kuelekeza kwingine, au kuzuia simu zinazotoka."</string>
- <!-- no translation found for permlab_receiveSms (8673471768947895082) -->
- <skip />
+ <string name="permlab_receiveSms" msgid="8673471768947895082">"pokea jumbe za matini (SMS)"</string>
<string name="permdesc_receiveSms" msgid="8107887121893611793">"Inaruhusu programu kupokea na kuchakata jumbe za SMS. Programu hasidi zinaweza kufuatilia jumbe zako au kuzifuta bila kukuonyesha."</string>
- <!-- no translation found for permlab_receiveMms (1821317344668257098) -->
- <skip />
+ <string name="permlab_receiveMms" msgid="1821317344668257098">"pokea jumbe za matini (MMS)"</string>
<string name="permdesc_receiveMms" msgid="1424805308566612086">"Inaruhusu programu kupokea na kuchakata jumbe za MMS. Programu hasidi zinaweza kufuatilia jumbe zako au kuzifuta bila kukuonyesha."</string>
<string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"Pokea matangazo ya dharura"</string>
<string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"Inaruhusu programu kupokea na kuchakata jumbe za dharura. Ruhusa hii inapatikana tu kwa programu za mfumo."</string>
@@ -210,16 +275,13 @@
<string name="permdesc_sendSms" msgid="906546667507626156">"Inaruhusu programu kutuma jumbe za SMS. Programu hasidi zinaweza kukugharimu fedha kwa kutuma jumbe bila uthibitisho wako."</string>
<string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"Tuma ujumbe wa SMS bila ya thibitisho"</string>
<string name="permdesc_sendSmsNoConfirmation" msgid="3437759207020400204">"Huruhusu programu kutuma jumbe wa SMS. Programu hasidi huenda zikakugharimu pesa kwa kutuma jumbe bila uthibitisho wako."</string>
- <!-- no translation found for permlab_readSms (8745086572213270480) -->
- <skip />
+ <string name="permlab_readSms" msgid="8745086572213270480">"soma jumbe zako za matini (SMS au MMS)"</string>
<string name="permdesc_readSms" product="tablet" msgid="2341692916884515613">"Inaruhusu programu kusoma jumbe za SMS zilizohifadhiwa kwenye kompyuta kibao au SIM kadi yako. Programu hasidi zinaweza kusoma jumbe zako za siri."</string>
<string name="permdesc_readSms" product="default" msgid="5653850482025875493">"Inaruhusu programu kusoma jumbe za SMS zilizohifadiwa kwenye simu ya au SIM kadi. Programu hasidi zinaweza kusoma jumbe zako za siri."</string>
- <!-- no translation found for permlab_writeSms (3216950472636214774) -->
- <skip />
+ <string name="permlab_writeSms" msgid="3216950472636214774">"Hariri jumbe zako za matini (SMS au MMS)"</string>
<string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Inaruhusu programu kuandikia jumbe za SMS zinazohifadhiwa kwenye kompyuta yako kibao au SIM kadi. Programu hasidi zinaweza kufuta jumbe zako."</string>
<string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Inaruhusu programu kuandika jumbe za SMS zinazohifadhiwa kwenye simu yako au SIM kadi. programu hasidi zinaweza kufuta ujumbe zako."</string>
- <!-- no translation found for permlab_receiveWapPush (5991398711936590410) -->
- <skip />
+ <string name="permlab_receiveWapPush" msgid="5991398711936590410">"pokea jumbe za matini (WAP)"</string>
<string name="permdesc_receiveWapPush" msgid="7983455145335316872">"Inaruhusu programu kupokea na kuchakata jumbe za WAP. Programu hasidi zinaweza kufuatilia jumbe zako au kuzifuta bila kukuonyesha."</string>
<string name="permlab_getTasks" msgid="6466095396623933906">"rudisha programu zinazoendeshwa"</string>
<string name="permdesc_getTasks" msgid="6608159250520381359">"Inaruhusu programu kupata taarifa kuhusu kazi zinazoendelea sasa na hivi karibuni. Programu hasidi zinaweza kugundua taarifa ya kibinafsi kuhusu programu zingine."</string>
@@ -235,13 +297,11 @@
<string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"Huruhusu programu kudhibiti hali ya utangamano wa skrini ya programu zingine. Programu hasidi zinaweza kuvunja mwenendo wa programu zingine."</string>
<string name="permlab_setDebugApp" msgid="3022107198686584052">"wezesha utatuaji wa programu"</string>
<string name="permdesc_setDebugApp" msgid="4474512416299013256">"Huruhusu programu kuwasha kueua cha programu nyingine. Programu hasidi huenda zikatumia hii ili kuua programu nyingine."</string>
- <!-- no translation found for permlab_changeConfiguration (4162092185124234480) -->
- <skip />
+ <string name="permlab_changeConfiguration" msgid="4162092185124234480">"badilisha mipangilio ya kuonyesha mfumo"</string>
<string name="permdesc_changeConfiguration" msgid="4372223873154296076">"Huruhusu programu kubadilisha usanidi wa sasa, kama vile kieneo au ukubwa wa jumla wa fonti."</string>
<string name="permlab_enableCarMode" msgid="5684504058192921098">"Wezesha mtindo wa gari"</string>
<string name="permdesc_enableCarMode" msgid="4853187425751419467">"Inaruhusu programu kuwawezesha mtindo wa gari."</string>
- <!-- no translation found for permlab_killBackgroundProcesses (3914026687420177202) -->
- <skip />
+ <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"funga programu zingine"</string>
<string name="permdesc_killBackgroundProcesses" msgid="931129103262126617">"Inaruhusu programu kuua mchakato wa usuli wa programu zingine, hata kama kumbukumbu si ndogo."</string>
<string name="permlab_forceStopPackages" msgid="2329627428832067700">"Lazimisha kukomesha programu zingine"</string>
<string name="permdesc_forceStopPackages" msgid="5253157296183940812">"Inaruhusu programu kulazimisha programu zingine kuacha."</string>
@@ -265,8 +325,7 @@
<string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Inaruhusu programu kutangaza taarifa kwamba ujumbe wa WAP PUSH umepokewa. Programu hasidi zinaweza kutumia hii kubuni risiti ya ujumbe wa MMS au polepole kubadilisha maudhui yoyote ya ukurasa wa tovuti na vibadala vibovu."</string>
<string name="permlab_setProcessLimit" msgid="2451873664363662666">"zuia idadi ya michakato inayoendeshwa"</string>
<string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Inaruhusu programu kudhibiti upeo wa idadi ya michakato ambayo itaendeshwa. Kamwe hazihitajiki kwa programu za kwaida."</string>
- <!-- no translation found for permlab_setAlwaysFinish (550958507798796965) -->
- <skip />
+ <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"lazimisha programu za usuli kufunga"</string>
<string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"Inaruhusu programu kudhibiti kama daima shughuli zinamalizwa wakati ziendapo kwa mandhari-nyuma. Kamwe hazihitajiki kwa programu za kawaida."</string>
<string name="permlab_batteryStats" msgid="7863923071360031652">"rekebisha takwimu za betri"</string>
<string name="permdesc_batteryStats" msgid="6835186932305744068">"Inaruhusu programu kurekebisha takwimu za betri zilizokusanywa. Si kwa matumizi ya programu za kawaida."</string>
@@ -276,8 +335,7 @@
<string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Inaruhusu programu kuzindua UI ya kuthibitisha chelezo kamili. Si ya kutumiwa na programu yoyote."</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"onyesha madirisha yasiyoidhinishwa"</string>
<string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Huruhusu programu kuunda madirisha ambayo yananuiwa kutumiwa na kusano ya mtumiaji ya mfumo wa ndani. Sio ya matumizi na programu za kawaida."</string>
- <!-- no translation found for permlab_systemAlertWindow (3543347980839518613) -->
- <skip />
+ <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"chora juu ya programu zingine"</string>
<string name="permdesc_systemAlertWindow" msgid="8507863469978066409">"Inaruhusu programu kuonyesha dirisha za arifa za mfumo. Programu hasidi zaweza kutawala skrini nzima."</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"rekebisha kasi ya jumla ya uhuisho"</string>
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Huruhusu programu kubadilisha kasi ya uhuishaji kijumla (uhuisho wa haraka zaidi au wa polepole zaidi) wakati wowote."</string>
@@ -339,26 +397,22 @@
<string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"Inaruhusu programu kutoa au kukataa idhini maalum ya programu hii au zingine. Programu hasidi zinaweza kutumia hii ili kufikia vipengee ambavyo hujaziruhusu."</string>
<string name="permlab_setPreferredApplications" msgid="8463181628695396391">"kuweka programu zinazopendelewa"</string>
<string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"Inaruhusu programu kurekebisha programu unazopendelea. Programu hasidi zinaweza, polepole, kubadilisha programu zinazoendeshwa, na kuzifanya programu ulizo nazo kukusanya data ya kibinafsi kutoka kwako."</string>
- <!-- no translation found for permlab_writeSettings (2226195290955224730) -->
- <skip />
+ <string name="permlab_writeSettings" msgid="2226195290955224730">"rekebisha mipangilio ya mfumo"</string>
<string name="permdesc_writeSettings" msgid="7775723441558907181">"Inaruhusu programu kurekebisha mipangilio ya mfumo wa data. Programu hasidi zinaweza kuvuruga usanidi wa mfumo wako."</string>
<string name="permlab_writeSecureSettings" msgid="204676251876718288">"rekebisha mipangilio ya mfumo salama"</string>
<string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"Inaruhusu programu kurekebisha mipagilio ya mfumo wa data salama. Si ya kutumiwa na programu za kawaida."</string>
<string name="permlab_writeGservices" msgid="2149426664226152185">"rekebisha ramani ya Google services"</string>
<string name="permdesc_writeGservices" msgid="1287309437638380229">"Inaruhusu programu kurekebisha ramani ya huduma za Google. Si ya kutumiwa na programu za kawaida."</string>
- <!-- no translation found for permlab_receiveBootCompleted (5312965565987800025) -->
- <skip />
+ <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"endesha wakati wa uwashaji"</string>
<string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Inaruhusu programu yenyewe kujianzisha baada ya mfumo kumaliza kuuanza upya. Hii inaweza kufanya ichukue muda mrefu kuanza kompyuta kibao na kuruhusu programu kupunguza kasi ya kompyuta kibao kijumla kwa kuendeshwa siku zote."</string>
<string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Inaruhusu programu kujianzisha yenyewe mfumo unapo maliza kuanza upya. Hii inaweza kuchukua muda mrefu simu kuanza na kuruhusu programu kupunguza kasi ya simu kwa jumla kwa kuendeshwa polepole kila wakati."</string>
<string name="permlab_broadcastSticky" msgid="7919126372606881614">"tuma tangazo la kulanata"</string>
<string name="permdesc_broadcastSticky" product="tablet" msgid="1181582512022829259">"Inaruhusu programu kutuma matangazo nata, ambayo hubakia baada ya matangazo kuisha. Programu hasidi zinaweza fanya kompyuta kibao kufanya kazi polepole au kuifanya isiwe thabiti kwa kuifanya itumie kumbukumbu kubwa zaidi."</string>
<string name="permdesc_broadcastSticky" product="default" msgid="3287869131621514325">"Inaruhusu programu kutuma matangazo nata, ambayo hubakia baada ya matangazo kuisha. Programu hasidi zinaweza fanya simu kufanya kazi polepole au kuifanya isiwe thabiti kwa kuifanya itumie kumbukumbu kubwa zaidi."</string>
- <!-- no translation found for permlab_readContacts (8348481131899886131) -->
- <skip />
+ <string name="permlab_readContacts" msgid="8348481131899886131">"soma anwani zako"</string>
<string name="permdesc_readContacts" product="tablet" msgid="6370069055638209432">"Huruhusu programu kusoma data yote kuhusu anwani zako zilizohifadhiwa kwenye kompyuta yako kibao, ikiwa ni pamoja na idadi ya mara ambazo ulipiga simu, kutuma barua pepe, au kuwasiliana kwa njia zingine na watu maalum. Hii husaidia na ukamilishaji otomatiki wa anwani za barua pepe na vipengele vingine vinavyofaa. Programu hasidi zinaweza kutumia idhini hii ili kutuma data yako ya anwani kwa watu wengine."</string>
<string name="permdesc_readContacts" product="default" msgid="4093353182535351501">"Huruhusu programu kusoma data yote kuhusu anwani zako zilizohifadhiwa kwenye simu yako, ikiwa ni pamoja na idadi ya mara ambazo umepiga simu, kutuma barua pepe, au kuwasiliana kwa njia zingine na watu maalum. Hii husaidia na ukamilishaji otomatiki wa anwani za barua pepe na vipengele vingine vinavyofaa. Programu hasidi zinaweza kutumia idhini hii ili kutuma data yako ya anwani kwa watu wengine."</string>
- <!-- no translation found for permlab_writeContacts (5107492086416793544) -->
- <skip />
+ <string name="permlab_writeContacts" msgid="5107492086416793544">"rekebisha anwani zako"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="5495863352173533286">"Huruhusu programu kurekebisha data kuhusu anwani zako zilizohifadhiwa kwenye kompyuta yako kibao, ikiwa ni pamoja na idadi ya mara ulizopiga simu, kutumia barua pepe, au kuwasiliana kwa njia zingine na watu maalum. Hii husaidia na ukamilishaji otomatiki wa anwani za barua pepe na vipengele vingine vinavyofaa. Programu hasidi zinaweza kutumia hii kufuta au kurekebisha data yako ya anwani."</string>
<string name="permdesc_writeContacts" product="default" msgid="6108469962248865715">"Huruhusu programu kurekebisha data kuhusu anwani zako zilizohifadhiwa kwenye simu yako, ikiwa ni pamoja na idadi ya mara ulizopiga simu, kutuma barua pepe, au kuwasiliana kwa njia zingine na watu maalum. Hii husaidia na ukamilishaji otomatiki wa anwani za barua pepe na vipengele vingine vinavyofaa. Programu hasidi zinaweza kutumia hii kufuta au kurekebisha data yako ya anwani."</string>
<string name="permlab_readCallLog" msgid="3478133184624102739">"soma rajisi ya simu"</string>
@@ -367,11 +421,9 @@
<string name="permlab_writeCallLog" msgid="8552045664743499354">"andika rajisi ya simu"</string>
<string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Huruhusu programu kurekebisha rajisi ya kompyuta kibao yako, ikiwa ni pamoja na simu zinazoingia na kutoka. Huenda programu hasidi zikatumia hii ili kufuta au kurekebisha rajisi ya simu yako."</string>
<string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Huruhusu programu kurekebisha rajisi ya simu yako, ikiwa ni pamoja na simu zinazoingia na kutoka. Huenda programu hasidi zikatumia hii ili kufuta au kurekebisha rajisi ya simu yako."</string>
- <!-- no translation found for permlab_readProfile (4701889852612716678) -->
- <skip />
+ <string name="permlab_readProfile" msgid="4701889852612716678">"soma kadi yako mwenyewe ya mawasiliano"</string>
<string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Inaruhusu programu kusoma maelezo mafupi ya kibinafsi yaliyohifadhiwa kwenye kifaa chako, kama vile jina lako na taarifa ya kuwasiliana. Hii ina maanisha programu inaweza kukutambua na kutuma taarifa yako fupi ya kibinafsi kwa wengine."</string>
- <!-- no translation found for permlab_writeProfile (907793628777397643) -->
- <skip />
+ <string name="permlab_writeProfile" msgid="907793628777397643">"rekebisha kadi yako mwenyewe ya mawasiliano"</string>
<string name="permdesc_writeProfile" product="default" msgid="4637366723793045603">"Inaruhusu programu kubadilisha au kuongeza taarifa fupi ya kibinafsi iliyohifadhiwa katika kifaa chako, kama vile jina lako na maelezo ya kuwasiliana. Hii ina maanisha kwamba programu zingine zinaweza kukutambua na kutuma taarifa yako fupi kwa wengine."</string>
<string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"soma mipasho yako wa kijamii"</string>
<string name="permdesc_readSocialStream" product="default" msgid="3419050808547335320">"Inaruhusu programu kufikia na kulandanisha sasisho za kijamii kutoka kwako na marafiki zako. Programu hasidi zinaweza kutumia hii kusoma mawasiliano ya kibinafsi kati yako na marafiki zako kwenye mitandao ya kijamii."</string>
@@ -412,15 +464,11 @@
<string name="permlab_reboot" product="default" msgid="2898560872462638242">"lazimisha kwasha upya simu"</string>
<string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Inaruhusu programu kulazimisha kompyuta kibao kuwashwa upya."</string>
<string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Inaruhusu programu kulazimisha simu kujiwasha upya."</string>
- <!-- no translation found for permlab_mount_unmount_filesystems (2927361537942591841) -->
- <skip />
- <!-- no translation found for permlab_mount_unmount_filesystems (4402305049890953810) -->
- <skip />
+ <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"fikia mfumo wa faili wa hifadhi ya USB"</string>
+ <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"fikia mfumo wa faili wa Kadi ya SD"</string>
<string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Inaruhusu programu kupachika au kupachua mifumo ya faili ya hifadhi inayoweza kutolewa."</string>
- <!-- no translation found for permlab_mount_format_filesystems (6227819582624904972) -->
- <skip />
- <!-- no translation found for permlab_mount_format_filesystems (262582698639274056) -->
- <skip />
+ <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"futa hifadhi ya USB"</string>
+ <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"futa Kadi ya SD"</string>
<string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"Inaruhusu programu kufomati hifadhi inayoweza kutolewa."</string>
<string name="permlab_asec_access" msgid="3411338632002193846">"pata maelezo juu ya hifadhi ya ndani"</string>
<string name="permdesc_asec_access" msgid="3094563844593878548">"Inaruhusu programu kupata maelezo juu ya hifadhi ya ndani."</string>
@@ -432,8 +480,7 @@
<string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"Inaruhusu programu kupachika/kupachua hifadhi ya ndani."</string>
<string name="permlab_asec_rename" msgid="7496633954080472417">"ipe hifadhi ya ndani jina jipya"</string>
<string name="permdesc_asec_rename" msgid="1794757588472127675">"Inaruhusu programu kubadilisha jina la hifadhi ya ndani."</string>
- <!-- no translation found for permlab_vibrate (7696427026057705834) -->
- <skip />
+ <string name="permlab_vibrate" msgid="7696427026057705834">"dhibiti mtetemo"</string>
<string name="permdesc_vibrate" msgid="6284989245902300945">"Inaruhusu programu kudhibiti kitingishi."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"dhibiti tochi"</string>
<string name="permdesc_flashlight" msgid="6522284794568368310">"Inaruhusu programu kudhibiti tochi."</string>
@@ -458,8 +505,7 @@
<string name="permdesc_bindGadget" msgid="8261326938599049290">"Inaruhusu programu kuwaambia mfumo wijeti ambazo zinaweza kutumika na programu. Programu ambayo ina ruhusa hii inaweza kuruhusu ufikiaji wa data binafsi na kwa programu nyingine. Si ya kutumiwa na programu za kawaida."</string>
<string name="permlab_modifyPhoneState" msgid="8423923777659292228">"badiliisha hali ya simu"</string>
<string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Inaruhusu programu kudhibiti vipengee vya kifaa. Programu iliyo na ruhusa hii inaweza badilisha mtandao, kuzima na kuwasha redio ya simu bila hata kukujulisha."</string>
- <!-- no translation found for permlab_readPhoneState (9178228524507610486) -->
- <skip />
+ <string name="permlab_readPhoneState" msgid="9178228524507610486">"soma hali ya simu na kitambulisho"</string>
<string name="permdesc_readPhoneState" msgid="5127767618743602782">"Inaruhusu programu kufikia vipengee vya simu vya kifaa. Programu inayo na ruhusa hii inaweza kuamua namba ya simu na namba tambulishi ya simu hii, kama kuna simu inapigwa, namba inayopigiwa simu hiyo na mengine kama hayo."</string>
<string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"zuia kompyuta ndogo dhidi ya kulala"</string>
<string name="permlab_wakeLock" product="default" msgid="573480187941496130">"zuia simu dhidi ya kulala"</string>
@@ -474,8 +520,7 @@
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Endesha kama jaribio la kiwango cha chini cha mtengenezaji, kwa hivyo kuruhusu ufikiaji kamili wa maunzi ya simu. Inapatikana tu wakati simu inaendeshwa katika gumzo ya jaribio ya mtengenezaji."</string>
<string name="permlab_setWallpaper" msgid="6627192333373465143">"weka mandhari"</string>
<string name="permdesc_setWallpaper" msgid="7373447920977624745">"Inaruhusu programu kuweka mfumo wa mandhari."</string>
- <!-- no translation found for permlab_setWallpaperHints (3278608165977736538) -->
- <skip />
+ <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"rekebisha ukubwa wa mandhari yako"</string>
<string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Inaruhusu programu kuweka vidokezo vya ukubwa wa mandhari ya mfumo."</string>
<string name="permlab_masterClear" msgid="2315750423139697397">"weka upya mfumo kwa chaguo-msingi za kiwanda"</string>
<string name="permdesc_masterClear" msgid="3665380492633910226">"Inaruhusu programu kuweka upya kabisa mfumo kwa mipangilio yake ya kiwanda, huku ikifuta data yote, usanidi, na programu zilizosanikishwa."</string>
@@ -487,21 +532,16 @@
<string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Inaruhusu programu kubadilisha majira ya saa ya simu."</string>
<string name="permlab_accountManagerService" msgid="4829262349691386986">"tenda kama Huduma ya Meneja wa Akaunti"</string>
<string name="permdesc_accountManagerService" msgid="1948455552333615954">"Huruhusu programu kupiga simu kwa Wathibitishaji Akaunti."</string>
- <!-- no translation found for permlab_getAccounts (1086795467760122114) -->
- <skip />
+ <string name="permlab_getAccounts" msgid="1086795467760122114">"pata akaunti kwenye kifaa"</string>
<string name="permdesc_getAccounts" product="tablet" msgid="3238360555257773358">"Inaruhusu programu kupata orodha ya akaunti zinazojulikana na kompyuta kibao."</string>
<string name="permdesc_getAccounts" product="default" msgid="2735689364629830348">"Inaruhusu programu kupata orodha ya akaunti zinazojulikana na simu."</string>
- <!-- no translation found for permlab_authenticateAccounts (5265908481172736933) -->
- <skip />
+ <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"unda akaunti na weka manenosiri"</string>
<string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Inaruhusu programu kutumia uwezo wa uthibitishaji akaunti wa KidhibitiAkaunti, pamoja na kuunda akaunti na kupata na kuweka nywila zao."</string>
- <!-- no translation found for permlab_manageAccounts (4983126304757177305) -->
- <skip />
+ <string name="permlab_manageAccounts" msgid="4983126304757177305">"ongeza au ondoa akaunti"</string>
<string name="permdesc_manageAccounts" msgid="8698295625488292506">"Inaruhusu programu kutekeleza shughuli kama vile kuongeza na kutoa akaunti, na kufuta manenosiri yazo."</string>
- <!-- no translation found for permlab_useCredentials (235481396163877642) -->
- <skip />
+ <string name="permlab_useCredentials" msgid="235481396163877642">"tumia akaunti kwenye kifaa"</string>
<string name="permdesc_useCredentials" msgid="7984227147403346422">"Inaruhusu programu kuomba shuhuda za uthibitisho."</string>
- <!-- no translation found for permlab_accessNetworkState (4951027964348974773) -->
- <skip />
+ <string name="permlab_accessNetworkState" msgid="4951027964348974773">"ona miunganisho ya mtandao"</string>
<string name="permdesc_accessNetworkState" msgid="479772796952547198">"Inaruhusu programu kuangalia hali ya mitandao yote."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"ufikiaji kamili wa mtandao"</string>
<string name="permdesc_createNetworkSockets" msgid="5963922297444265950">"Inaruhusu programu kuunda soketi za mtandao."</string>
@@ -513,36 +553,29 @@
<string name="permdesc_changeTetherState" msgid="1524441344412319780">"Inaruhusu programu kubadilisha hali ya muunganisho wa mtandao uliofungwa."</string>
<string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"badilisha mpangilio wa utumiaji data ya mandharinyuma"</string>
<string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"Inaruhusu programu kubadilisha mpangilio wa matumizi ya data ya usuli."</string>
- <!-- no translation found for permlab_accessWifiState (5202012949247040011) -->
- <skip />
+ <string name="permlab_accessWifiState" msgid="5202012949247040011">"ona miunganisho ya Wi-Fi"</string>
<string name="permdesc_accessWifiState" msgid="7770452658226256831">"Inaruhusu programu kuona taarifa kuhusu hali ya Wi-Fi."</string>
- <!-- no translation found for permlab_changeWifiState (6550641188749128035) -->
- <skip />
+ <string name="permlab_changeWifiState" msgid="6550641188749128035">"unganisha na utenganishe kutoka kwa Wi-Fi"</string>
<string name="permdesc_changeWifiState" msgid="7399961004537946240">"Inaruhusu programu kuunganisha na kutenganisha kutoka kwa pointi za ufikivu za Wi-Fi, na kufanya mabadiliko kwa mitandao ya Wi-Fi iliyosanidiwa."</string>
<string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"ruhusu upokeaji wa Wi-Fi Multicast"</string>
<string name="permdesc_changeWifiMulticastState" msgid="7633598524564320817">"Inaruhusu programu kupata furushi amabazo hazijaelekezwa moja kwa moja kwa kifaa chako. Hii inaweza kuwa muhimu wakati wa kutambua huduma zinazotolewa karibu na eneo hilo. Inatumia nguvu zaidi kuliko mtindo wa kutupa mbali mbali.."</string>
- <!-- no translation found for permlab_bluetoothAdmin (6006967373935926659) -->
- <skip />
+ <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"fikia mipangilio ya Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Inaruhusu programu kusanidi kompyuta kibao ya karibu ya Bluetooth na kutambua na kuoanisha na vifaa vya kudhibiti."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Inaruhusu programu kusanidi simu ya karibu ya Bluetooth, na kutambua na kuoanisha na vifaa vya mbali."</string>
- <!-- no translation found for permlab_accessWimaxState (7436749103151096452) -->
- <skip />
+ <string name="permlab_accessWimaxState" msgid="7436749103151096452">"Ona miunganisho ya WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="5914958077555177749">"Huruhusu programu kuona maelezo kuhusu hali ya WiMAX."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Badilisha hali ya WiMAX"</string>
<string name="permdesc_changeWimaxState" msgid="3328853825006455912">"Huruhusu programu kuunganisha na kutenganisha kutoka kwenye mtandao wa WiMAX."</string>
- <!-- no translation found for permlab_bluetooth (6127769336339276828) -->
- <skip />
+ <string name="permlab_bluetooth" msgid="6127769336339276828">"oanisha na vifaa vya Bluetooth"</string>
<string name="permdesc_bluetooth" product="tablet" msgid="7007851048416363446">"Inaruhusu programu kuona usanidi wa kompyuta kibao ya karibu ya Bluetooth, na kuwezesha na kukubali muunganisho na vifaa vilivyo oanishwa."</string>
<string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"Inaruhusu programu kuangalia usanidi wa simu ya karibu ya Bluetooth, na kufanya na kukubali miunganisho na vifaa vilivyolinganishwa."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"dhibiti Mawasiliano Karibu na Uga"</string>
<string name="permdesc_nfc" msgid="7120611819401789907">"Inaruhusu programu kuwasiliana na lebo, kadi na wasomaji wa Near Field Communication (NFC)."</string>
- <!-- no translation found for permlab_disableKeyguard (3598496301486439258) -->
- <skip />
+ <string name="permlab_disableKeyguard" msgid="3598496301486439258">"lemaza kufuli lako la skrini"</string>
<string name="permdesc_disableKeyguard" msgid="6231611286892232626">"Inaruhusu programu kulemaza kifunga kitufe na usalama wowote unaohusishwa na nenosiri. Mfano halisi wa hii ni simu kulemaza kifunga kitufe wakati wa kupokea simu inayoingia, kisha kuwezesha upya kifunga kitufe simu inapomalizika."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"soma mipangilio ya usawazishaji"</string>
<string name="permdesc_readSyncSettings" msgid="5464056785274229278">"Inaruhusu programu kusoma mipangilio ya ulandanishi, kama vile ikiwa ulandanishi imewezeshwa kwa programu ya Watu."</string>
- <!-- no translation found for permlab_writeSyncSettings (5408694875793945314) -->
- <skip />
+ <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"washa na zima ulandanishi"</string>
<string name="permdesc_writeSyncSettings" msgid="1466056564502117130">"Inaruhusu programu kurekebisha mipangilio ya ulandanishi, kama vile ikiwa ulandanishi umewezeshwa kwa programu ya Watu."</string>
<string name="permlab_readSyncStats" msgid="7396577451360202448">"soma takwimu za usawazishaji"</string>
<string name="permdesc_readSyncStats" msgid="3801971839939951678">"Inaruhu programu kusoma takwimu zilizolandanishwa; k.v., historia ya ulandanishi ambao umetokea."</string>
@@ -550,23 +583,16 @@
<string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Inaruhusu programu kupata maelezo kuhusu mlisho iliyolandanishwa kwa sasa."</string>
<string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"andika milisho ya kujiunga"</string>
<string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Inaruhusu programu kurekebisha milisho yako iliyolandanishwa kwa sasa. Programu hasidi zinaweza kubadilisha milisho yako iliyolandanishwa."</string>
- <!-- no translation found for permlab_readDictionary (4107101525746035718) -->
- <skip />
+ <string name="permlab_readDictionary" msgid="4107101525746035718">"soma sheria ulizoongeza kwenye kamusi"</string>
<string name="permdesc_readDictionary" msgid="8977815988329283705">"Inaruhusu programu kusoma maneno, majina na vifungu vyovyote vya kibinafsi, ambavyo huenda mtumiaji amehifadhi katika kamusi ya mtumiaji."</string>
<string name="permlab_writeDictionary" msgid="2296383164914812772">"andika kwa kamusi iliyobainishwa na mtumiaji"</string>
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"Inaruhusu programu kuandika maneno mapya katika kamusi ya mtumiaji."</string>
- <!-- no translation found for permlab_sdcardRead (367275095159405468) -->
- <skip />
- <!-- no translation found for permlab_sdcardRead (2188156462934977940) -->
- <skip />
- <!-- no translation found for permdesc_sdcardRead (3530894470637667917) -->
- <skip />
- <!-- no translation found for permdesc_sdcardRead (2555811422562526606) -->
- <skip />
- <!-- no translation found for permlab_sdcardWrite (8485979062254666748) -->
- <skip />
- <!-- no translation found for permlab_sdcardWrite (9084476432661578751) -->
- <skip />
+ <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"soma maudhui ya hifadhi yako ya USB"</string>
+ <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"soma maudhui ya kadi yako ya SD"</string>
+ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Huruhusu programu kusoma maudhui ya hifadhi ya USB, ambayo huenda ikajumuisha picha na midia."</string>
+ <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Huruhusu programu kusoma maudhui ya kadi ya SD, ambayo huenda ikajumuisha picha na midia."</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"rekebisha au futa maudhui ya hifadhi yako ya USB"</string>
+ <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"rekebisha au futa maudhui ya kadi yako ya SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Inaruhusu programu kuandikia hifadhi ya USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Inaruhusu programu kuandikia kadi ya SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"badilisha/futa maudhui ya hifadhi ya media ya ndani."</string>
@@ -744,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Hakuna SIM kadi kwenye simu."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Ingiza SIM kadi."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Kadi ya SIM haiko au haisomeki. Tafadhali ingiza SIM kadi."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM kadi yako imelemezwa kabisa."\n" Wasiliana na mtoa huduma wako wa pasi waya ili upate SIM kadi nyingine."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Kitufe cha awali cha wimbo"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Kitufe cha wimbo unaofuata"</string>
@@ -819,15 +847,12 @@
<string name="autofill_parish" msgid="8202206105468820057">"Mtaa"</string>
<string name="autofill_area" msgid="3547409050889952423">"Eneo"</string>
<string name="autofill_emirate" msgid="2893880978835698818">"Emirate"</string>
- <!-- no translation found for permlab_readHistoryBookmarks (3775265775405106983) -->
- <skip />
+ <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"soma alamisho na historia ya Wavuti yako"</string>
<string name="permdesc_readHistoryBookmarks" msgid="4577476392604595921">"Inaruhusu programu kusoma URL zote ambazo Kivinjari kimetembelea, na alamisho zote za Kivinjari."</string>
- <!-- no translation found for permlab_writeHistoryBookmarks (3714785165273314490) -->
- <skip />
+ <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"andika alamisho na historia ya wavuti"</string>
<string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="1757103804824209530">"Inaruhusu programu kurekebisha historia ya Kivinjari au alamisho zilizohifadhiwa katika kompyuta yako kibao. Programu hasidi zinaweza kutumia hii kufuta au kurekebisha data ya Kivinjari chako."</string>
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="6693764355720719197">"Inaruhusu programu kurekebisha historia au alamisho za Kivinjari zilizohifadhiwa katika simu yako. Programu hasidi zinaweza kutumia hii kufuta au kurekebisha data ya Kivinjari chako."</string>
- <!-- no translation found for permlab_setAlarm (1379294556362091814) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="1379294556362091814">"weka kengele"</string>
<string name="permdesc_setAlarm" msgid="316392039157473848">"Inaruhusu programu kuweka kengele katika programu iliyosakinishwa ya kengele. Programu zingine za kengele zinawezakosa kutekeleza kipengee hiki."</string>
<string name="permlab_addVoicemail" msgid="5525660026090959044">"ongeza barua ya sauti"</string>
<string name="permdesc_addVoicemail" msgid="6604508651428252437">"Inaruhusu programu kuongeza jumbe kwenye kikasha cha ujumbe wa sauti."</string>
@@ -1088,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Weka"</string>
<string name="date_time_done" msgid="2507683751759308828">"Imekamilika"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Chaguo-msingi"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">" MPYA: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">" MPYA: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Hakuna vibali vinavyohitajika"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Ficha"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Onyesha zote"</b></string>
diff --git a/core/res/res/values-sw600dp/config.xml b/core/res/res/values-sw600dp/config.xml
index 7fa76589957d..b54e9d19ac85 100644
--- a/core/res/res/values-sw600dp/config.xml
+++ b/core/res/res/values-sw600dp/config.xml
@@ -35,5 +35,10 @@
<!-- If true, the screen can be rotated via the accelerometer in all 4
rotations as the default behavior. -->
<bool name="config_allowAllRotations">true</bool>
+
+ <!-- Maximum number of grid columns permitted in the ResolverActivity
+ used for picking activities to handle an intent. -->
+ <integer name="config_maxResolverActivityColumns">3</integer>
+
</resources>
diff --git a/core/res/res/values-sw600dp/dimens.xml b/core/res/res/values-sw600dp/dimens.xml
index 45147602cd57..f8f865e19f27 100644
--- a/core/res/res/values-sw600dp/dimens.xml
+++ b/core/res/res/values-sw600dp/dimens.xml
@@ -64,10 +64,10 @@
<!-- The platform's desired fixed width for a dialog along the major axis
(the screen is in landscape). This may be either a fraction or a dimension.-->
- <item type="dimen" name="dialog_fixed_width_major">50%</item>
+ <item type="dimen" name="dialog_fixed_width_major">60%</item>
<!-- The platform's desired fixed width for a dialog along the minor axis
(the screen is in portrait). This may be either a fraction or a dimension.-->
- <item type="dimen" name="dialog_fixed_width_minor">70%</item>
+ <item type="dimen" name="dialog_fixed_width_minor">90%</item>
<!-- The platform's desired fixed height for a dialog along the major axis
(the screen is in portrait). This may be either a fraction or a dimension.-->
<item type="dimen" name="dialog_fixed_height_major">60%</item>
diff --git a/core/res/res/values-sw720dp/config.xml b/core/res/res/values-sw720dp/config.xml
new file mode 100644
index 000000000000..9792835b9685
--- /dev/null
+++ b/core/res/res/values-sw720dp/config.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+
+ <!-- Maximum number of grid columns permitted in the ResolverActivity
+ used for picking activities to handle an intent. -->
+ <integer name="config_maxResolverActivityColumns">4</integer>
+
+</resources>
diff --git a/core/res/res/values-sw720dp/dimens.xml b/core/res/res/values-sw720dp/dimens.xml
index cac5aab0000e..7b1bc4c5b613 100644
--- a/core/res/res/values-sw720dp/dimens.xml
+++ b/core/res/res/values-sw720dp/dimens.xml
@@ -20,6 +20,24 @@
<!-- Height of the bottom navigation bar in portrait; on sw720dp devices
this is the same as the height in landscape -->
<dimen name="navigation_bar_height_portrait">@dimen/navigation_bar_height</dimen>
+
+ <!-- The platform's desired fixed width for a dialog along the major axis
+ (the screen is in landscape). This may be either a fraction or a dimension.-->
+ <item type="dimen" name="dialog_fixed_width_major">50%</item>
+ <!-- The platform's desired fixed width for a dialog along the minor axis
+ (the screen is in portrait). This may be either a fraction or a dimension.-->
+ <item type="dimen" name="dialog_fixed_width_minor">70%</item>
+ <!-- The platform's desired fixed height for a dialog along the major axis
+ (the screen is in portrait). This may be either a fraction or a dimension.-->
+ <item type="dimen" name="dialog_fixed_height_major">60%</item>
+ <!-- The platform's desired fixed height for a dialog along the minor axis
+ (the screen is in landscape). This may be either a fraction or a dimension.-->
+ <item type="dimen" name="dialog_fixed_height_minor">90%</item>
+
+ <!-- The width that is used when creating thumbnails of applications. -->
+ <dimen name="thumbnail_width">230dp</dimen>
+ <!-- The height that is used when creating thumbnails of applications. -->
+ <dimen name="thumbnail_height">135dp</dimen>
</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index ec67285a5f55..48b8bc5cd87c 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"ข้อความของคุณ"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"อ่านและเขียน SMS อีเมล และข้อความอื่นๆ ของคุณ"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"ข้อมูลส่วนบุคคลของคุณ"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"การเข้าถึงสมุดโทรศัพท์และปฏิทินที่จัดเก็บอยู่บนแท็บเล็ตโดยตรง"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"เข้าถึงที่อยู่ติดต่อและปฏิทินของที่จัดเก็บบนโทรศัพท์โดยตรง"</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"ตำแหน่งของคุณ"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"ตรวจดูตำแหน่งทางกายภาพของคุณ"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"การสื่อสารของเครือข่าย"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"เข้าถึงคุณลักษณะเครือข่ายต่างๆ"</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"บัญชีของคุณ"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"เข้าถึงบัญชีที่ใช้งานได้"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"การควบคุมฮาร์ดแวร์"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"การเข้าถึงและควบคุมของระบบในระดับต่ำ"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"เครื่องมือในการพัฒนา"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"คุณลักษณะที่จำเป็นสำหรับนักพัฒนาแอปพลิเคชันเท่านั้น"</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"พื้นที่เก็บข้อมูล"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"เข้าถึงที่เก็บข้อมูล USB"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"เข้าถึงการ์ด SD"</string>
@@ -233,7 +301,7 @@
<string name="permdesc_changeConfiguration" msgid="4372223873154296076">"อนุญาตให้แอปพลิเคชันเปลี่ยนการกำหนดค่าปัจจุบัน เช่น ภาษาหรือขนาดตัวอักษรโดยรวม"</string>
<string name="permlab_enableCarMode" msgid="5684504058192921098">"เปิดใช้งานโหมดใช้ในรถยนต์"</string>
<string name="permdesc_enableCarMode" msgid="4853187425751419467">"อนุญาตให้แอปพลิเคชันเปิดใช้งานโหมดรถยนต์"</string>
- <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"ปิดแอปพลิเคชันอื่นๆ"</string>
+ <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"ปิดแอปอื่นๆ"</string>
<string name="permdesc_killBackgroundProcesses" msgid="931129103262126617">"อนุญาตให้แอปพลิเคชันยุติกระบวนการในพื้นหลังของแอปพลิเคชันอื่นๆ แม้ว่าหน่วยความจำจะยังไม่ลดลงต่ำ"</string>
<string name="permlab_forceStopPackages" msgid="2329627428832067700">"บังคับให้แอปพลิเคชันอื่นๆ หยุดทำงาน"</string>
<string name="permdesc_forceStopPackages" msgid="5253157296183940812">"อนุญาตให้แอปพลิเคชันบังคับแอปพลิเคชันอื่นให้หยุดทำงาน"</string>
@@ -267,7 +335,7 @@
<string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"อนุญาตให้แอปพลิเคชันเปิดส่วนติดต่อผู้ใช้สำหรับยืนยันการสำรองข้อมูลเต็มรูปแบบ การอนุญาตนี้ไม่ใช้กับแอปพลิเคชันทั่วไป"</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"แสดงหน้าต่างที่ไม่ได้รับอนุญาต"</string>
<string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"อนุญาตให้แอปพลิเคชันสร้างหน้าต่างสำหรับให้ใช้โดยส่วนติดต่อผู้ใช้ของระบบภายใน ไม่ใช้สำหรับแอปพลิเคชันทั่วไป"</string>
- <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"ปิดคลุมแอปพลิเคชันอื่นๆ"</string>
+ <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"ปิดคลุมแอปอื่นๆ"</string>
<string name="permdesc_systemAlertWindow" msgid="8507863469978066409">"อนุญาตให้แอปพลิเคชันแสดงหน้าต่างการแจ้งเตือนของระบบ แอปพลิเคชันที่เป็นอันตรายอาจเข้าควบคุมทั้งหน้าจอ"</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"แก้ไขความเร็วภาพเคลื่อนไหวสากล"</string>
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"อนุญาตให้แอปพลิเคชันเปลี่ยนความเร็วในการเคลื่อนไหวทั่วไป (ภาพเคลื่อนไหวได้เร็วขึ้นหรือช้าลง) ได้ตลอดเวลา"</string>
@@ -471,7 +539,7 @@
<string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"อนุญาตให้แอปพลิเคชันใช้ตัวตรวจสอบสิทธิ์บัญชีของ AccountManager รวมถึงการสร้างบัญชีและรับและตั้งค่ารหัสผ่าน"</string>
<string name="permlab_manageAccounts" msgid="4983126304757177305">"เพิ่มหรือนำบัญชีออก"</string>
<string name="permdesc_manageAccounts" msgid="8698295625488292506">"อนุญาตให้แอปพลิเคชันดำเนินการต่างๆ เช่น การเพิ่มและนำบัญชีออก รวมถึงการลบรหัสผ่านของบัญชี"</string>
- <string name="permlab_useCredentials" msgid="235481396163877642">"ใช้บัญชีในอุปกรณ์"</string>
+ <string name="permlab_useCredentials" msgid="235481396163877642">"ใช้งานบัญชีในอุปกรณ์"</string>
<string name="permdesc_useCredentials" msgid="7984227147403346422">"อนุญาตให้แอปพลิเคชันขอโทเค็นการตรวจสอบสิทธิ์"</string>
<string name="permlab_accessNetworkState" msgid="4951027964348974773">"ดูการเชื่อมต่อเครือข่าย"</string>
<string name="permdesc_accessNetworkState" msgid="479772796952547198">"อนุญาตให้แอปพลิเคชันดูสถานะของเครือข่ายทั้งหมด"</string>
@@ -521,8 +589,8 @@
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"อนุญาตให้แอปพลิเคชันเขียนคำใหม่ลงในพจนานุกรมผู้ใช้"</string>
<string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"อ่านเนื้อหาในที่จัดเก็บ USB"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"อ่านเนื้อหาในการ์ด SD ของคุณ"</string>
- <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"อนุญาตให้แอปพลิเคชันอ่านเนื้อหาในที่จัดเก็บข้อมูล USB ซึ่งอาจรวมไปถึงรูปภาพและสื่อ"</string>
- <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"อนุญาตให้แอปพลิเคชันอ่านเนื้อหาในการ์ด SD ซึ่งอาจรวมไปถึงรูปภาพและสื่อ"</string>
+ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"อนุญาตให้แอปอ่านเนื้อหาในที่จัดเก็บข้อมูล USB ซึ่งอาจรวมไปถึงรูปภาพและสื่อ"</string>
+ <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"อนุญาตให้แอปอ่านเนื้อหาในการ์ด SD ซึ่งอาจรวมไปถึงรูปภาพและสื่อ"</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"แก้ไขหรือลบเนื้อหาใน USB"</string>
<string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"แก้ไขหรือลบเนื้อหาในการ์ด SD ของคุณ"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"อนุญาตให้แอปฯ เขียนลงใน USB"</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"ไม่มีซิมการ์ดในโทรศัพท์"</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"ใส่ซิมการ์ด"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"ไม่มีซิมการ์ดหรือไม่สามารถอ่านได้ โปรดใส่ซิมการ์ด"</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"ซิมการ์ดของคุณถูกปิดใช้งานอย่างถาวร"\n"ติดต่อผู้ให้บริการไร้สายของคุณเพื่อรับซิมการ์ดอีกอันหนึ่ง"</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"ปุ่มแทร็กก่อนหน้า"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"ปุ่มแทร็กถัดไป"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"ตั้งค่า"</string>
<string name="date_time_done" msgid="2507683751759308828">"เสร็จสิ้น"</string>
<string name="default_permission_group" msgid="2690160991405646128">"เริ่มต้น"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"ใหม่: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"ใหม่: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"ไม่ต้องการการอนุญาต"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"ซ่อน"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"แสดงทั้งหมด"</b></string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 274b2ae3d211..6c67aada5320 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Iyong mga mensahe"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Basahin at isulat ang iyong SMS, e-mail, at iba pang mga mensahe."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Iyong personal na impormasyon"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direktang access sa iyong mga contact at kalendaryong nakaimbak sa tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direktang access sa iyong mga contact at kalendaryong nakaimbak sa telepono."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Iyong lokasyon"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Subaybayan ang iyong pisikal na lokasyon."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Pakikipag-ugnay sa network"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Mag-access ng iba\'t ibang mga tampok ng network."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Iyong mga account"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"I-access ang mga available na account."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Mga kontrol ng hardware"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Mas mababang antas na access at kontrol ng system."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Mga tool na pang-develop"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Kinakailangan lamang ang mga tampok para sa mga developer ng app."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Imbakan"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"I-access ang imbakan na USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"I-access ang SD card."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Walang SIM card sa telepono."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Maglagay ng isang SIM card."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Nawawala o hindi nababasa ang SIM card. Maglagay ng isang SIM card."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Ang iyong SIM card ay permanenteng hindi pinagana."\n" Makipag-ugnay sa iyong wireless service provider para sa isa pang SIM card."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Button na nakaraang track"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Button na Susunod na track"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Itakda"</string>
<string name="date_time_done" msgid="2507683751759308828">"Tapos na"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Default"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"BAGO: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"BAGO: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Walang mga kinakailangang pahintulot"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Itago"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Ipakita lahat"</b></string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 6890db00a708..833c143190f1 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Mesajlarınız"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS mesajlarınızı, e-posta iletilerinizi ve diğer mesajlarınızı okuyup yazma."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Kişisel bilgileriniz"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Tabletinizde depolanan kişilere ve takvime doğrudan erişim."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Telefonunuzda depolanan kişilere ve takvime doğrudan erişim."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Konumunuz"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Fiziksel konumunuzu izleme."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Ağ iletişimi"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Çeşitli ağ özelliklerine erişme."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Hesaplarınız"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Kullanılabilir hesaplara erişin."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Donanım denetimleri"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Sisteme alt düzey erişim ve denetimi."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Geliştirme araçları"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Yalnızca uygulama geliştiriciler için gerekli özellikler."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Depolama"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Payl depolama birimine erişin."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD karta erişin."</string>
@@ -218,7 +286,7 @@
<string name="permlab_getTasks" msgid="6466095396623933906">"çalışan uygulamaları al"</string>
<string name="permdesc_getTasks" msgid="6608159250520381359">"Uygulamaya, şu anda çalışmakta olan ve son çalışan işlemler hakkında bilgi alma izni verir. Kötü amaçlı uygulamalar diğer uygulamalar hakkında özel bilgileri ele geçirebilir."</string>
<string name="permlab_getDetailedTasks" msgid="6229468674753529501">"çalışan uygulamaların ayrıntılarını al"</string>
- <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Uygulamaya, şu anda çalışmakta olan ve son çalışan işlemler hakkında ayrıntılı bilgi alma izni verir. Kötü amaçlı uygulamalar diğer uygulamalar hakkında özel bilgileri ele geçirebilir."</string>
+ <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Uygulamaya, şu anda çalışmakta olan ve son çalışan işlemler hakkında ayrıntılı bilgi alma izni verir. Kötü amaçlı uygulamalar diğer uygulamalar hakkında gizli bilgileri ele geçirebilir."</string>
<string name="permlab_reorderTasks" msgid="2018575526934422779">"çalışan uygulamaları yeniden sırala"</string>
<string name="permdesc_reorderTasks" msgid="4175137612205663399">"Uygulamaya, görevleri ön plana ve arka plana taşıma izni verir. Kötü amaçlı uygulamalar kendilerini sizin denetiminiz dışında ön plana taşıyabilir."</string>
<string name="permlab_removeTasks" msgid="6821513401870377403">"çalışan uygulamaları durdur"</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefonda SIM kart yok."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"SIM kartı takın."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM kart yok veya okunamıyor. Bir SIM kart takın."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM kartınız kalıcı olarak devre dışı bırakıldı."\n" Başka bir SIM kart için kablosuz servis sağlayıcınıza başvurun."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Önceki parça düğmesi"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Sonraki parça düğmesi"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Ayarla"</string>
<string name="date_time_done" msgid="2507683751759308828">"Tamamlandı"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Varsayılan"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"YENİ: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"YENİ: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"İzin gerektirmez"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Gizle"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Tümünü göster"</b></string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 7c0bd06f9753..76aa65a23e12 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Ваші повідомл."</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Читати та писати в SMS, електронні листи й інші повідомлення."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Ваша особиста інформація"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Прямий доступ до контактів і календаря, збережених у пристрої."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Прямий доступ до ваших контактів і календаря, збереж. у телефоні."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Ваше місцезнаходження"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Відстежувати ваше фізичне місцезнаходження."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Підключення до мережі"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Отримувати доступ до різних функцій мережі."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Ваші облікові записи"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Доступ до доступних обл. записів."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Керув. апар. забезп."</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Контроль і доступ до системи на нижчому рівні."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Інструм. розробника"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функції, потрібні лише для розробників програм."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Зберігання"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Отрим. доступу до носія USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ до карти SD."</string>
@@ -523,7 +591,7 @@
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"читати вміст карти SD"</string>
<string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Дозволяє програмі читати вміст носія USB, що може включати фотографії й медіа-файли."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Дозволяє програмі читати вміст карти SD, що може включати фотографії й медіа-файли."</string>
- <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"змін. або вид. вміст носія USB"</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"змінювати чи видаляти вміст USB"</string>
<string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"змінювати чи видаляти зміст карти SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Дозволяє програмі писати на носій USB"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Дозволяє програмі записувати на карту SD."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"У тел. немає SIM-карти."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Вставте SIM-карту."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-карта відсутня або недоступна для читання. Вставте SIM-карту."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Вашу SIM-карту вимкнено назавжди."\n" Зверніться до свого постачальника послуг бездротового зв’язку, щоб отримати іншу SIM-карту."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Кнопка \"Попередня доріжка\""</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Кнопка \"Наступна доріжка\""</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Застосувати"</string>
<string name="date_time_done" msgid="2507683751759308828">"Готово"</string>
<string name="default_permission_group" msgid="2690160991405646128">"За умовч."</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"НОВИЙ: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВИЙ: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Дозвіл не потрібний"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Сховати"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Показ. всі"</b></string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 5b8296acf06d..feb15438b59d 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Tin nhắn của bạn"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Đọc và soạn SMS, email và các tin nhắn khác của bạn."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Thông tin cá nhân của bạn"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Quyền truy cập trực tiếp vào danh bạ và lịch của bạn được lưu trữ trên máy tính bảng."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Quyền truy cập trực tiếp vào danh bạ và lịch của bạn được lưu trữ trên điện thoại."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Vị trí của bạn"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Giám sát vị trí thực của bạn."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Kết nối mạng"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Truy cập các tính năng mạng khác nhau."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Tài khoản của bạn"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Truy cập các tài khoản khả dụng."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kiểm soát phần cứng"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Quyền truy cập và quyền kiểm soát hệ thống cấp thấp hơn."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Công cụ phát triển"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Các tính năng chỉ cần cho nhà phát triển ứng dụng."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Dung lượng"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Truy cập bộ nhớ USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Truy cập thẻ SD."</string>
@@ -193,14 +261,11 @@
<string name="permdesc_statusBarService" msgid="716113660795976060">"Cho phép ứng dụng trở thành thanh trạng thái."</string>
<string name="permlab_expandStatusBar" msgid="1148198785937489264">"mở rộng/thu gọn thanh trạng thái"</string>
<string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Cho phép ứng dụng mở rộng hoặc thu gọn thanh trạng thái."</string>
- <!-- no translation found for permlab_processOutgoingCalls (3906007831192990946) -->
- <skip />
+ <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"định tuyến lại cuộc gọi đi"</string>
<string name="permdesc_processOutgoingCalls" msgid="1152111671618301044">"Cho phép ứng dụng xử lý cuộc gọi đi và thay đổi số được gọi. Ứng dụng độc hại có thể theo dõi, chuyển hướng hoặc chặn cuộc gọi đi."</string>
- <!-- no translation found for permlab_receiveSms (8673471768947895082) -->
- <skip />
+ <string name="permlab_receiveSms" msgid="8673471768947895082">"nhận tin nhắn văn bản (SMS)"</string>
<string name="permdesc_receiveSms" msgid="8107887121893611793">"Cho phép ứng dụng nhận và xử lý tin nhắn SMS. Ứng dụng độc hại có thể giám sát tin nhắn của bạn hoặc xóa tin nhắn mà không hiển thị chúng cho bạn."</string>
- <!-- no translation found for permlab_receiveMms (1821317344668257098) -->
- <skip />
+ <string name="permlab_receiveMms" msgid="1821317344668257098">"nhận tin nhắn văn bản (MMS)"</string>
<string name="permdesc_receiveMms" msgid="1424805308566612086">"Cho phép ứng dụng nhận và xử lý tin nhắn MMS. Ứng dụng độc hại có thể theo dõi tin nhắn của bạn hoặc xóa tin nhắn mà không hiển thị chúng cho bạn."</string>
<string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"nhận các truyền phát khẩn cấp"</string>
<string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"Cho phép ứng dụng nhận và xử lý tin nhắn truyền phát khẩn cấp. Quyền này chỉ sẵn có cho các ứng dụng hệ thống."</string>
@@ -210,16 +275,13 @@
<string name="permdesc_sendSms" msgid="906546667507626156">"Cho phép ứng dụng gửi tin nhắn SMS. Ứng dụng độc hại có thể khiến bạn tốn tiền bằng cách gửi tin nhắn mà không cần xác nhận của bạn."</string>
<string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"gửi tin nhắn SMS mà không cần xác nhận"</string>
<string name="permdesc_sendSmsNoConfirmation" msgid="3437759207020400204">"Cho phép ứng dụng gửi tin nhắn SMS. Ứng dụng độc hại có thể khiến bạn bị mất tiền khi gửi tin nhắn mà không có xác nhận của bạn."</string>
- <!-- no translation found for permlab_readSms (8745086572213270480) -->
- <skip />
+ <string name="permlab_readSms" msgid="8745086572213270480">"đọc tin nhắn văn bản của bạn (SMS hoặc MMS)"</string>
<string name="permdesc_readSms" product="tablet" msgid="2341692916884515613">"Cho phép ứng dụng đọc tin nhắn SMS được lưu trữ trên máy tính bảng hoặc thẻ SIM của bạn. Ứng dụng độc hại có thể đọc các tin nhắn bí mật của bạn."</string>
<string name="permdesc_readSms" product="default" msgid="5653850482025875493">"Cho phép ứng dụng đọc tin nhắn SMS được lưu trữ trên điện thoại hoặc thẻ SIM của bạn. Ứng dụng độc hại có thể đọc các tin nhắn bí mật của bạn."</string>
- <!-- no translation found for permlab_writeSms (3216950472636214774) -->
- <skip />
+ <string name="permlab_writeSms" msgid="3216950472636214774">"chỉnh sửa tin nhắn văn bản của bạn (SMS hoặc MMS)"</string>
<string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Cho phép ứng dụng ghi vào tin nhắn SMS được lưu trữ trên máy tính bảng hoặc thẻ SIM của bạn. Ứng dụng độc hại có thể xóa tin nhắn của bạn."</string>
<string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Cho phép ứng dụng ghi vào tin nhắn SMS được lưu trữ trên điện thoại hoặc thẻ SIM của bạn. Ứng dụng độc hại có thể xóa tin nhắn của bạn."</string>
- <!-- no translation found for permlab_receiveWapPush (5991398711936590410) -->
- <skip />
+ <string name="permlab_receiveWapPush" msgid="5991398711936590410">"nhận tin nhắn văn bản (WAP)"</string>
<string name="permdesc_receiveWapPush" msgid="7983455145335316872">"Cho phép ứng dụng nhận và xử lý tin nhắn WAP. Ứng dụng độc hại có thể giám sát tin nhắn của bạn hoặc xóa tin nhắn mà không hiển thị chúng cho bạn."</string>
<string name="permlab_getTasks" msgid="6466095396623933906">"truy xuất các ứng dụng đang chạy"</string>
<string name="permdesc_getTasks" msgid="6608159250520381359">"Cho phép ứng dụng truy xuất thông tin về các công việc đã và đang chạy gần đây. Ứng dụng độc hại có thể phát hiện thông tin riêng tư về các ứng dụng khác."</string>
@@ -235,13 +297,11 @@
<string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"Cho phép ứng dụng kiểm soát chế độ tương thích màn hình của ứng dụng khác. Các ứng dụng độc hại có thể phá vỡ hoạt động của các ứng dụng khác."</string>
<string name="permlab_setDebugApp" msgid="3022107198686584052">"bật gỡ lỗi ứng dụng"</string>
<string name="permdesc_setDebugApp" msgid="4474512416299013256">"Cho phép ứng dụng bật gỡ lỗi cho một ứng dụng khác. Ứng dụng độc hại có thể sử dụng quyền này để loại bỏ những ứng dụng khác."</string>
- <!-- no translation found for permlab_changeConfiguration (4162092185124234480) -->
- <skip />
+ <string name="permlab_changeConfiguration" msgid="4162092185124234480">"thay đổi cài đặt hiển thị hệ thống"</string>
<string name="permdesc_changeConfiguration" msgid="4372223873154296076">"Cho phép ứng dụng thay đổi cấu hình hiện tại, chẳng hạn như ngôn ngữ hoặc kích thước phông chữ chung."</string>
<string name="permlab_enableCarMode" msgid="5684504058192921098">"bật chế độ trên ô tô"</string>
<string name="permdesc_enableCarMode" msgid="4853187425751419467">"Cho phép ứng dụng bật chế độ trên ô tô."</string>
- <!-- no translation found for permlab_killBackgroundProcesses (3914026687420177202) -->
- <skip />
+ <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"đóng ứng dụng khác"</string>
<string name="permdesc_killBackgroundProcesses" msgid="931129103262126617">"Cho phép ứng dụng loại bỏ các quá trình ở nền sau của ứng dụng khác, ngay cả khi không thiếu dung lượng bộ nhớ."</string>
<string name="permlab_forceStopPackages" msgid="2329627428832067700">"buộc dừng ứng dụng khác"</string>
<string name="permdesc_forceStopPackages" msgid="5253157296183940812">"Cho phép ứng dụng buộc dừng ứng dụng khác."</string>
@@ -265,8 +325,7 @@
<string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Cho phép ứng dụng truyền phát thông báo cho biết rằng đã nhận được tin nhắn WAP PUSH. Ứng dụng độc hại có thể sử dụng quyền này để giả mạo xác nhận đã nhận được tin nhắn MMS hoặc ngầm thay thế nội dung của bất kỳ trang web nào bằng các biến thể độc hại."</string>
<string name="permlab_setProcessLimit" msgid="2451873664363662666">"giới hạn số quá trình đang chạy"</string>
<string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Cho phép ứng dụng kiểm soát số quy trình tối đa sẽ chạy. Không cần thiết cho các ứng dụng thông thường."</string>
- <!-- no translation found for permlab_setAlwaysFinish (550958507798796965) -->
- <skip />
+ <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"buộc ứng dụng nền đóng"</string>
<string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"Cho phép ứng dụng kiểm soát xem các hoạt động có luôn hoàn tất ngay khi chúng chuyển sang nền sau hay không. Không cần thiết cho các ứng dụng thông thường."</string>
<string name="permlab_batteryStats" msgid="7863923071360031652">"sửa đổi thống kê về pin"</string>
<string name="permdesc_batteryStats" msgid="6835186932305744068">"Cho phép ứng dụng sửa đổi các số liệu thống kê về pin đã được thu thập. Không dành cho các ứng dụng thông thường."</string>
@@ -276,8 +335,7 @@
<string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Cho phép ứng dụng khởi chạy UI xác nhận sao lưu toàn bộ. Không dành cho bất kỳ ứng dụng nào."</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"hiển thị các cửa sổ trái phép"</string>
<string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Cho phép ứng dụng tạo các cửa sổ dùng cho giao diện người dùng hệ thống nội bộ. Không dành cho các ứng dụng thông thường."</string>
- <!-- no translation found for permlab_systemAlertWindow (3543347980839518613) -->
- <skip />
+ <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"vẽ trên ứng dụng khác"</string>
<string name="permdesc_systemAlertWindow" msgid="8507863469978066409">"Cho phép ứng dụng hiển thị các cửa sổ thông báo hệ thống. Ứng dụng độc hại có thể kiểm soát toàn bộ màn hình."</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"sửa đổi tốc độ hoạt ảnh chung"</string>
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Cho phép ứng dụng thay đổi tốc độ hoạt ảnh nói chung (hoạt ảnh nhanh hơn hoặc chậm hơn) bất cứ lúc nào."</string>
@@ -339,26 +397,22 @@
<string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"Cho phép ứng dụng cấp hoặc thu hồi quyền cụ thể đối với ứng dụng đó hoặc các ứng dụng khác. Các ứng dụng độc hại có thể lợi dụng điều này để truy cập các tính năng mà bạn không cấp."</string>
<string name="permlab_setPreferredApplications" msgid="8463181628695396391">"đặt ứng dụng ưa thích"</string>
<string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"Cho phép ứng dụng sửa đổi ứng dụng ưa thích của bạn. Ứng dụng độc hại có thể ngầm thay đổi các ứng dụng đã được chạy, giả mạo các ứng dụng hiện có để thu thập dữ liệu cá nhân của bạn."</string>
- <!-- no translation found for permlab_writeSettings (2226195290955224730) -->
- <skip />
+ <string name="permlab_writeSettings" msgid="2226195290955224730">"sửa đổi cài đặt hệ thống"</string>
<string name="permdesc_writeSettings" msgid="7775723441558907181">"Cho phép ứng dụng sửa đổi dữ liệu cài đặt của hệ thống. Ứng dụng độc hại có thể làm hỏng cấu hình hệ thống của bạn."</string>
<string name="permlab_writeSecureSettings" msgid="204676251876718288">"sửa đổi cài đặt hệ thống bảo mật"</string>
<string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"Cho phép ứng dụng sửa đổi dữ liệu cài đặt bảo mật của hệ thống. Không dành cho các ứng dụng thông thường."</string>
<string name="permlab_writeGservices" msgid="2149426664226152185">"sửa đổi bản đồ dịch vụ của Google"</string>
<string name="permdesc_writeGservices" msgid="1287309437638380229">"Cho phép ứng dụng sửa đổi bản đồ dịch vụ của Google. Không dành cho ứng dụng thông thường."</string>
- <!-- no translation found for permlab_receiveBootCompleted (5312965565987800025) -->
- <skip />
+ <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"chạy khi khởi động"</string>
<string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Cho phép ứng dụng tự khởi chạy ngay khi hệ thống khởi động xong. Quyền này có thể khiến máy tính bảng mất nhiều thời gian khởi động hơn và cho phép ứng dụng làm chậm toàn bộ máy tính bảng do ứng dụng luôn chạy."</string>
<string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Cho phép ứng dụng tự khởi chạy ngay khi hệ thống khởi động xong. Quyền này có thể khiến điện thoại mất nhiều thời gian khởi động hơn và cho phép ứng dụng làm chậm toàn bộ điện thoại do ứng dụng luôn chạy."</string>
<string name="permlab_broadcastSticky" msgid="7919126372606881614">"gửi truyền phát hấp dẫn người xem"</string>
<string name="permdesc_broadcastSticky" product="tablet" msgid="1181582512022829259">"Cho phép ứng dụng gửi nội dung truyền phát hấp dẫn người xem. Nội dung này sẽ vẫn còn sau khi quá trình truyền phát kết thúc. Ứng dụng độc hại có thể làm cho máy tính bảng bị chậm hoặc không ổn định bằng cách khiến máy tính bảng sử dụng quá nhiều bộ nhớ."</string>
<string name="permdesc_broadcastSticky" product="default" msgid="3287869131621514325">"Cho phép ứng dụng gửi nội dung truyền phát hấp dẫn người xem. Nội dung này sẽ vẫn còn sau khi quá trình truyền phát kết thúc. Ứng dụng độc hại có thể làm cho điện thoại bị chậm hoặc không ổn định bằng cách khiến điện thoại sử dụng quá nhiều bộ nhớ."</string>
- <!-- no translation found for permlab_readContacts (8348481131899886131) -->
- <skip />
+ <string name="permlab_readContacts" msgid="8348481131899886131">"đọc danh sách liên hệ của bạn"</string>
<string name="permdesc_readContacts" product="tablet" msgid="6370069055638209432">"Cho phép ứng dụng đọc tất cả dữ liệu về các liên hệ được lưu trữ trên máy tính bảng của bạn, bao gồm cả các liên hệ mà bạn thường xuyên gọi, gửi email hoặc liên lạc theo các cách khác với các cá nhân cụ thể. Việc này giúp ích cho tính năng tự động hoàn tất địa chỉ email và các tính năng tiện lợi khác. Các ứng dụng độc hại có thể sử dụng quyền này để gửi dữ liệu liên hệ của bạn cho những người khác."</string>
<string name="permdesc_readContacts" product="default" msgid="4093353182535351501">"Cho phép ứng dụng đọc tất cả dữ liệu về các liên hệ được lưu trữ trên điện thoại của bạn, bao gồm cả các liên hệ mà bạn thường xuyên gọi, gửi email hoặc liên lạc theo các cách khác với các cá nhân cụ thể. Việc này giúp ích cho tính năng tự động hoàn tất địa chỉ email và các tính năng tiện lợi khác. Các ứng dụng độc hại có thể sử dụng quyền này để gửi dữ liệu liên hệ của bạn cho những người khác."</string>
- <!-- no translation found for permlab_writeContacts (5107492086416793544) -->
- <skip />
+ <string name="permlab_writeContacts" msgid="5107492086416793544">"sửa đổi danh sách liên hệ của bạn"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="5495863352173533286">"Cho phép ứng dụng sửa đổi dữ liệu về các liên hệ được lưu trữ trên máy tính bảng của bạn, bao gồm cả các liên hệ mà bạn thường xuyên gọi, gửi email hoặc liên lạc theo các cách khác với các cá nhân cụ thể. Việc này giúp ích cho tính năng tự động hoàn tất địa chỉ email và các tính năng tiện lợi khác. Các ứng dụng độc hại có thể sử dụng quyền này để xóa hoặc sửa đổi dữ liệu liên hệ của bạn."</string>
<string name="permdesc_writeContacts" product="default" msgid="6108469962248865715">"Cho phép ứng dụng sửa đổi dữ liệu về các liên hệ được lưu trữ trên điện thoại của bạn, bao gồm cả các liên hệ mà bạn thường xuyên gọi, gửi email hoặc liên lạc theo các cách khác với các cá nhân cụ thể. Việc này giúp ích cho tính năng tự động hoàn tất địa chỉ email và các tính năng tiện lợi khác. Các ứng dụng độc hại có thể sử dụng quyền này để xóa hoặc sửa đổi dữ liệu liên hệ của bạn."</string>
<string name="permlab_readCallLog" msgid="3478133184624102739">"đọc nhật ký cuộc gọi"</string>
@@ -367,11 +421,9 @@
<string name="permlab_writeCallLog" msgid="8552045664743499354">"ghi nhật ký cuộc gọi"</string>
<string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Cho phép ứng dụng sửa đổi nhật ký cuộc gọi trên máy tính bảng của bạn, bao gồm dữ liệu về các cuộc gọi đến và gọi đi. Các ứng dụng độc hại có thể sử dụng quyền này để xóa hoặc sửa đổi nhật ký cuộc gọi của bạn."</string>
<string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Cho phép ứng dụng sửa đổi nhật ký cuộc gọi trên điện thoại của bạn, bao gồm dữ liệu về các cuộc gọi đến và gọi đi. Các ứng dụng độc hại có thể sử dụng quyền này để xóa hoặc sửa đổi nhật ký cuộc gọi của bạn."</string>
- <!-- no translation found for permlab_readProfile (4701889852612716678) -->
- <skip />
+ <string name="permlab_readProfile" msgid="4701889852612716678">"đọc thẻ liên hệ của riêng bạn"</string>
<string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Cho phép ứng dụng đọc thông tin tiểu sử cá nhân được lưu trữ trên thiết bị, chẳng hạn như tên và thông tin liên hệ của bạn. Điều này có nghĩa là ứng dụng có thể xác định danh tính của bạn và gửi thông tin tiểu sử của bạn cho người khác."</string>
- <!-- no translation found for permlab_writeProfile (907793628777397643) -->
- <skip />
+ <string name="permlab_writeProfile" msgid="907793628777397643">"sửa đổi thẻ liên hệ của riêng bạn"</string>
<string name="permdesc_writeProfile" product="default" msgid="4637366723793045603">"Cho phép ứng dụng thay đổi hoặc thêm vào thông tin tiểu sử cá nhân được lưu trữ trên thiết bị, chẳng hạn như tên và thông tin liên hệ của bạn. Điều này có nghĩa là các ứng dụng khác có thể xác định danh tính của bạn và gửi thông tin tiểu sử của bạn cho người khác."</string>
<string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"đọc luồng xã hội của bạn"</string>
<string name="permdesc_readSocialStream" product="default" msgid="3419050808547335320">"Cho phép ứng dụng truy cập và đồng bộ hóa các cập nhật xã hội của bạn và bạn bè bạn. Ứng dụng độc hại có thể sử dụng quyền này để đọc thông tin liên lạc cá nhân giữa bạn và bạn bè bạn trên các mạng xã hội."</string>
@@ -412,15 +464,11 @@
<string name="permlab_reboot" product="default" msgid="2898560872462638242">"buộc khởi động lại điện thoại"</string>
<string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Cho phép ứng dụng buộc máy tính bảng khởi động lại."</string>
<string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Cho phép ứng dụng buộc điện thoại khởi động lại."</string>
- <!-- no translation found for permlab_mount_unmount_filesystems (2927361537942591841) -->
- <skip />
- <!-- no translation found for permlab_mount_unmount_filesystems (4402305049890953810) -->
- <skip />
+ <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"truy cập hệ thống tệp của bộ lưu trữ USB"</string>
+ <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"truy cập hệ thống tệp Thẻ SD"</string>
<string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Cho phép ứng dụng cài và gỡ các hệ thống tệp của bộ nhớ di động."</string>
- <!-- no translation found for permlab_mount_format_filesystems (6227819582624904972) -->
- <skip />
- <!-- no translation found for permlab_mount_format_filesystems (262582698639274056) -->
- <skip />
+ <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"xóa bộ lưu trữ USB"</string>
+ <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"xóa Thẻ SD"</string>
<string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"Cho phép ứng dụng định dạng bộ nhớ di động."</string>
<string name="permlab_asec_access" msgid="3411338632002193846">"nhận thông tin trên bộ nhớ trong"</string>
<string name="permdesc_asec_access" msgid="3094563844593878548">"Cho phép ứng dụng lấy thông tin trên bộ nhớ trong."</string>
@@ -432,8 +480,7 @@
<string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"Cho phép ứng dụng kết nối/ngắt kết nối bộ nhớ trong."</string>
<string name="permlab_asec_rename" msgid="7496633954080472417">"đổi tên bộ nhớ trong"</string>
<string name="permdesc_asec_rename" msgid="1794757588472127675">"Cho phép ứng dụng đổi tên bộ nhớ trong."</string>
- <!-- no translation found for permlab_vibrate (7696427026057705834) -->
- <skip />
+ <string name="permlab_vibrate" msgid="7696427026057705834">"kiểm soát rung"</string>
<string name="permdesc_vibrate" msgid="6284989245902300945">"Cho phép ứng dụng kiểm soát bộ rung."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"kiểm soát đèn nháy"</string>
<string name="permdesc_flashlight" msgid="6522284794568368310">"Cho phép ứng dụng kiểm soát đèn nháy."</string>
@@ -458,8 +505,7 @@
<string name="permdesc_bindGadget" msgid="8261326938599049290">"Cho phép ứng dụng thông báo cho hệ thống biết tiện ích con nào có thể được sử dụng bởi ứng dụng nào. Với quyền này, ứng dụng có thể cấp quyền truy cập vào dữ liệu cá nhân cho các ứng dụng khác. Không dành cho các ứng dụng thông thường."</string>
<string name="permlab_modifyPhoneState" msgid="8423923777659292228">"sửa đổi trạng thái điện thoại"</string>
<string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Cho phép ứng dụng kiểm soát các tính năng điện thoại của thiết bị. Ứng dụng có quyền này có thể chuyển đổi mạng, bật và tắt radio điện thoại cũng như thực hiện các tác vụ tương tự mà không cần thông báo cho bạn."</string>
- <!-- no translation found for permlab_readPhoneState (9178228524507610486) -->
- <skip />
+ <string name="permlab_readPhoneState" msgid="9178228524507610486">"đọc trạng thái và nhận dạng của điện thoại"</string>
<string name="permdesc_readPhoneState" msgid="5127767618743602782">"Cho phép ứng dụng truy cập vào các tính năng điện thoại của thiết bị. Ứng dụng có quyền này có thể xác định số điện thoại và số sêri của điện thoại này, cho dù cuộc gọi có hiện hoạt hay không, số mà cuộc gọi đó được kết nối và các thông tin tương tự."</string>
<string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ngăn máy tính bảng chuyển sang chế độ ngủ"</string>
<string name="permlab_wakeLock" product="default" msgid="573480187941496130">"ngăn điện thoại chuyển sang chế độ ngủ"</string>
@@ -474,8 +520,7 @@
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Chạy dưới dạng thử nghiệm nhà máy cấp thấp, cho phép quyền truy cập hoàn toàn vào phần cứng điện thoại. Chỉ khả dụng khi điện thoại chạy ở chế độ thử nghiệm trong nhà máy."</string>
<string name="permlab_setWallpaper" msgid="6627192333373465143">"đặt hình nền"</string>
<string name="permdesc_setWallpaper" msgid="7373447920977624745">"Cho phép ứng dụng đặt hình nền hệ thống."</string>
- <!-- no translation found for permlab_setWallpaperHints (3278608165977736538) -->
- <skip />
+ <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"điều chỉnh kích thước hình nền của bạn"</string>
<string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Cho phép ứng dụng đặt gợi ý kích thước hình nền của hệ thống."</string>
<string name="permlab_masterClear" msgid="2315750423139697397">"đặt lại hệ thống về mặc định ban đầu"</string>
<string name="permdesc_masterClear" msgid="3665380492633910226">"Cho phép ứng dụng đặt lại toàn bộ hệ thống về cài đặt ban đầu, xóa tất cả dữ liệu, cấu hình và ứng dụng đã cài đặt."</string>
@@ -487,21 +532,16 @@
<string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Cho phép ứng dụng thay đổi múi giờ của điện thoại."</string>
<string name="permlab_accountManagerService" msgid="4829262349691386986">"hoạt động như AccountManagerService"</string>
<string name="permdesc_accountManagerService" msgid="1948455552333615954">"Cho phép ứng dụng thực hiện cuộc gọi đến AccountAuthenticators."</string>
- <!-- no translation found for permlab_getAccounts (1086795467760122114) -->
- <skip />
+ <string name="permlab_getAccounts" msgid="1086795467760122114">"tìm tài khoản trên thiết bị"</string>
<string name="permdesc_getAccounts" product="tablet" msgid="3238360555257773358">"Cho phép ứng dụng nhận danh sách các tài khoản mà máy tính bảng biết."</string>
<string name="permdesc_getAccounts" product="default" msgid="2735689364629830348">"Cho phép ứng dụng nhận danh sách các tài khoản mà điện thoại biết."</string>
- <!-- no translation found for permlab_authenticateAccounts (5265908481172736933) -->
- <skip />
+ <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"tạo tài khoản và đặt mật khẩu"</string>
<string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Cho phép ứng dụng sử dụng các tính năng của trình xác thực tài khoản của AccountManager, bao gồm tạo tài khoản, nhận và đặt mật khẩu cho các tài khoản đó."</string>
- <!-- no translation found for permlab_manageAccounts (4983126304757177305) -->
- <skip />
+ <string name="permlab_manageAccounts" msgid="4983126304757177305">"thêm hoặc xóa tài khoản"</string>
<string name="permdesc_manageAccounts" msgid="8698295625488292506">"Cho phép ứng dụng thực hiện các thao tác như thêm và xóa tài khoản cũng như xóa mật khẩu của các tài khoản đó."</string>
- <!-- no translation found for permlab_useCredentials (235481396163877642) -->
- <skip />
+ <string name="permlab_useCredentials" msgid="235481396163877642">"sử dụng tài khoản trên thiết bị"</string>
<string name="permdesc_useCredentials" msgid="7984227147403346422">"Cho phép ứng dụng yêu cầu mã thông báo xác thực."</string>
- <!-- no translation found for permlab_accessNetworkState (4951027964348974773) -->
- <skip />
+ <string name="permlab_accessNetworkState" msgid="4951027964348974773">"xem kết nối mạng"</string>
<string name="permdesc_accessNetworkState" msgid="479772796952547198">"Cho phép ứng dụng xem trạng thái của tất cả các mạng."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"quyền truy cập Internet đầy đủ"</string>
<string name="permdesc_createNetworkSockets" msgid="5963922297444265950">"Cho phép ứng dụng tạo các cổng mạng."</string>
@@ -513,36 +553,29 @@
<string name="permdesc_changeTetherState" msgid="1524441344412319780">"Cho phép ứng dụng thay đổi trạng thái của kết nối mạng được dùng làm điểm truy cập Internet."</string>
<string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"thay đổi cài đặt sử dụng dữ liệu nền"</string>
<string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"Cho phép ứng dụng thay đổi cài đặt sử dụng dữ liệu nền."</string>
- <!-- no translation found for permlab_accessWifiState (5202012949247040011) -->
- <skip />
+ <string name="permlab_accessWifiState" msgid="5202012949247040011">"xem kết nối Wi-Fi"</string>
<string name="permdesc_accessWifiState" msgid="7770452658226256831">"Cho phép ứng dụng xem thông tin về trạng thái Wi-Fi."</string>
- <!-- no translation found for permlab_changeWifiState (6550641188749128035) -->
- <skip />
+ <string name="permlab_changeWifiState" msgid="6550641188749128035">"kết nối và ngắt kết nối Wi-Fi"</string>
<string name="permdesc_changeWifiState" msgid="7399961004537946240">"Cho phép ứng dụng kết nối và ngắt kết nối khỏi điểm truy cập Wi-Fi cũng như thực hiện các thay đổi đối với mạng Wi-Fi đã được định cấu hình."</string>
<string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"cho phép thu tín hiệu Wi-Fi Đa hướng"</string>
<string name="permdesc_changeWifiMulticastState" msgid="7633598524564320817">"Cho phép ứng dụng nhận các gói không được gửi trực tiếp đến thiết bị của bạn. Quyền này có thể hữu ích khi phát hiện các dịch vụ được cung cấp gần đó. Chế độ này sử dụng nhiều năng lượng hơn chế độ không phát đa hướng."</string>
- <!-- no translation found for permlab_bluetoothAdmin (6006967373935926659) -->
- <skip />
+ <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"truy cập cài đặt Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Cho phép ứng dụng định cấu hình máy tính bảng Bluetooth cục bộ cũng như phát hiện và ghép nối với các thiết bị từ xa."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Cho phép ứng dụng định cấu hình điện thoại Bluetooth cục bộ cũng như phát hiện và ghép nối với các thiết bị từ xa."</string>
- <!-- no translation found for permlab_accessWimaxState (7436749103151096452) -->
- <skip />
+ <string name="permlab_accessWimaxState" msgid="7436749103151096452">"Xem kết nối WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="5914958077555177749">"Cho phép ứng dụng xem thông tin về trạng thái của WiMAX."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Thay đổi trạng thái WiMAX"</string>
<string name="permdesc_changeWimaxState" msgid="3328853825006455912">"Cho phép ứng dụng kết nối và ngắt kết nối mạng WiMAX."</string>
- <!-- no translation found for permlab_bluetooth (6127769336339276828) -->
- <skip />
+ <string name="permlab_bluetooth" msgid="6127769336339276828">"ghép nối với thiết bị Bluetooth"</string>
<string name="permdesc_bluetooth" product="tablet" msgid="7007851048416363446">"Cho phép ứng dụng xem cấu hình của máy tính bảng Bluetooth cục bộ cũng như tạo và chấp nhận các kết nối với thiết bị được ghép nối."</string>
<string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"Cho phép ứng dụng xem cấu hình của điện thoại Bluetooth cục bộ cũng như tạo và chấp nhận các kết nối với thiết bị được ghép nối."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"kiểm soát Liên lạc trường gần"</string>
<string name="permdesc_nfc" msgid="7120611819401789907">"Cho phép ứng dụng giao tiếp với thẻ Giao tiếp trường gần (NFC), thẻ và trình đọc."</string>
- <!-- no translation found for permlab_disableKeyguard (3598496301486439258) -->
- <skip />
+ <string name="permlab_disableKeyguard" msgid="3598496301486439258">"vô hiệu hóa khóa màn hình của bạn"</string>
<string name="permdesc_disableKeyguard" msgid="6231611286892232626">"Cho phép ứng dụng tắt khóa phím và bất kỳ bảo mật mật khẩu được liên kết nào. Ví dụ thích hợp của việc này là điện thoại tắt khóa phím khi nhận được cuộc gọi đến, sau đó bật lại khóa phím khi cuộc gọi kết thúc."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"đọc cài đặt đồng bộ hóa"</string>
<string name="permdesc_readSyncSettings" msgid="5464056785274229278">"Cho phép ứng dụng đọc cài đặt đồng bộ hóa, chẳng hạn như liệu đồng bộ hóa đã được bật cho ứng dụng Liên hệ hay chưa."</string>
- <!-- no translation found for permlab_writeSyncSettings (5408694875793945314) -->
- <skip />
+ <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"chuyển đổi bật và tắt đồng bộ hóa"</string>
<string name="permdesc_writeSyncSettings" msgid="1466056564502117130">"Cho phép ứng dụng sửa đổi cài đặt đồng bộ hóa, chẳng hạn như có bật đồng bộ hóa cho ứng dụng Liên hệ hay không."</string>
<string name="permlab_readSyncStats" msgid="7396577451360202448">"đọc thống kê đồng bộ hóa"</string>
<string name="permdesc_readSyncStats" msgid="3801971839939951678">"Cho phép ứng dụng đọc các số liệu thống kê về đồng bộ hóa; ví dụ: lịch sử đồng bộ hóa đã diễn ra."</string>
@@ -550,23 +583,16 @@
<string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Cho phép ứng dụng lấy thông tin chi tiết về nguồn cấp dữ liệu hiện được đồng bộ hóa."</string>
<string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"ghi nguồn cấp dữ liệu đã đăng ký"</string>
<string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Cho phép ứng dụng sửa đổi nguồn cấp dữ liệu hiện đã được đồng bộ hóa của bạn. Ứng dụng độc hại có thể thay đổi nguồn cấp dữ liệu đã đồng bộ hóa của bạn."</string>
- <!-- no translation found for permlab_readDictionary (4107101525746035718) -->
- <skip />
+ <string name="permlab_readDictionary" msgid="4107101525746035718">"đọc cụm từ bạn đã thêm vào từ điển"</string>
<string name="permdesc_readDictionary" msgid="8977815988329283705">"Cho phép ứng dụng đọc bất kỳ từ, tên và cụm từ riêng nào mà người dùng có thể đã lưu trữ trong từ điển của người dùng."</string>
<string name="permlab_writeDictionary" msgid="2296383164914812772">"ghi vào từ điển do người dùng xác định"</string>
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"Cho phép ứng dụng ghi từ mới vào từ điển của người dùng."</string>
- <!-- no translation found for permlab_sdcardRead (367275095159405468) -->
- <skip />
- <!-- no translation found for permlab_sdcardRead (2188156462934977940) -->
- <skip />
- <!-- no translation found for permdesc_sdcardRead (3530894470637667917) -->
- <skip />
- <!-- no translation found for permdesc_sdcardRead (2555811422562526606) -->
- <skip />
- <!-- no translation found for permlab_sdcardWrite (8485979062254666748) -->
- <skip />
- <!-- no translation found for permlab_sdcardWrite (9084476432661578751) -->
- <skip />
+ <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"đọc nội dung của bộ lưu trữ USB của bạn"</string>
+ <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"đọc nội dung của thẻ SD của bạn"</string>
+ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Cho phép ứng dụng đọc nội dung của bộ lưu trữ USB, bộ lưu trữ này có thể bao gồm ảnh và đa phương tiện."</string>
+ <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Cho phép ứng dụng đọc nội dung của thẻ SD, thẻ này có thể bao gồm ảnh và đa phương tiện."</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"sửa đổi hoặc xóa nội dung của bộ lưu trữ USB của bạn"</string>
+ <string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"sửa đổi hoặc xóa nội dung của thẻ SD của bạn"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Cho phép ứng dụng ghi vào bộ lưu trữ USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Cho phép ứng dụng ghi vào thẻ SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"sửa đổi/xóa nội dung trên bộ nhớ phương tiện cục bộ"</string>
@@ -744,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Không có thẻ SIM nào trong điện thoại."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Hãy lắp thẻ SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Thẻ SIM bị thiếu hoặc không thể đọc được. Vui lòng lắp thẻ SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Thẻ SIM của bạn đã bị vô hiệu hóa vĩnh viễn ."\n" Hãy liên hệ với nhà cung cấp dịch vụ không dây của bạn để lấy thẻ SIM khác."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Nút bài hát trước"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Nút bài hát tiếp theo"</string>
@@ -819,15 +847,12 @@
<string name="autofill_parish" msgid="8202206105468820057">"Giáo xứ"</string>
<string name="autofill_area" msgid="3547409050889952423">"Khu vực"</string>
<string name="autofill_emirate" msgid="2893880978835698818">"Tiểu vương quốc Ả rập"</string>
- <!-- no translation found for permlab_readHistoryBookmarks (3775265775405106983) -->
- <skip />
+ <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"đọc lịch sử và dấu trang Web của bạn"</string>
<string name="permdesc_readHistoryBookmarks" msgid="4577476392604595921">"Cho phép ứng dụng đọc tất cả các URL mà Trình duyệt đã truy cập cũng như tất cả các dấu trang của Trình duyệt."</string>
- <!-- no translation found for permlab_writeHistoryBookmarks (3714785165273314490) -->
- <skip />
+ <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"viết lịch sử và dấu trang web của bạn"</string>
<string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="1757103804824209530">"Cho phép ứng dụng sửa đổi lịch sử hoặc dấu trang của Trình duyệt được lưu trữ trên máy tính bảng của bạn. Ứng dụng độc hại có thể sử dụng quyền này để xóa hoặc sửa đổi dữ liệu của Trình duyệt."</string>
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="6693764355720719197">"Cho phép ứng dụng sửa đổi lịch sử hoặc dấu trang của Trình duyệt được lưu trữ trên điện thoại của bạn. Ứng dụng độc hại có thể sử dụng quyền này để xóa hoặc sửa đổi dữ liệu Trình duyệt của bạn."</string>
- <!-- no translation found for permlab_setAlarm (1379294556362091814) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="1379294556362091814">"đặt báo thức"</string>
<string name="permdesc_setAlarm" msgid="316392039157473848">"Cho phép ứng dụng đặt báo thức trong ứng dụng đồng hồ báo thức được cài đặt. Một số ứng dụng đồng hồ báo thức có thể không thực thi tính năng này."</string>
<string name="permlab_addVoicemail" msgid="5525660026090959044">"thêm thư thoại"</string>
<string name="permdesc_addVoicemail" msgid="6604508651428252437">"Cho phép ứng dụng thêm thông báo vào hộp thư thoại đến của bạn."</string>
@@ -1088,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Đặt"</string>
<string name="date_time_done" msgid="2507683751759308828">"Xong"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Mặc định"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"MỚI: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"MỚI: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Không yêu cầu quyền"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Ẩn"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Hiển thị tất cả"</b></string>
diff --git a/core/res/res/values-w500dp/bools.xml b/core/res/res/values-w500dp/bools.xml
new file mode 100644
index 000000000000..f53fd39931a2
--- /dev/null
+++ b/core/res/res/values-w500dp/bools.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+ <bool name="activity_chooser_view_has_default_activity">true</bool>
+</resources> \ No newline at end of file
diff --git a/core/res/res/values-xlarge/dimens.xml b/core/res/res/values-xlarge/dimens.xml
index c15770dfb6af..29cea26c9fde 100644
--- a/core/res/res/values-xlarge/dimens.xml
+++ b/core/res/res/values-xlarge/dimens.xml
@@ -25,10 +25,6 @@
<!-- keyboardHeight = key_height*4 + key_bottom_gap*3 -->
<dimen name="password_keyboard_height">48.0mm</dimen>
- <!-- The width that is used when creating thumbnails of applications. -->
- <dimen name="thumbnail_width">230dp</dimen>
- <!-- The height that is used when creating thumbnails of applications. -->
- <dimen name="thumbnail_height">135dp</dimen>
<!-- Minimum width of the search view text entry area. -->
<dimen name="search_view_text_min_width">192dip</dimen>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 9b93c5cc6878..09fab1f5ac12 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"您的信息"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"读写短信、电子邮件和其他消息。"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"您的个人信息"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"直接访问平板电脑上存储的联系人和日历。"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"直接访问手机上存储的联系人和日历。"</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"您的位置"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"监视您的实际位置。"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"网络通信"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"使用各种网络功能。"</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"您的帐户"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"访问可用的帐户。"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"硬件控件"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"对系统进行低级访问和控制。"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"开发工具"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"只有应用开发人员才需要的功能。"</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"存储"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"访问 USB 存储设备。"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"访问 SD 卡。"</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"手机中无 SIM 卡"</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"请插入 SIM 卡"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM 卡缺失或无法读取。请插入 SIM 卡。"</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"您的 SIM 卡已永久停用。"\n"请与您的无线服务提供商联系,以便重新获取一张 SIM 卡。"</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"“上一曲目”按钮"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"“下一曲目”按钮"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"设置"</string>
<string name="date_time_done" msgid="2507683751759308828">"完成"</string>
<string name="default_permission_group" msgid="2690160991405646128">"默认"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"新增:"</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"新增:"</font></string>
<string name="no_permissions" msgid="7283357728219338112">"不需要任何权限"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"隐藏"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"全部显示"</b></string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index a54f44993d36..322b8bfe3f68 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -147,7 +147,7 @@
<string name="shutdown_confirm" product="default" msgid="649792175242821353">"手機即將關機。"</string>
<string name="shutdown_confirm_question" msgid="2906544768881136183">"您要關機嗎?"</string>
<string name="reboot_safemode_title" msgid="7054509914500140361">"重新啟動進入安全模式"</string>
- <string name="reboot_safemode_confirm" msgid="55293944502784668">"您要重新啟動進入安全模式嗎?這會停用您所安裝的所有第三方應用程式。如要還原這些應用程式,只要再次重新啟動即可。"</string>
+ <string name="reboot_safemode_confirm" msgid="55293944502784668">"您要重新啟動進入安全模式嗎?這會將您安裝的所有第三方應用程式全部停用。如要還原這些應用程式,只要再次重新啟動即可。"</string>
<string name="recent_tasks_title" msgid="3691764623638127888">"最新的"</string>
<string name="no_recent_tasks" msgid="8794906658732193473">"沒有最近用過的應用程式。"</string>
<string name="global_actions" product="tablet" msgid="408477140088053665">"平板電腦選項"</string>
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"您的簡訊"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"讀取及寫入您的簡訊、電子郵件和其他訊息。"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"您的個人資訊"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"直接存取平板電腦上儲存的聯絡人和日曆。"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"直接存取手機上的聯絡人與日曆。"</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"您的位置"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"監控您的實際位置。"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"網路通訊"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"存取各種網路功能。"</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"您的帳戶"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"存取可用帳戶。"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"硬體控制"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"系統低階存取與控制。"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"開發工具"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"只有應用程式開發人員需要使用的功能。"</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"儲存"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"存取 USB 儲存裝置。"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"存取 SD 卡。"</string>
@@ -202,7 +270,7 @@
<string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"接收緊急廣播"</string>
<string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"允許應用程式接收及處理緊急廣播訊息,只有系統應用程式可以具備這項權限。"</string>
<string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"讀取區域廣播訊息"</string>
- <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"允許應用程式讀取您裝置接收的區域廣播訊息。某些地點會發出區域廣播警告,警告您發生緊急狀況。惡意應用程式可能會在裝置收到緊急區域廣播時,干擾裝置的效能或運作。"</string>
+ <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"允許應用程式讀取您裝置收到的區域廣播訊息。某些地點會發出區域廣播警示,警告您有緊急狀況發生。請注意,惡意應用程式可能會在裝置收到緊急區域廣播時,干擾裝置的效能或運作。"</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"傳送 SMS 簡訊"</string>
<string name="permdesc_sendSms" msgid="906546667507626156">"允許應用程式傳送 SMS 簡訊。請注意,惡意應用程式可能利用此功能擅自傳送簡訊,導致您必須支付大筆費用。"</string>
<string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"不需經過確認即傳送 SMS 簡訊"</string>
@@ -217,14 +285,14 @@
<string name="permdesc_receiveWapPush" msgid="7983455145335316872">"允許應用程式接收及處理 WAP 訊息。請注意,惡意應用程式可能利用此功能監視訊息,或在您讀取訊息前擅自將其刪除。"</string>
<string name="permlab_getTasks" msgid="6466095396623933906">"擷取執行中的應用程式"</string>
<string name="permdesc_getTasks" msgid="6608159250520381359">"允許應用程式取得最近執行任務的資訊。請注意,惡意應用程式可能利用此功能找出其他應用程式的隱私資訊。"</string>
- <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"擷取執行中應用程式的詳細資料"</string>
- <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"允許應用程式擷取目前及最近執行任務的詳細資訊。惡意應用程式可能會找出其他應用程式的私人資訊。"</string>
+ <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"擷取執行中應用程式的詳細資訊"</string>
+ <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"允許應用程式擷取目前及最近所執行任務的詳細資訊。請注意,惡意應用程式可能會找出其他應用程式的不公開資訊。"</string>
<string name="permlab_reorderTasks" msgid="2018575526934422779">"重新排序正在執行的應用程式"</string>
<string name="permdesc_reorderTasks" msgid="4175137612205663399">"允許應用程式將工作移至前景或背景。請注意,惡意應用程式可能利用此功能自行移動至前景。"</string>
<string name="permlab_removeTasks" msgid="6821513401870377403">"停止執行中的應用程式"</string>
<string name="permdesc_removeTasks" msgid="1394714352062635493">"允許應用程式移除工作並終止執行工作的應用程式。請注意,惡意應用程式可能利用此功能干擾其他應用程式的行為。"</string>
<string name="permlab_startAnyActivity" msgid="2918768238045206456">"啟動任何活動"</string>
- <string name="permdesc_startAnyActivity" msgid="997823695343584001">"允許應用程式忽視權限保護或匯出狀態,啟動任何活動。"</string>
+ <string name="permdesc_startAnyActivity" msgid="997823695343584001">"不論權限保護或匯出狀態為何,一律允許應用程式啟動任何活動。"</string>
<string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"設定螢幕相容性"</string>
<string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"允許應用程式控制其他應用程式的螢幕相容性模式。惡意應用程式可能藉此破壞其他應用程式的正常運作。"</string>
<string name="permlab_setDebugApp" msgid="3022107198686584052">"啟用應用程式偵錯"</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"手機未插入 SIM 卡。"</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"插入 SIM 卡。"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"找不到或無法讀取 SIM 卡。請插入 SIM 卡。"</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"您的 SIM 卡已遭永久停用。"\n"請與您的無線網路服務供應商聯絡,以取得其他 SIM 卡。"</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"[上一首曲目] 按鈕"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"[下一首曲目] 按鈕"</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"設定"</string>
<string name="date_time_done" msgid="2507683751759308828">"完成"</string>
<string name="default_permission_group" msgid="2690160991405646128">"預設值"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"新增:"</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"新增:"</font></string>
<string name="no_permissions" msgid="7283357728219338112">"無須許可"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>" 隱藏"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"顯示全部"</b></string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index f1779f067672..63a95ead1412 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -168,12 +168,76 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Imiyalezo yakho"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Funda futhi ubhale i-SMS yakho, i-imeyili, kanye neminye imiyalezo."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Ukwaziswa kwakho komuntu siqu"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Ukufinyelela okuqondile othintana nabo nekhalenda egcinwe kwithebhulethi yakho."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Ukufinyelela okuqondile othintana nabo nekhalenda egcinwe efonini yakho."</string>
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
+ <skip />
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Indawo yakho"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Gada indawo yakho yokuhlala"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Uxhumano lwenethiwekhi"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Finyelela kokuqukethwe inethiwekhi okuhlukahlukee."</string>
+ <!-- no translation found for permgrouplab_shortRangeNetwork (4504840216096355984) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortRangeNetwork (8821013030346680806) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (8114410334955871144) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (40926483968949978) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Ama-akhawunti akho"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Finyelela kuma-akhawunti atholakalayo"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Izilawuli zezingxenyekazi zekhompyutha"</string>
@@ -184,6 +248,10 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ukufinyelela kwezinga eliphansi nokulawula uhlelo."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Amathuluzi okuthuthukisa"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Okuqukethwe okudingakela abasunguli bensiza kuphela."</string>
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Isitoreji"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Finyelela kwisitoreji se-USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Finyelela ikhadi le-SD."</string>
@@ -193,7 +261,7 @@
<string name="permdesc_statusBarService" msgid="716113660795976060">"Ivumela uhlelo lokusebenza ukuthi lube umudwa ochaza ngesimo."</string>
<string name="permlab_expandStatusBar" msgid="1148198785937489264">"khulisa/nciphisa ibha yomumo"</string>
<string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Ivumela insiza ukuthi ikhulise noma inciphise umudwa ochza ngesimo."</string>
- <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"thumela izingcingo eziphumayo kabusha"</string>
+ <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"thumela amakholi aphumayo kabusha"</string>
<string name="permdesc_processOutgoingCalls" msgid="1152111671618301044">"Ivumela ukuth insiza isebenze izingcingo ezphumayo iphinde futhi iguqule inombolo eshayelwayo. Izinsiza ezinobungozi zingabheka, zithumele kabusha noma zivimbe izingcingo eziphumayo."</string>
<string name="permlab_receiveSms" msgid="8673471768947895082">"thola imiyalezo ebhaliwe (i-SMS)"</string>
<string name="permdesc_receiveSms" msgid="8107887121893611793">"Ivumela ukuthi insiza yamukele iphinde isebenze imiyalezo ye-SMS. Izinsiza ezinobungozi zingabheka imiyalezo yakho noma ziyisuse ngaphandle kokuthi zikukhombise."</string>
@@ -257,7 +325,7 @@
<string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Ivumela insiza ukuthi isakaze isaziso sokuthi umyalezo we-WAP PUSH utholakele. Izinsiza ezinobungozi zingasebenzisa lokhu ukufoja ukutholakala kwemiyalezo ye-S noa zisuse okuqukethwe kwanoma iliphi ikhasi lewebhu eliqukethe okunobungozi."</string>
<string name="permlab_setProcessLimit" msgid="2451873664363662666">"khawula inani lezinqubo ezisebenzayo"</string>
<string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Ivumela insiza ukuthi ilawule isibalo esikhulu sezinto eziqhubekayo eziyosebenza. Ayidingakeli izinsiza ezijwayelekile."</string>
- <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"phoqa izinhlelo zokusebenza ezingemumva ukuthi zivaleke"</string>
+ <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"phoqa izinhlelo zokusebenza ezingemuva ukuthi zivaleke"</string>
<string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"Ivumela izinsiza ukuthi zilawule ukuthi izehlakalo ziyaphela yini emumva kokuba ziye ngemumva. Akudingakeli izinsiza ezijwayelekile."</string>
<string name="permlab_batteryStats" msgid="7863923071360031652">"guqula izibalo zebhetri"</string>
<string name="permdesc_batteryStats" msgid="6835186932305744068">"Ivumela insiza ukuthi iguqule imininingwane yebhethri eqoqiwe. Akwenzelwe ukuthi kusetshenziswe izinsiza ezijwayelekile."</string>
@@ -399,8 +467,8 @@
<string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"finyelela ohlelweni lokufayela lwe-USB"</string>
<string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"finyelela ohlelweni lokufayela lwe-SD Card"</string>
<string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Ivumela izinhlelo ukugibelisa nokukwehlisa izinhlelo zefayela zokugcina okukhiphekayo."</string>
- <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"Sula okokulondoloza kwe-USB"</string>
- <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"Susa ikhadi le-SD"</string>
+ <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"susa okokulondoloza kwe-USB"</string>
+ <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"susa ikhadi le-SD"</string>
<string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"Ivumela uhlelo lokusebenza ukufometha isitoreji esikhiphekayo."</string>
<string name="permlab_asec_access" msgid="3411338632002193846">"thola ulwazi ngesitoreji sangaphakathi"</string>
<string name="permdesc_asec_access" msgid="3094563844593878548">"Ivumela uhlelo lokusebenza ukuthola ukwaziswa ekugcineni kwangaphakathi."</string>
@@ -452,7 +520,7 @@
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Sebenzise njengokuhlola komkhiqizi wezinga eliphansi, uvumela ukufinyelela okugcwele ihadiwe yefoni. Itholakala kuphela lapho ifoni isebenza kwimodi yokuhlola yomkhiqizi."</string>
<string name="permlab_setWallpaper" msgid="6627192333373465143">"setha iphephadonga"</string>
<string name="permdesc_setWallpaper" msgid="7373447920977624745">"Ivumela uhlelo lokusebenza ukumisa iphephadonga lohlelo."</string>
- <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"shintsha usayizi wesithombe sakho sangemumva"</string>
+ <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"shintsha usayizi wesithombe sakho sangemuva"</string>
<string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Ivumela uhlelo lokusebenza ukuhlela izihlawumbisela zosayizi wephephadonga lohlelo."</string>
<string name="permlab_masterClear" msgid="2315750423139697397">"setha kabusha kube okumisiwe kwemboni"</string>
<string name="permdesc_masterClear" msgid="3665380492633910226">"Ivuela insiza ukuthi isethe kabusha isistiu ngokuphelele iyibuyisele ezisethweni eyafika nazo, isusa konke ukumisw kwemininingwane, kanye nezinsiza ezifakiwe."</string>
@@ -469,11 +537,11 @@
<string name="permdesc_getAccounts" product="default" msgid="2735689364629830348">"Ivumela insiza ukuthi ithole uhlu lwma-akhawunti aziwa ucingo."</string>
<string name="permlab_authenticateAccounts" msgid="5265908481172736933">"yakha ama-akhawunti bese usetha amaphasiwedi"</string>
<string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Ivumela uhlelo lokusebenza ukusebenzisa amakhono okufakazela ubuqiniso e-akhawunti Emeneja ye-Akhawunti, kuhlanganise ukwenza ama-akhawunti ngisho nokumisa amaphasiwedi ayo."</string>
- <string name="permlab_manageAccounts" msgid="4983126304757177305">"Faka noma ukhiphe ama-akhawunti"</string>
+ <string name="permlab_manageAccounts" msgid="4983126304757177305">"engeza noma ukhiphe ama-akhawunti"</string>
<string name="permdesc_manageAccounts" msgid="8698295625488292506">"Ivumela uhlelo lokusebenza ukwenza imisebenzi enjengokufaka, nokukhipha ama-akhawunti nokususa iphasiwedi yawo"</string>
<string name="permlab_useCredentials" msgid="235481396163877642">"sebenzisa ama-akhawunti edivayisini"</string>
<string name="permdesc_useCredentials" msgid="7984227147403346422">"Ivumela insiza ukuthi icele amathokheni okuqinisekisa."</string>
- <string name="permlab_accessNetworkState" msgid="4951027964348974773">"bheka ukuxhumaniseka enethiwekhini"</string>
+ <string name="permlab_accessNetworkState" msgid="4951027964348974773">"buka ukuxhumeka kunethiwekhi"</string>
<string name="permdesc_accessNetworkState" msgid="479772796952547198">"Ivumela insiza ukuthi ibheke isio sawo wonke amanethiwekhi."</string>
<string name="permlab_createNetworkSockets" msgid="9121633680349549585">"Ukufinyelela i-Inthanethi ngokugcwele"</string>
<string name="permdesc_createNetworkSockets" msgid="5963922297444265950">"Ivumela insiza ukuthi yakhe amsokhethi enethiwekhi."</string>
@@ -485,7 +553,7 @@
<string name="permdesc_changeTetherState" msgid="1524441344412319780">"Ivumela insiza ukuthi iguqule isimo sokuxhuaniseka kwenethiwekhi ehunyiwe."</string>
<string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"shintsha idatha yasemuva yelungiselelo lokusebenzisa"</string>
<string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"Ivumela uhlelo lokusebenza ukuthi luguqule izilungiselelo zemininingwane yokusetshenziswa kwedatha."</string>
- <string name="permlab_accessWifiState" msgid="5202012949247040011">"bheka ukuxhumaniseka kwi-Wi-Fi"</string>
+ <string name="permlab_accessWifiState" msgid="5202012949247040011">"buka ukuxhumaneka kwi-Wi-Fi"</string>
<string name="permdesc_accessWifiState" msgid="7770452658226256831">"Ivumela insiza ukuthi ibheke imininingwane emayelana nesimo se-Wi-Fi."</string>
<string name="permlab_changeWifiState" msgid="6550641188749128035">"xhuma uphinde unqamule kwi-Wi-Fi"</string>
<string name="permdesc_changeWifiState" msgid="7399961004537946240">"Ivumela uhlelo lokusebenza ukuxhuma nokungaxhumeki kumaphoyinti okungena e-Wi-Fi, nokwenza izinguquko ukumisa amanethiwekhi e-Wi-Fi."</string>
@@ -494,7 +562,7 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"finyelela ezilungiselelweni ze-Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Ivumela uhlelo lokusebenza ukumisa ithebhulethi ye-Bluetooth yasendawni, nokuthola nokubhanqanisa namadivaysi okulawula okukude."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Ivumela uhlelo lokusebenza ukumisa ifoni ye-Bluetooth yasendawni, nokuthola nokubhanqanisa namadivaysi okulawula okukude."</string>
- <string name="permlab_accessWimaxState" msgid="7436749103151096452">"Bheka ukuxhumaniseka kwi-WiMAX"</string>
+ <string name="permlab_accessWimaxState" msgid="7436749103151096452">"Buka ukuxhumeka kwi-WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="5914958077555177749">"Ivumela insiza ukubuka ulwazi mayelana nesimo se-WiMAX."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Shintsha isimo se-WiMAX"</string>
<string name="permdesc_changeWimaxState" msgid="3328853825006455912">"Vumela insiza ukuthi ixhumaniseke futhi ibhonculeke kwinethiwekhi ye-WiMAX."</string>
@@ -503,7 +571,7 @@
<string name="permdesc_bluetooth" product="default" msgid="31846362767164948">"Ivumela insiza ukuthi ibheke ukumiswa kwe-Bluetooth ocingweni, kanye nokwenza kanye nokwamukela ukuxhumaniseka nokwenziwa kwamadivayisi ukuthi asebenzisane."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"lawula Uxhumano Lwenkambu Eseduze"</string>
<string name="permdesc_nfc" msgid="7120611819401789907">"Ivuela insiza ukuthi ixhumane ne-Near Field Communication (NFC) amathegi, amakhadi kanye nezinhlelo zokufunda."</string>
- <string name="permlab_disableKeyguard" msgid="3598496301486439258">"yenza ukukhiya kwakho iskrini kungasebenzi"</string>
+ <string name="permlab_disableKeyguard" msgid="3598496301486439258">"khubaza ukukhiya kwakho iskrini"</string>
<string name="permdesc_disableKeyguard" msgid="6231611286892232626">"Ivumela uhlelo lokusebenza ukuvimbela ukuvala ukhiye nanoma yikuphi ukuphepha kwephasiwedi okuhlobene. Isibonelo esisemthethweni salokhu ukuba ifoni ivimbele ukuvala ukhiye lapho ithola ikholi engenayo, bese ivumela futhi ukuvala ukhiye lapho ikholi isiqedile."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"funda izilungiselelo zokuvumelanisa"</string>
<string name="permdesc_readSyncSettings" msgid="5464056785274229278">"Ivumela uhlelo lokusebenza ukuthi lifunde izilungiselelo zokuvumelanisa njengokuthi ukuvumelanise kuyasebenza yini kuhlelo lokusebenza Abantu."</string>
@@ -515,15 +583,15 @@
<string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Ivumela insiza ukuthi ithole imininingwane mayelana namafidi avumelnisiwe njengamanje."</string>
<string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"bhala izifunzo ezikhokhelwayo"</string>
<string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Ivumela insiza ukuthi iguqule amafidi akho avumelanisiwe njengamanje. Izinsiza ezinobungozi zingaguqula amafidi akho avumelanisiwe."</string>
- <string name="permlab_readDictionary" msgid="4107101525746035718">"funda imibandela oyengezile esichazinimazwi"</string>
+ <string name="permlab_readDictionary" msgid="4107101525746035718">"funda imibandela oyengezile esichazimazwini"</string>
<string name="permdesc_readDictionary" msgid="8977815988329283705">"Ivumela uhlelo lokusebenza ukufunda noma yimaphi amagama ayimfihlo, amagama nemisho leyo umsebenzisi ayigcine kwisichazamazwi somsebenzisi."</string>
<string name="permlab_writeDictionary" msgid="2296383164914812772">"bhala kwisichazamazwi esicacisiwe somsebenzisi"</string>
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"Ivumela insiza ukuthi ibhale amagama amasha esichazinimazwi."</string>
- <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"funda okuqukethwe kokokulondoloza kwe-USD kwakho"</string>
+ <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"funda okuqukethwe kokugciniwe kwakho okufinyeleleka nge-USD"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"funda okuqukethwe ekhadini lakho le-SD"</string>
- <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Ivumela uhlelo lokusebenza ukuthi lufunde okuqukethwe kwi-USB, okungabandakanya izithombe kanye nezingosi."</string>
- <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Ivumela uhlelo lokusebenza ukuthi lufunde okuqukethwe ikhadi le-SD, okungabandakanya izithombe kanye nezingosi."</string>
- <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"guqula noma ususe okuqukethwe kokokulondoloza kwe-USB kwakho"</string>
+ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3530894470637667917">"Ivumela uhlelo lokusebenza ukuthi lufunde okuqukethwe kwi-USB, okungabandakanya izithombe kanye nezingosi yezindaba."</string>
+ <string name="permdesc_sdcardRead" product="default" msgid="2555811422562526606">"Ivumela uhlelo lokusebenza ukuthi lufunde okuqukethwe ikhadi le-SD, okungabandakanya izithombe kanye nengosi yezindaba."</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"guqula noma ususe okuqukethwe kwakho okugciniwe okufinyeleleka nge-USB"</string>
<string name="permlab_sdcardWrite" product="default" msgid="9084476432661578751">"guqula noma ususe okuqukethwe ekhadini lakho le-SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Ivumela insiza ukuthi ibhalele ekulondolozweni kwe-USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Ivumela insiza ukuthi ibhalele ekhadini le-SD."</string>
@@ -702,6 +770,8 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Alikho ikhadi le-SIM efonini."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Faka ikhadi le-SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Ikhadi le-SIM alitholakali noma alifundeki. Sicela ufake ikhadi le-SIM."</string>
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"I-SIM khadi ykho isiyenziwe ukuthi ingasebenzi unomphela."\n" Xhumana nomhlinzeki wakho wokuxhumana okungenazintambo ukuze uthole enye i-SIM khadi."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Inkinombo yengoma yangaphambilini"</string>
<string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Inkinobho yengoma elandelayo"</string>
@@ -777,7 +847,7 @@
<string name="autofill_parish" msgid="8202206105468820057">"Parish"</string>
<string name="autofill_area" msgid="3547409050889952423">"Indawo"</string>
<string name="autofill_emirate" msgid="2893880978835698818">"Emirate"</string>
- <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"funda amabhukhimakhi akho ewebhu kanye Nomlando"</string>
+ <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"funda amabhukhimakhi akho ewebhu kanye nomlando"</string>
<string name="permdesc_readHistoryBookmarks" msgid="4577476392604595921">"Ivumela uhlelo lokusebenza ukufunda wonke ama-URL lawo Isiphequluli esiwavakashele, ngisho nawo wonke amabhukimakhi Esiphequluli."</string>
<string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"bhala amabhukhimakhi ewebhu kanye nomlando"</string>
<string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="1757103804824209530">"Ivumela insiza ukuthi iguqule ulando Wesiphequluli noma amabhukumaka agcinwe ekhompyutheni yakho yepeni. Izinsiza ezinobungozi zingasebenzisa lokhu ukususa noma ziguqule imininingwane Yesiphequluli sakho."</string>
@@ -1043,7 +1113,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Hlela"</string>
<string name="date_time_done" msgid="2507683751759308828">"Kwenziwe"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Okuzenzakalelayo"</string>
- <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"OKUSHA: "</font></string>
+ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"OKUSHA: "</font></string>
<string name="no_permissions" msgid="7283357728219338112">"Ayikho imvume edingekayo"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Fihla "</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Bonisa konke"</b></string>
diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml
index f9762b18f9ad..6910ebeb16fa 100644
--- a/core/res/res/values/bools.xml
+++ b/core/res/res/values/bools.xml
@@ -22,4 +22,5 @@
<bool name="show_ongoing_ime_switcher">true</bool>
<bool name="action_bar_expanded_action_views_exclusive">true</bool>
<bool name="target_honeycomb_needs_options_menu">true</bool>
+ <bool name="activity_chooser_view_has_default_activity">false</bool>
</resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 229f51818b26..5fa7b7efb51d 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -846,6 +846,10 @@
movement threshold where scrolling should begin. -->
<dimen name="config_viewConfigurationTouchSlop">8dp</dimen>
+ <!-- Maximum number of grid columns permitted in the ResolverActivity
+ used for picking activities to handle an intent. -->
+ <integer name="config_maxResolverActivityColumns">2</integer>
+
<!-- Array of OEM specific USB mode override config.
OEM can override a certain USB mode depending on ro.bootmode.
Specify an array of below items to set override rule.
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 978e2a8cb684..98c19cf0ff4e 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -63,7 +63,6 @@
<java-symbol type="id" name="clearDefaultHint" />
<java-symbol type="id" name="contentPanel" />
<java-symbol type="id" name="customPanel" />
- <java-symbol type="id" name="dangerous_perms_list" />
<java-symbol type="id" name="datePicker" />
<java-symbol type="id" name="day" />
<java-symbol type="id" name="day_names" />
@@ -100,6 +99,7 @@
<java-symbol type="id" name="issued_on" />
<java-symbol type="id" name="left_icon" />
<java-symbol type="id" name="leftSpacer" />
+ <java-symbol type="id" name="line1" />
<java-symbol type="id" name="line3" />
<java-symbol type="id" name="list_footer" />
<java-symbol type="id" name="list_item" />
@@ -117,17 +117,18 @@
<java-symbol type="id" name="new_app_action" />
<java-symbol type="id" name="new_app_description" />
<java-symbol type="id" name="new_app_icon" />
- <java-symbol type="id" name="new_perms_list" />
<java-symbol type="id" name="no_permissions" />
- <java-symbol type="id" name="non_dangerous_perms_list" />
<java-symbol type="id" name="numberpicker_input" />
<java-symbol type="id" name="old_app_action" />
<java-symbol type="id" name="old_app_description" />
<java-symbol type="id" name="old_app_icon" />
+ <java-symbol type="id" name="overflow_title" />
<java-symbol type="id" name="package_label" />
<java-symbol type="id" name="packages_list" />
<java-symbol type="id" name="pause" />
+ <java-symbol type="id" name="perms_list" />
<java-symbol type="id" name="perm_icon" />
+ <java-symbol type="id" name="perm_name" />
<java-symbol type="id" name="permission_group" />
<java-symbol type="id" name="permission_list" />
<java-symbol type="id" name="pickers" />
@@ -163,9 +164,6 @@
<java-symbol type="id" name="sha256_fingerprint" />
<java-symbol type="id" name="share" />
<java-symbol type="id" name="shortcut" />
- <java-symbol type="id" name="show_more" />
- <java-symbol type="id" name="show_more_icon" />
- <java-symbol type="id" name="show_more_text" />
<java-symbol type="id" name="skip_button" />
<java-symbol type="id" name="slider_group" />
<java-symbol type="id" name="split_action_bar" />
@@ -464,7 +462,6 @@
<java-symbol type="string" name="db_default_sync_mode" />
<java-symbol type="string" name="db_wal_sync_mode" />
<java-symbol type="string" name="decline" />
- <java-symbol type="string" name="default_permission_group" />
<java-symbol type="string" name="default_text_encoding" />
<java-symbol type="string" name="description_target_unlock_tablet" />
<java-symbol type="string" name="double_tap_toast" />
@@ -654,10 +651,8 @@
<java-symbol type="string" name="orgTypeOther" />
<java-symbol type="string" name="orgTypeWork" />
<java-symbol type="string" name="passwordIncorrect" />
- <java-symbol type="string" name="permissions_format" />
+ <java-symbol type="string" name="perms_description_app" />
<java-symbol type="string" name="perms_new_perm_prefix" />
- <java-symbol type="string" name="perms_hide" />
- <java-symbol type="string" name="perms_show_all" />
<java-symbol type="string" name="petabyteShort" />
<java-symbol type="string" name="phoneTypeAssistant" />
<java-symbol type="string" name="phoneTypeCallback" />
@@ -1044,6 +1039,7 @@
<java-symbol type="layout" name="alert_dialog_progress" />
<java-symbol type="layout" name="always_use_checkbox" />
<java-symbol type="layout" name="app_permission_item" />
+ <java-symbol type="layout" name="app_permission_item_old" />
<java-symbol type="layout" name="app_perms_summary" />
<java-symbol type="layout" name="calendar_view" />
<java-symbol type="layout" name="character_picker" />
@@ -1377,6 +1373,7 @@
<java-symbol type="bool" name="config_wifi_dual_band_support" />
<java-symbol type="bool" name="config_wimaxEnabled" />
<java-symbol type="bool" name="show_ongoing_ime_switcher" />
+ <java-symbol type="bool" name="activity_chooser_view_has_default_activity" />
<java-symbol type="color" name="config_defaultNotificationColor" />
<java-symbol type="drawable" name="ic_notification_ime_default" />
<java-symbol type="drawable" name="stat_notify_car_mode" />
@@ -1511,6 +1508,12 @@
<java-symbol type="bool" name="config_enableDreams" />
<java-symbol type="string" name="config_defaultDreamComponent" />
+ <java-symbol type="layout" name="resolver_grid" />
+ <java-symbol type="id" name="resolver_grid" />
+ <java-symbol type="id" name="button_once" />
+ <java-symbol type="id" name="button_always" />
+ <java-symbol type="integer" name="config_maxResolverActivityColumns" />
+
<!-- From SystemUI -->
<java-symbol type="anim" name="push_down_in" />
<java-symbol type="anim" name="push_down_out" />
@@ -3592,21 +3595,8 @@
=============================================================== -->
<public type="attr" name="isolatedProcess" id="0x010103a7" />
- <public type="attr" name="supportsRtl" id="0x010103a8" />
-
- <public type="attr" name="textDirection"/>
- <public type="attr" name="textAlignment"/>
-
- <public type="attr" name="layoutDirection" />
-
- <public type="attr" name="paddingStart"/>
- <public type="attr" name="paddingEnd"/>
-
- <public type="attr" name="layout_marginStart"/>
- <public type="attr" name="layout_marginEnd"/>
<public type="attr" name="kcm"/>
-
<public type="attr" name="parentActivityName" />
<public type="attr" name="importantForAccessibility"/>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index c863e7c67e73..e7ad4c2ae492 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -390,11 +390,12 @@
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_personalInfo">Your personal information</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permgroupdesc_personalInfo" product="tablet">Direct access to your contacts
- and calendar stored on the tablet.</string>
+ <string name="permgroupdesc_personalInfo">Direct access to information about you, stored in on your contact card.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_socialInfo">Your social information</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permgroupdesc_personalInfo" product="default">Direct access to your contacts
- and calendar stored on the phone.</string>
+ <string name="permgroupdesc_socialInfo">Direct access to information about your contacts and social connections.</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_location">Your location</string>
@@ -407,6 +408,91 @@
<string name="permgroupdesc_network">Access various network features.</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_bluetoothNetwork">Bluetooth</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_bluetoothNetwork">Access devices and networks through Bluetooth.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_shortrangeNetwork">Short-range Networks</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_shortrangeNetwork">Access devices through short-range networks such as NFC.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_audioSettings">Audio Settings</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_audioSettings">Change audio settings.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_affectsBattery">Affects Battery</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_affectsBattery">Use features that can quickly drain battery.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_calendar">Calendar</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_calendar">Direct access to calendar and events.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_dictionary">Read User Dictionary</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_dictionary">Read words in user dictionary.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_writeDictionary">Write User Dictionary</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_writeDictionary">Add words to the user dictionary.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_bookmarks">Bookmarks and History</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_bookmarks">Direct access to bookmarks and browser history.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_deviceAlarms">Alarm</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_deviceAlarms">Set the alarm clock.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_voicemail">Voicemail</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_voicemail">Direct access to voicemail.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_microphone">Microphone</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_microphone">Direct access to the microphone to record audio.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_camera">Camera</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_camera">Direct access to camera for image or video capture.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_appInfo">Your applications information</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_appInfo">Ability to affect behavior of other applications on your device.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_wallpaper">Wallpaper</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_wallpaper">Change the device wallpaper settings.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_systemClock">Clock</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_systemClock">Change the device time or timezone.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_statusBar">Status Bar</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_statusBar">Change the device status bar settings.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_syncSettings">Sync Settings</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_syncSettings">Access to the sync settings.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_accounts">Your accounts</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_accounts">Access the available accounts.</string>
@@ -432,6 +518,11 @@
<string name="permgroupdesc_developmentTools">Features only needed for app developers.</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_display">Other Application UI</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_display">Effect the UI of other applications.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_storage">Storage</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=30] -->
<string name="permgroupdesc_storage" product="nosdcard">Access the USB storage.</string>
@@ -1516,7 +1607,7 @@
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=30] -->
<string name="permlab_sdcardWrite" product="nosdcard">modify or delete the contents of your USB storage</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_sdcardWrite" product="default">modify or delete the contens of your SD card</string>
+ <string name="permlab_sdcardWrite" product="default">modify or delete the contents of your SD card</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=30] -->
<string name="permdesc_sdcardWrite" product="nosdcard">Allows the app to write to the USB storage.</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
@@ -2895,18 +2986,12 @@
<string name="date_time_done">Done</string>
<!-- Security Permissions strings-->
- <!-- The default permission group for any permissions that have not explicitly set a group. -->
- <string name="default_permission_group">Default</string>
- <!-- Do not translate. -->
- <string name="permissions_format"><xliff:g id="perm_line1">%1$s</xliff:g>, <xliff:g id="perm_line2">%2$s</xliff:g></string>
<!-- Text that is placed at the front of a permission name that is being added to an app [CHAR LIMIT=NONE] -->
- <string name="perms_new_perm_prefix"><font size="12" fgcolor="#ffffa3a3">NEW: </font></string>
+ <string name="perms_new_perm_prefix"><font size="12" fgcolor="#ff900000">NEW: </font></string>
+ <!-- Text that is placed at the front of a permission name that is being added to an app [CHAR LIMIT=NONE] -->
+ <string name="perms_description_app">Provided by <xliff:g id="app_name">%1$s</xliff:g>.</string>
<!-- Shown for an application when it doesn't require any permission grants. -->
<string name="no_permissions">No permissions required</string>
- <!-- When installing an application, the less-dangerous permissions are hidden. If the user showed those, this is the text to hide them again. -->
- <string name="perms_hide"><b>Hide</b></string>
- <!-- When installing an application, the less-dangerous permissions are hidden. This is the text to show those. -->
- <string name="perms_show_all"><b>Show all</b></string>
<!-- USB storage dialog strings -->
<!-- This is the title for the activity's window. -->
@@ -3475,4 +3560,12 @@
<!-- STK setup Call -->
<string name="SetupCallDefault">Accept call?</string>
+ <!-- Title for a button to choose the currently selected activity
+ as the default in the activity resolver. [CHAR LIMIT=25] -->
+ <string name="activity_resolver_use_always">Use Always</string>
+
+ <!-- Title for a button to choose the currently selected activity
+ from the activity resolver to use just this once. [CHAR LIMIT=25] -->
+ <string name="activity_resolver_use_once">Just Once</string>
+
</resources>
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 71738add9f29..77dbaa57206d 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -174,6 +174,13 @@ please see themes_device_defaults.xml.
<item name="windowActionModeOverlay">false</item>
<item name="windowCloseOnTouchOutside">false</item>
+ <!-- Define these here; ContextThemeWrappers around themes that define them should
+ always clear these values. -->
+ <item name="windowFixedWidthMajor">0dp</item>
+ <item name="windowFixedWidthMinor">0dp</item>
+ <item name="windowFixedHeightMajor">0dp</item>
+ <item name="windowFixedHeightMinor">0dp</item>
+
<!-- Dialog attributes -->
<item name="alertDialogStyle">@android:style/AlertDialog</item>
<item name="dialogTheme">@android:style/Theme.Dialog</item>
diff --git a/core/tests/coretests/res/raw/net_dev_typical b/core/tests/coretests/res/raw/net_dev_typical
deleted file mode 100644
index 290bf03eb9b4..000000000000
--- a/core/tests/coretests/res/raw/net_dev_typical
+++ /dev/null
@@ -1,8 +0,0 @@
-Inter-| Receive | Transmit
- face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
- lo: 8308 116 0 0 0 0 0 0 8308 116 0 0 0 0 0 0
-rmnet0: 1507570 2205 0 0 0 0 0 0 489339 2237 0 0 0 0 0 0
- ifb0: 52454 151 0 151 0 0 0 0 0 0 0 0 0 0 0 0
- ifb1: 52454 151 0 151 0 0 0 0 0 0 0 0 0 0 0 0
- sit0: 0 0 0 0 0 0 0 0 0 0 148 0 0 0 0 0
-ip6tnl0: 0 0 0 0 0 0 0 0 0 0 151 151 0 0 0 0
diff --git a/core/tests/coretests/res/raw/xt_qtaguid_iface_fmt_typical b/core/tests/coretests/res/raw/xt_qtaguid_iface_fmt_typical
new file mode 100644
index 000000000000..656d5bb82da4
--- /dev/null
+++ b/core/tests/coretests/res/raw/xt_qtaguid_iface_fmt_typical
@@ -0,0 +1,4 @@
+ifname total_skb_rx_bytes total_skb_rx_packets total_skb_tx_bytes total_skb_tx_packets
+rmnet2 4968 35 3081 39
+rmnet1 11153922 8051 190226 2468
+rmnet0 6824 16 5692 10
diff --git a/core/tests/coretests/src/android/content/SyncStorageEngineTest.java b/core/tests/coretests/src/android/content/SyncStorageEngineTest.java
index 96f313a1e29f..2add623970c6 100644
--- a/core/tests/coretests/src/android/content/SyncStorageEngineTest.java
+++ b/core/tests/coretests/src/android/content/SyncStorageEngineTest.java
@@ -20,7 +20,6 @@ import com.android.internal.os.AtomicFile;
import android.accounts.Account;
import android.os.Bundle;
-import android.os.Debug;
import android.test.AndroidTestCase;
import android.test.RenamingDelegatingContext;
import android.test.mock.MockContentResolver;
@@ -57,7 +56,8 @@ public class SyncStorageEngineTest extends AndroidTestCase {
long time0 = 1000;
long historyId = engine.insertStartSyncEvent(
- account, 0, authority, time0, SyncStorageEngine.SOURCE_LOCAL);
+ account, 0, authority, time0, SyncStorageEngine.SOURCE_LOCAL,
+ false /* initialization */);
long time1 = time0 + SyncStorageEngine.MILLIS_IN_4WEEKS * 2;
engine.stopSyncEvent(historyId, time1 - time0, "yay", 0, 0);
}
diff --git a/core/tests/coretests/src/com/android/internal/net/NetworkStatsFactoryTest.java b/core/tests/coretests/src/com/android/internal/net/NetworkStatsFactoryTest.java
index b9944832b358..d3dd01a2401f 100644
--- a/core/tests/coretests/src/com/android/internal/net/NetworkStatsFactoryTest.java
+++ b/core/tests/coretests/src/com/android/internal/net/NetworkStatsFactoryTest.java
@@ -81,58 +81,6 @@ public class NetworkStatsFactoryTest extends AndroidTestCase {
assertStatsEntry(stats, "rmnet2", 10001, SET_DEFAULT, 0x0, 1125899906842624L, 984L);
}
- public void testNetworkStatsSummary() throws Exception {
- stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
-
- final NetworkStats stats = mFactory.readNetworkStatsSummary();
- assertEquals(6, stats.size());
- assertStatsEntry(stats, "lo", UID_ALL, SET_ALL, TAG_NONE, 8308L, 8308L);
- assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 1507570L, 489339L);
- assertStatsEntry(stats, "ifb0", UID_ALL, SET_ALL, TAG_NONE, 52454L, 0L);
- assertStatsEntry(stats, "ifb1", UID_ALL, SET_ALL, TAG_NONE, 52454L, 0L);
- assertStatsEntry(stats, "sit0", UID_ALL, SET_ALL, TAG_NONE, 0L, 0L);
- assertStatsEntry(stats, "ip6tnl0", UID_ALL, SET_ALL, TAG_NONE, 0L, 0L);
- }
-
- public void testNetworkStatsSummaryDown() throws Exception {
- stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
- stageLong(1L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/active"));
- stageLong(1024L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/rx_bytes"));
- stageLong(128L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/rx_packets"));
- stageLong(2048L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/tx_bytes"));
- stageLong(256L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/tx_packets"));
-
- final NetworkStats stats = mFactory.readNetworkStatsSummary();
- assertEquals(7, stats.size());
- assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 1507570L, 489339L);
- assertStatsEntry(stats, "wlan0", UID_ALL, SET_ALL, TAG_NONE, 1024L, 2048L);
- }
-
- public void testNetworkStatsCombined() throws Exception {
- stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
- stageLong(1L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/active"));
- stageLong(10L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_bytes"));
- stageLong(20L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_packets"));
- stageLong(30L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_bytes"));
- stageLong(40L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_packets"));
-
- final NetworkStats stats = mFactory.readNetworkStatsSummary();
- assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 1507570L + 10L,
- 2205L + 20L, 489339L + 30L, 2237L + 40L);
- }
-
- public void testNetworkStatsCombinedInactive() throws Exception {
- stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
- stageLong(0L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/active"));
- stageLong(10L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_bytes"));
- stageLong(20L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_packets"));
- stageLong(30L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_bytes"));
- stageLong(40L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_packets"));
-
- final NetworkStats stats = mFactory.readNetworkStatsSummary();
- assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 10L, 20L, 30L, 40L);
- }
-
public void testKernelTags() throws Exception {
assertEquals(0, kernelToTag("0x0000000000000000"));
assertEquals(0x32, kernelToTag("0x0000003200000000"));
@@ -159,13 +107,24 @@ public class NetworkStatsFactoryTest extends AndroidTestCase {
public void testNetworkStatsSingle() throws Exception {
stageFile(R.raw.xt_qtaguid_iface_typical, new File(mTestProc, "net/xt_qtaguid/iface_stat_all"));
- final NetworkStats stats = mFactory.readNetworkStatsSummary();
+ final NetworkStats stats = mFactory.readNetworkStatsSummaryDev();
assertEquals(6, stats.size());
assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 2112L, 24L, 700L, 10L);
assertStatsEntry(stats, "test1", UID_ALL, SET_ALL, TAG_NONE, 6L, 8L, 10L, 12L);
assertStatsEntry(stats, "test2", UID_ALL, SET_ALL, TAG_NONE, 1L, 2L, 3L, 4L);
}
+ public void testNetworkStatsXt() throws Exception {
+ stageFile(R.raw.xt_qtaguid_iface_fmt_typical,
+ new File(mTestProc, "net/xt_qtaguid/iface_stat_fmt"));
+
+ final NetworkStats stats = mFactory.readNetworkStatsSummaryXt();
+ assertEquals(3, stats.size());
+ assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 6824L, 16L, 5692L, 10L);
+ assertStatsEntry(stats, "rmnet1", UID_ALL, SET_ALL, TAG_NONE, 11153922L, 8051L, 190226L, 2468L);
+ assertStatsEntry(stats, "rmnet2", UID_ALL, SET_ALL, TAG_NONE, 4968L, 35L, 3081L, 39L);
+ }
+
/**
* Copy a {@link Resources#openRawResource(int)} into {@link File} for
* testing purposes.
diff --git a/data/fonts/Android.mk b/data/fonts/Android.mk
index 85a77d6e6f3d..8ad15b6bc01c 100644
--- a/data/fonts/Android.mk
+++ b/data/fonts/Android.mk
@@ -125,7 +125,7 @@ font_src_files := \
Roboto-Italic.ttf \
Roboto-BoldItalic.ttf \
DroidNaskh-Regular.ttf \
- DroidNaskh-Regular-Shift.ttf \
+ DroidNaskh-Regular-SystemUI.ttf \
DroidSansHebrew-Regular.ttf \
DroidSansHebrew-Bold.ttf \
DroidSansThai.ttf \
diff --git a/data/fonts/DroidNaskh-Regular-Shift.ttf b/data/fonts/DroidNaskh-Regular-Shift.ttf
deleted file mode 100644
index de475ca6afb7..000000000000
--- a/data/fonts/DroidNaskh-Regular-Shift.ttf
+++ /dev/null
Binary files differ
diff --git a/data/fonts/DroidNaskh-Regular-SystemUI.ttf b/data/fonts/DroidNaskh-Regular-SystemUI.ttf
new file mode 100755
index 000000000000..5818b4969efd
--- /dev/null
+++ b/data/fonts/DroidNaskh-Regular-SystemUI.ttf
Binary files differ
diff --git a/data/fonts/fallback_fonts-ja.xml b/data/fonts/fallback_fonts-ja.xml
index db998d331712..a182e31894c8 100644
--- a/data/fonts/fallback_fonts-ja.xml
+++ b/data/fonts/fallback_fonts-ja.xml
@@ -34,7 +34,7 @@
<familyset>
<family>
<fileset>
- <file>DroidNaskh-Regular-Shift.ttf</file>
+ <file>DroidNaskh-Regular-SystemUI.ttf</file>
</fileset>
</family>
<family>
diff --git a/data/fonts/fallback_fonts.xml b/data/fonts/fallback_fonts.xml
index a4b5212aea48..69d223e3de3d 100644
--- a/data/fonts/fallback_fonts.xml
+++ b/data/fonts/fallback_fonts.xml
@@ -34,7 +34,7 @@
<familyset>
<family>
<fileset>
- <file>DroidNaskh-Regular-Shift.ttf</file>
+ <file>DroidNaskh-Regular-SystemUI.ttf</file>
</fileset>
</family>
<family>
diff --git a/data/fonts/fonts.mk b/data/fonts/fonts.mk
index 702b06967f5b..0eec616df0ed 100644
--- a/data/fonts/fonts.mk
+++ b/data/fonts/fonts.mk
@@ -25,7 +25,7 @@ PRODUCT_PACKAGES := \
Roboto-Italic.ttf \
Roboto-BoldItalic.ttf \
DroidNaskh-Regular.ttf \
- DroidNaskh-Regular-Shift.ttf \
+ DroidNaskh-Regular-SystemUI.ttf \
DroidSansHebrew-Regular.ttf \
DroidSansHebrew-Bold.ttf \
DroidSansThai.ttf \
diff --git a/graphics/java/android/graphics/ImageFormat.java b/graphics/java/android/graphics/ImageFormat.java
index b3a8fd7ba87c..f6b747a0af83 100644
--- a/graphics/java/android/graphics/ImageFormat.java
+++ b/graphics/java/android/graphics/ImageFormat.java
@@ -48,14 +48,26 @@ public class ImageFormat {
* </p>
*
* <pre> y_size = stride * height
- * c_size = ALIGN(stride/2, 16) * height/2
+ * c_stride = ALIGN(stride/2, 16)
+ * c_size = c_stride * height/2
* size = y_size + c_size * 2
* cr_offset = y_size
* cb_offset = y_size + c_size</pre>
*
- * This format is guaranteed to be supported for camera preview images since
+ * <p>This format is guaranteed to be supported for camera preview images since
* API level 12; for earlier API versions, check
* {@link android.hardware.Camera.Parameters#getSupportedPreviewFormats()}.
+ *
+ * <p>Note that for camera preview callback use (see
+ * {@link android.hardware.Camera#setPreviewCallback}), the
+ * <var>stride</var> value is the smallest possible; that is, it is equal
+ * to:
+ *
+ * <pre>stride = ALIGN(width, 16)</pre>
+ *
+ * @see android.hardware.Camera.Parameters#setPreviewCallback
+ * @see android.hardware.Camera.Parameters#setPreviewFormat
+ * @see android.hardware.Camera.Parameters#getSupportedPreviewFormats
* </p>
*/
public static final int YV12 = 0x32315659;
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index f68f9dce8eff..f9b8a5f066dd 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -1055,6 +1055,7 @@ public class Paint {
* Get the text Locale.
*
* @return the paint's Locale used for drawing text, never null.
+ * @hide
*/
public Locale getTextLocale() {
return mLocale;
@@ -1085,6 +1086,7 @@ public class Paint {
* job in certain ambiguous cases
*
* @param locale the paint's locale value for drawing text, must not be null.
+ * @hide
*/
public void setTextLocale(Locale locale) {
if (locale == null) {
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index 6193ca72baf6..5f74c019006c 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -297,6 +297,7 @@ public abstract class Drawable {
/**
* Implement this interface if you want to create an drawable that is RTL aware
+ * @hide
*/
public static interface Callback2 extends Callback {
/**
@@ -384,8 +385,7 @@ public abstract class Drawable {
}
/**
- * Use the current {@link android.graphics.drawable.Drawable.Callback2} implementation to get
- * the resolved layout direction of this Drawable.
+ * Get the resolved layout direction of this Drawable.
*/
public int getResolvedLayoutDirectionSelf() {
final Callback callback = getCallback();
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index 92207b1b63c2..f6ca77c5b7d8 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -184,6 +184,11 @@ void DisplayList::clearResources() {
}
mPaths.clear();
+ for (size_t i = 0; i < mSourcePaths.size(); i++) {
+ caches.resourceCache.decrementRefcount(mSourcePaths.itemAt(i));
+ }
+ mSourcePaths.clear();
+
for (size_t i = 0; i < mMatrices.size(); i++) {
delete mMatrices.itemAt(i);
}
@@ -242,6 +247,12 @@ void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorde
mPaths.add(paths.itemAt(i));
}
+ const SortedVector<SkPath*> &sourcePaths = recorder.getSourcePaths();
+ for (size_t i = 0; i < sourcePaths.size(); i++) {
+ mSourcePaths.add(sourcePaths.itemAt(i));
+ caches.resourceCache.incrementRefcount(sourcePaths.itemAt(i));
+ }
+
const Vector<SkMatrix*> &matrices = recorder.getMatrices();
for (size_t i = 0; i < matrices.size(); i++) {
mMatrices.add(matrices.itemAt(i));
@@ -1273,6 +1284,11 @@ void DisplayListRenderer::reset() {
mShaders.clear();
mShaderMap.clear();
+ for (size_t i = 0; i < mSourcePaths.size(); i++) {
+ caches.resourceCache.decrementRefcount(mSourcePaths.itemAt(i));
+ }
+ mSourcePaths.clear();
+
mPaints.clear();
mPaintMap.clear();
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index a7fc23a04c0a..4edefd552520 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -487,6 +487,7 @@ private:
Vector<SkPaint*> mPaints;
Vector<SkPath*> mPaths;
+ SortedVector<SkPath*> mSourcePaths;
Vector<SkMatrix*> mMatrices;
Vector<SkiaShader*> mShaders;
@@ -634,6 +635,10 @@ public:
return mPaths;
}
+ const SortedVector<SkPath*>& getSourcePaths() const {
+ return mSourcePaths;
+ }
+
const Vector<SkMatrix*>& getMatrices() const {
return mMatrices;
}
@@ -750,6 +755,10 @@ private:
mPathMap.replaceValueFor(path, pathCopy);
mPaths.add(pathCopy);
}
+ if (mSourcePaths.indexOf(path) < 0) {
+ Caches::getInstance().resourceCache.incrementRefcount(path);
+ mSourcePaths.add(path);
+ }
addInt((int) pathCopy);
}
@@ -830,6 +839,8 @@ private:
Vector<SkPath*> mPaths;
DefaultKeyedVector<SkPath*, SkPath*> mPathMap;
+ SortedVector<SkPath*> mSourcePaths;
+
Vector<SkiaShader*> mShaders;
DefaultKeyedVector<SkiaShader*, SkiaShader*> mShaderMap;
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 542d2df49196..2174d0653bba 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -40,6 +40,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
+import android.content.res.Configuration;
import android.database.ContentObserver;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
@@ -371,6 +372,8 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
// Used to play ringtones outside system_server
private volatile IRingtonePlayer mRingtonePlayer;
+ private int mDeviceOrientation = Configuration.ORIENTATION_UNDEFINED;
+
///////////////////////////////////////////////////////////////////////////
// Construction
///////////////////////////////////////////////////////////////////////////
@@ -428,6 +431,16 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
intentFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
+
+ // Register a configuration change listener only if requested by system properties
+ // to monitor orientation changes (off by default)
+ if (SystemProperties.getBoolean("ro.audio.monitorOrientation", false)) {
+ Log.v(TAG, "monitoring device orientation");
+ intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
+ // initialize orientation in AudioSystem
+ setOrientationForAudioSystem();
+ }
+
context.registerReceiver(mReceiver, intentFilter);
// Register for package removal intent broadcasts for media button receiver persistence
@@ -2778,6 +2791,11 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
// Restore master volume
restoreMasterVolume();
+ // Reset device orientation (if monitored for this device)
+ if (SystemProperties.getBoolean("ro.audio.monitorOrientation", false)) {
+ setOrientationForAudioSystem();
+ }
+
// indicate the end of reconfiguration phase to audio HAL
AudioSystem.setParameters("restarting=false");
break;
@@ -3165,6 +3183,8 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
AudioSystem.setParameters("screen_state=on");
} else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
AudioSystem.setParameters("screen_state=off");
+ } else if (action.equalsIgnoreCase(Intent.ACTION_CONFIGURATION_CHANGED)) {
+ handleConfigurationChanged(context);
}
}
}
@@ -4282,6 +4302,52 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
}
}
+ //==========================================================================================
+ // Device orientation
+ //==========================================================================================
+ /**
+ * Handles device configuration changes that may map to a change in the orientation.
+ * This feature is optional, and is defined by the definition and value of the
+ * "ro.audio.monitorOrientation" system property.
+ */
+ private void handleConfigurationChanged(Context context) {
+ try {
+ // reading new orientation "safely" (i.e. under try catch) in case anything
+ // goes wrong when obtaining resources and configuration
+ int newOrientation = context.getResources().getConfiguration().orientation;
+ if (newOrientation != mDeviceOrientation) {
+ mDeviceOrientation = newOrientation;
+ setOrientationForAudioSystem();
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "Error retrieving device orientation: " + e);
+ }
+ }
+
+ private void setOrientationForAudioSystem() {
+ switch (mDeviceOrientation) {
+ case Configuration.ORIENTATION_LANDSCAPE:
+ //Log.i(TAG, "orientation is landscape");
+ AudioSystem.setParameters("orientation=landscape");
+ break;
+ case Configuration.ORIENTATION_PORTRAIT:
+ //Log.i(TAG, "orientation is portrait");
+ AudioSystem.setParameters("orientation=portrait");
+ break;
+ case Configuration.ORIENTATION_SQUARE:
+ //Log.i(TAG, "orientation is square");
+ AudioSystem.setParameters("orientation=square");
+ break;
+ case Configuration.ORIENTATION_UNDEFINED:
+ //Log.i(TAG, "orientation is undefined");
+ AudioSystem.setParameters("orientation=undefined");
+ break;
+ default:
+ Log.e(TAG, "Unknown orientation");
+ }
+ }
+
+
@Override
public void setRingtonePlayer(IRingtonePlayer player) {
mContext.enforceCallingOrSelfPermission(REMOTE_AUDIO_PLAYBACK, null);
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index bbdbf2e19922..1dbd48ef109d 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -17,6 +17,7 @@
package android.media;
import android.media.MediaCrypto;
+import android.media.MediaFormat;
import android.view.Surface;
import java.nio.ByteBuffer;
import java.util.Map;
@@ -90,14 +91,14 @@ import java.util.Map;
* Most formats also require the actual data to be prefixed by a number
* of buffers containing setup data, or codec specific data, i.e. the
* first few buffers submitted to the codec object after starting it must
- * be codec specific data marked as such using the flag {@link #FLAG_CODECCONFIG}
+ * be codec specific data marked as such using the flag {@link #BUFFER_FLAG_CODEC_CONFIG}
* in a call to {@link #queueInputBuffer}.
*
* Once the client reaches the end of the input data it signals the end of
- * the input stream by specifying a flag of {@link #FLAG_EOS} in the call to
+ * the input stream by specifying a flag of {@link #BUFFER_FLAG_END_OF_STREAM} in the call to
* {@link #queueInputBuffer}. The codec will continue to return output buffers
* until it eventually signals the end of the output stream by specifying
- * the same flag ({@link #FLAG_EOS}) on the BufferInfo returned in
+ * the same flag ({@link #BUFFER_FLAG_END_OF_STREAM}) on the BufferInfo returned in
* {@link #dequeueOutputBuffer}.
*
* In order to start decoding data that's not adjacent to previously submitted
@@ -109,42 +110,12 @@ import java.util.Map;
* flush does not support format discontinuities,
* for this a full stop(), configure(), start() cycle is necessary.
*
- * The format of the media data is specified as string/value pairs represented
- * as a Map<String, Object>.<p>
- *
- * Fields common to all formats:
- *
- * <table>
- * <tr><th>Name</th><th>Value Type</th><th>Description</th></tr>
- * <tr><td>mime</td><td>String</td><td>The type of the format.</td></tr>
- * <tr><td>max-input-size</td><td>Integer</td><td>optional, maximum size of a buffer of input data</td></tr>
- * <tr><td>bitrate</td><td>Integer</td><td><b>encoder-only</b>, desired bitrate in bits/second</td></tr>
- * </table>
- *
- * Video formats have the following fields:
- * <table>
- * <tr><th>Name</th><th>Value Type</th><th>Description</th></tr>
- * <tr><td>width</td><td>Integer</td><td></td></tr>
- * <tr><td>height</td><td>Integer</td><td></td></tr>
- * <tr><td>color-format</td><td>Integer</td><td><b>encoder-only</b></td></tr>
- * <tr><td>frame-rate</td><td>Integer or Float</td><td><b>encoder-only</b></td></tr>
- * <tr><td>i-frame-interval</td><td>Integer</td><td><b>encoder-only</b></td></tr>
- * <tr><td>stride</td><td>Integer</td><td><b>encoder-only</b>, optional, defaults to width</td></tr>
- * <tr><td>slice-height</td><td>Integer</td><td><b>encoder-only</b>, optional, defaults to height</td></tr>
- * </table>
- *
- * Audio formats have the following fields:
- * <table>
- * <tr><th>Name</th><th>Value Type</th><th>Description</th></tr>
- * <tr><td>channel-count</td><td>Integer</td><td></td></tr>
- * <tr><td>sample-rate</td><td>Integer</td><td></td></tr>
- * </table>
- *
-*/
+ */
final public class MediaCodec {
- /** Per buffer metadata includes an offset and size specifying
- the range of valid data in the associated codec buffer.
- */
+ /**
+ * Per buffer metadata includes an offset and size specifying
+ * the range of valid data in the associated codec buffer.
+ */
public final static class BufferInfo {
public void set(
int newOffset, int newSize, long newTimeUs, int newFlags) {
@@ -163,45 +134,46 @@ final public class MediaCodec {
// The follow flag constants MUST stay in sync with their equivalents
// in MediaCodec.h !
- /** This indicates that the buffer marked as such contains the data
- for a sync frame.
- */
- public static final int FLAG_SYNCFRAME = 1;
-
- /** This indicated that the buffer marked as such contains codec
- initialization / codec specific data instead of media data.
- */
- public static final int FLAG_CODECCONFIG = 2;
+ /**
+ * This indicates that the buffer marked as such contains the data
+ * for a sync frame.
+ */
+ public static final int BUFFER_FLAG_SYNC_FRAME = 1;
- /** This signals the end of stream, i.e. no buffers will be available
- after this, unless of course, {@link #flush} follows.
- */
- public static final int FLAG_EOS = 4;
+ /**
+ * This indicated that the buffer marked as such contains codec
+ * initialization / codec specific data instead of media data.
+ */
+ public static final int BUFFER_FLAG_CODEC_CONFIG = 2;
- // The following mode constants MUST stay in sync with their equivalents
- // in media/hardware/CryptoAPI.h !
- public static final int MODE_UNENCRYPTED = 0;
- public static final int MODE_AES_CTR = 1;
+ /**
+ * This signals the end of stream, i.e. no buffers will be available
+ * after this, unless of course, {@link #flush} follows.
+ */
+ public static final int BUFFER_FLAG_END_OF_STREAM = 4;
- /** Instantiate a decoder supporting input data of the given mime type.
- * @param type The mime type of the input data.
- */
+ /**
+ * Instantiate a decoder supporting input data of the given mime type.
+ * @param type The mime type of the input data.
+ */
public static MediaCodec createDecoderByType(String type) {
return new MediaCodec(type, true /* nameIsType */, false /* encoder */);
}
- /** Instantiate an encoder supporting output data of the given mime type.
- * @param type The desired mime type of the output data.
- */
+ /**
+ * Instantiate an encoder supporting output data of the given mime type.
+ * @param type The desired mime type of the output data.
+ */
public static MediaCodec createEncoderByType(String type) {
return new MediaCodec(type, true /* nameIsType */, true /* encoder */);
}
- /** If you know the exact name of the component you want to instantiate
- use this method to instantiate it. Use with caution.
- Likely to be used with information obtained from {@link android.media.MediaCodecList}
- @param name The name of the codec to be instantiated.
- */
+ /**
+ * If you know the exact name of the component you want to instantiate
+ * use this method to instantiate it. Use with caution.
+ * Likely to be used with information obtained from {@link android.media.MediaCodecList}
+ * @param name The name of the codec to be instantiated.
+ */
public static MediaCodec createByCodecName(String name) {
return new MediaCodec(
name, false /* nameIsType */, false /* unused */);
@@ -217,38 +189,44 @@ final public class MediaCodec {
native_finalize();
}
- // Make sure you call this when you're done to free up any opened
- // component instance instead of relying on the garbage collector
- // to do this for you at some point in the future.
+ /**
+ * Make sure you call this when you're done to free up any opened
+ * component instance instead of relying on the garbage collector
+ * to do this for you at some point in the future.
+ */
public native final void release();
- /** If this codec is to be used as an encoder, pass this flag.
- */
- public static int CONFIGURE_FLAG_ENCODE = 1;
+ /**
+ * If this codec is to be used as an encoder, pass this flag.
+ */
+ public static final int CONFIGURE_FLAG_ENCODE = 1;
- /** Configures a component.
+ /**
+ * Configures a component.
*
- * @param format The format of the input data (decoder) or the desired
- * format of the output data (encoder).
- * @param surface Specify a surface on which to render the output of this
- * decoder.
- * @param crypto Specify a crypto object to facilitate secure decryption
- * of the media data.
- * @param flags Specify {@link #CONFIGURE_FLAG_ENCODE} to configure the
- * component as an encoder.
- */
+ * @param format The format of the input data (decoder) or the desired
+ * format of the output data (encoder).
+ * @param surface Specify a surface on which to render the output of this
+ * decoder.
+ * @param crypto Specify a crypto object to facilitate secure decryption
+ * of the media data.
+ * @param flags Specify {@link #CONFIGURE_FLAG_ENCODE} to configure the
+ * component as an encoder.
+ */
public void configure(
- Map<String, Object> format,
+ MediaFormat format,
Surface surface, MediaCrypto crypto, int flags) {
+ Map<String, Object> formatMap = format.getMap();
+
String[] keys = null;
Object[] values = null;
if (format != null) {
- keys = new String[format.size()];
- values = new Object[format.size()];
+ keys = new String[formatMap.size()];
+ values = new Object[formatMap.size()];
int i = 0;
- for (Map.Entry<String, Object> entry: format.entrySet()) {
+ for (Map.Entry<String, Object> entry: formatMap.entrySet()) {
keys[i] = entry.getKey();
values[i] = entry.getValue();
++i;
@@ -262,22 +240,25 @@ final public class MediaCodec {
String[] keys, Object[] values,
Surface surface, MediaCrypto crypto, int flags);
- /** After successfully configuring the component, call start. On return
- * you can query the component for its input/output buffers.
- */
+ /**
+ * After successfully configuring the component, call start. On return
+ * you can query the component for its input/output buffers.
+ */
public native final void start();
- /** Finish the decode/encode session, note that the codec instance
- * remains active and ready to be {@link #start}ed again.
- * To ensure that it is available to other client call {@link #release}
- * and don't just rely on garbage collection to eventually do this for you.
- */
+ /**
+ * Finish the decode/encode session, note that the codec instance
+ * remains active and ready to be {@link #start}ed again.
+ * To ensure that it is available to other client call {@link #release}
+ * and don't just rely on garbage collection to eventually do this for you.
+ */
public native final void stop();
- /** Flush both input and output ports of the component, all indices
- * previously returned in calls to {@link #dequeueInputBuffer} and
- * {@link #dequeueOutputBuffer} become invalid.
- */
+ /**
+ * Flush both input and output ports of the component, all indices
+ * previously returned in calls to {@link #dequeueInputBuffer} and
+ * {@link #dequeueOutputBuffer} become invalid.
+ */
public native final void flush();
public final static class CryptoException extends RuntimeException {
@@ -293,46 +274,55 @@ final public class MediaCodec {
private int mErrorCode;
}
- /** After filling a range of the input buffer at the specified index
- * submit it to the component.
+ /**
+ * After filling a range of the input buffer at the specified index
+ * submit it to the component.
*
- * Many decoders require the actual compressed data stream to be
- * preceded by "codec specific data", i.e. setup data used to initialize
- * the codec such as PPS/SPS in the case of AVC video or code tables
- * in the case of vorbis audio.
- * The class {@link android.media.MediaExtractor} provides codec
- * specific data as part of
- * the returned track format in entries named "csd-0", "csd-1" ...
+ * Many decoders require the actual compressed data stream to be
+ * preceded by "codec specific data", i.e. setup data used to initialize
+ * the codec such as PPS/SPS in the case of AVC video or code tables
+ * in the case of vorbis audio.
+ * The class {@link android.media.MediaExtractor} provides codec
+ * specific data as part of
+ * the returned track format in entries named "csd-0", "csd-1" ...
*
- * These buffers should be submitted using the flag {@link #FLAG_CODECCONFIG}.
+ * These buffers should be submitted using the flag {@link #BUFFER_FLAG_CODEC_CONFIG}.
*
- * To indicate that this is the final piece of input data (or rather that
- * no more input data follows unless the decoder is subsequently flushed)
- * specify the flag {@link #FLAG_EOS}.
+ * To indicate that this is the final piece of input data (or rather that
+ * no more input data follows unless the decoder is subsequently flushed)
+ * specify the flag {@link #BUFFER_FLAG_END_OF_STREAM}.
*
- * @param index The index of a client-owned input buffer previously returned
- * in a call to {@link #dequeueInputBuffer}.
- * @param offset The byte offset into the input buffer at which the data starts.
- * @param size The number of bytes of valid input data.
- * @param presentationTimeUs The time at which this buffer should be rendered.
- * @param flags A bitmask of flags {@link #FLAG_SYNCFRAME},
- * {@link #FLAG_CODECCONFIG} or {@link #FLAG_EOS}.
- * @throws CryptoException if a crypto object has been specified in
- * {@link #configure}
- */
+ * @param index The index of a client-owned input buffer previously returned
+ * in a call to {@link #dequeueInputBuffer}.
+ * @param offset The byte offset into the input buffer at which the data starts.
+ * @param size The number of bytes of valid input data.
+ * @param presentationTimeUs The time at which this buffer should be rendered.
+ * @param flags A bitmask of flags {@link #BUFFER_FLAG_SYNC_FRAME},
+ * {@link #BUFFER_FLAG_CODEC_CONFIG} or {@link #BUFFER_FLAG_END_OF_STREAM}.
+ * @throws CryptoException if a crypto object has been specified in
+ * {@link #configure}
+ */
public native final void queueInputBuffer(
int index,
int offset, int size, long presentationTimeUs, int flags)
throws CryptoException;
- /** Metadata describing the structure of a (at least partially) encrypted
- * input sample.
- * A buffer's data is considered to be partitioned into "subSamples",
- * each subSample starts with a (potentially empty) run of plain,
- * unencrypted bytes followed by a (also potentially empty) run of
- * encrypted bytes.
- * numBytesOfClearData can be null to indicate that all data is encrypted.
- */
+ // The following mode constants MUST stay in sync with their equivalents
+ // in media/hardware/CryptoAPI.h !
+ public static final int CRYPTO_MODE_UNENCRYPTED = 0;
+ public static final int CRYPTO_MODE_AES_CTR = 1;
+
+ /**
+ * Metadata describing the structure of a (at least partially) encrypted
+ * input sample.
+ * A buffer's data is considered to be partitioned into "subSamples",
+ * each subSample starts with a (potentially empty) run of plain,
+ * unencrypted bytes followed by a (also potentially empty) run of
+ * encrypted bytes.
+ * numBytesOfClearData can be null to indicate that all data is encrypted.
+ * This information encapsulates per-sample metadata as outlined in
+ * ISO/IEC FDIS 23001-7:2011 "Common encryption in ISO base media file format files".
+ */
public final static class CryptoInfo {
public void set(
int newNumSubSamples,
@@ -349,28 +339,44 @@ final public class MediaCodec {
mode = newMode;
}
- /** The number of subSamples that make up the buffer's contents. */
+ /**
+ * The number of subSamples that make up the buffer's contents.
+ */
public int numSubSamples;
- /** The number of leading unencrypted bytes in each subSample. */
+ /**
+ * The number of leading unencrypted bytes in each subSample.
+ */
public int[] numBytesOfClearData;
- /** The number of trailing encrypted bytes in each subSample. */
+ /**
+ * The number of trailing encrypted bytes in each subSample.
+ */
public int[] numBytesOfEncryptedData;
- /** A 16-byte opaque key */
+ /**
+ * A 16-byte opaque key
+ */
public byte[] key;
- /** A 16-byte initialization vector */
+ /**
+ * A 16-byte initialization vector
+ */
public byte[] iv;
- /** The type of encryption that has been applied */
+ /**
+ * The type of encryption that has been applied,
+ * see {@link #CRYPTO_MODE_UNENCRYPTED} and {@link #CRYPTO_MODE_AES_CTR}.
+ */
public int mode;
};
- /** Similar to {@link #queueInputBuffer} but submits a buffer that is
- * potentially encrypted.
- * @param index The index of a client-owned input buffer previously returned
- * in a call to {@link #dequeueInputBuffer}.
- * @param offset The byte offset into the input buffer at which the data starts.
- * @param presentationTimeUs The time at which this buffer should be rendered.
- * @param flags A bitmask of flags {@link #FLAG_SYNCFRAME},
- * {@link #FLAG_CODECCONFIG} or {@link #FLAG_EOS}.
+ /**
+ * Similar to {@link #queueInputBuffer} but submits a buffer that is
+ * potentially encrypted.
+ * @param index The index of a client-owned input buffer previously returned
+ * in a call to {@link #dequeueInputBuffer}.
+ * @param offset The byte offset into the input buffer at which the data starts.
+ * @param info Metadata required to facilitate decryption, the object can be
+ * reused immediately after this call returns.
+ * @param presentationTimeUs The time at which this buffer should be rendered.
+ * @param flags A bitmask of flags {@link #BUFFER_FLAG_SYNC_FRAME},
+ * {@link #BUFFER_FLAG_CODEC_CONFIG} or {@link #BUFFER_FLAG_END_OF_STREAM}.
*/
public native final void queueSecureInputBuffer(
int index,
@@ -379,80 +385,97 @@ final public class MediaCodec {
long presentationTimeUs,
int flags) throws CryptoException;
- /** Returns the index of an input buffer to be filled with valid data
- * or -1 if no such buffer is currently available.
- * This method will return immediately if timeoutUs == 0, wait indefinitely
- * for the availability of an input buffer if timeoutUs &lt; 0 or wait up
- * to "timeoutUs" microseconds if timeoutUs &gt; 0.
- * @param timeoutUs The timeout in microseconds, a negative timeout indicates "infinite".
- */
+ /**
+ * Returns the index of an input buffer to be filled with valid data
+ * or -1 if no such buffer is currently available.
+ * This method will return immediately if timeoutUs == 0, wait indefinitely
+ * for the availability of an input buffer if timeoutUs &lt; 0 or wait up
+ * to "timeoutUs" microseconds if timeoutUs &gt; 0.
+ * @param timeoutUs The timeout in microseconds, a negative timeout indicates "infinite".
+ */
public native final int dequeueInputBuffer(long timeoutUs);
- /** If a non-negative timeout had been specified in the call
+ /**
+ * If a non-negative timeout had been specified in the call
* to {@link #dequeueOutputBuffer}, indicates that the call timed out.
- */
+ */
public static final int INFO_TRY_AGAIN_LATER = -1;
- /** The output format has changed, subsequent data will follow the new
- * format. {@link #getOutputFormat} returns the new format.
- */
+ /**
+ * The output format has changed, subsequent data will follow the new
+ * format. {@link #getOutputFormat} returns the new format.
+ */
public static final int INFO_OUTPUT_FORMAT_CHANGED = -2;
- /** The output buffers have changed, the client must refer to the new
- * set of output buffers returned by {@link #getOutputBuffers} from
- * this point on.
- */
+ /**
+ * The output buffers have changed, the client must refer to the new
+ * set of output buffers returned by {@link #getOutputBuffers} from
+ * this point on.
+ */
public static final int INFO_OUTPUT_BUFFERS_CHANGED = -3;
- /** Dequeue an output buffer, block at most "timeoutUs" microseconds.
- * Returns the index of an output buffer that has been successfully
- * decoded or one of the INFO_* constants below.
- * @param info Will be filled with buffer meta data.
- * @param timeoutUs The timeout in microseconds, a negative timeout indicates "infinite".
- */
+ /**
+ * Dequeue an output buffer, block at most "timeoutUs" microseconds.
+ * Returns the index of an output buffer that has been successfully
+ * decoded or one of the INFO_* constants below.
+ * @param info Will be filled with buffer meta data.
+ * @param timeoutUs The timeout in microseconds, a negative timeout indicates "infinite".
+ */
public native final int dequeueOutputBuffer(
BufferInfo info, long timeoutUs);
- /** If you are done with a buffer, use this call to return the buffer to
- * the codec. If you previously specified a surface when configuring this
- * video decoder you can optionally render the buffer.
- * @param index The index of a client-owned output buffer previously returned
- * in a call to {@link #dequeueOutputBuffer}.
- * @param render If a valid surface was specified when configuring the codec,
- * passing true renders this output buffer to the surface.
- */
+ /**
+ * If you are done with a buffer, use this call to return the buffer to
+ * the codec. If you previously specified a surface when configuring this
+ * video decoder you can optionally render the buffer.
+ * @param index The index of a client-owned output buffer previously returned
+ * in a call to {@link #dequeueOutputBuffer}.
+ * @param render If a valid surface was specified when configuring the codec,
+ * passing true renders this output buffer to the surface.
+ */
public native final void releaseOutputBuffer(int index, boolean render);
- /** Call this after dequeueOutputBuffer signals a format change by returning
- * {@link #INFO_OUTPUT_FORMAT_CHANGED}
+ /**
+ * Call this after dequeueOutputBuffer signals a format change by returning
+ * {@link #INFO_OUTPUT_FORMAT_CHANGED}
*/
- public native final Map<String, Object> getOutputFormat();
+ public final MediaFormat getOutputFormat() {
+ return new MediaFormat(getOutputFormatNative());
+ }
- /** Call this after start() returns.
+ private native final Map<String, Object> getOutputFormatNative();
+
+ /**
+ * Call this after start() returns.
*/
public ByteBuffer[] getInputBuffers() {
return getBuffers(true /* input */);
}
- /** Call this after start() returns and whenever dequeueOutputBuffer
- * signals an output buffer change by returning
- * {@link #INFO_OUTPUT_BUFFERS_CHANGED}
+ /**
+ * Call this after start() returns and whenever dequeueOutputBuffer
+ * signals an output buffer change by returning
+ * {@link #INFO_OUTPUT_BUFFERS_CHANGED}
*/
public ByteBuffer[] getOutputBuffers() {
return getBuffers(false /* input */);
}
- /** The content is scaled to the surface dimensions */
+ /**
+ * The content is scaled to the surface dimensions
+ */
public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT = 1;
- /** The content is scaled, maintaining its aspect ratio, the whole
- surface area is used, content may be cropped
- */
+ /**
+ * The content is scaled, maintaining its aspect ratio, the whole
+ * surface area is used, content may be cropped
+ */
public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING = 2;
- /** If a surface has been specified in a previous call to {@link #configure}
- specifies the scaling mode to use. The default is "scale to fit".
- */
+ /**
+ * If a surface has been specified in a previous call to {@link #configure}
+ * specifies the scaling mode to use. The default is "scale to fit".
+ */
public native final void setVideoScalingMode(int mode);
private native final ByteBuffer[] getBuffers(boolean input);
diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java
new file mode 100644
index 000000000000..4398642fde95
--- /dev/null
+++ b/media/java/android/media/MediaCodecInfo.java
@@ -0,0 +1,213 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media;
+
+public final class MediaCodecInfo {
+ private int mIndex;
+
+ /* package private */ MediaCodecInfo(int index) {
+ mIndex = index;
+ }
+
+ /**
+ * Retrieve the codec name.
+ */
+ public final String getName() {
+ return MediaCodecList.getCodecName(mIndex);
+ }
+
+ /**
+ * Query if the codec is an encoder.
+ */
+ public final boolean isEncoder() {
+ return MediaCodecList.isEncoder(mIndex);
+ }
+
+ /**
+ * Query the media types supported by the codec.
+ */
+ public final String[] getSupportedTypes() {
+ return MediaCodecList.getSupportedTypes(mIndex);
+ }
+
+ public static final class CodecCapabilities {
+ public CodecProfileLevel[] profileLevels;
+
+ // from OMX_COLOR_FORMATTYPE
+ public final static int COLOR_FormatMonochrome = 1;
+ public final static int COLOR_Format8bitRGB332 = 2;
+ public final static int COLOR_Format12bitRGB444 = 3;
+ public final static int COLOR_Format16bitARGB4444 = 4;
+ public final static int COLOR_Format16bitARGB1555 = 5;
+ public final static int COLOR_Format16bitRGB565 = 6;
+ public final static int COLOR_Format16bitBGR565 = 7;
+ public final static int COLOR_Format18bitRGB666 = 8;
+ public final static int COLOR_Format18bitARGB1665 = 9;
+ public final static int COLOR_Format19bitARGB1666 = 10;
+ public final static int COLOR_Format24bitRGB888 = 11;
+ public final static int COLOR_Format24bitBGR888 = 12;
+ public final static int COLOR_Format24bitARGB1887 = 13;
+ public final static int COLOR_Format25bitARGB1888 = 14;
+ public final static int COLOR_Format32bitBGRA8888 = 15;
+ public final static int COLOR_Format32bitARGB8888 = 16;
+ public final static int COLOR_FormatYUV411Planar = 17;
+ public final static int COLOR_FormatYUV411PackedPlanar = 18;
+ public final static int COLOR_FormatYUV420Planar = 19;
+ public final static int COLOR_FormatYUV420PackedPlanar = 20;
+ public final static int COLOR_FormatYUV420SemiPlanar = 21;
+ public final static int COLOR_FormatYUV422Planar = 22;
+ public final static int COLOR_FormatYUV422PackedPlanar = 23;
+ public final static int COLOR_FormatYUV422SemiPlanar = 24;
+ public final static int COLOR_FormatYCbYCr = 25;
+ public final static int COLOR_FormatYCrYCb = 26;
+ public final static int COLOR_FormatCbYCrY = 27;
+ public final static int COLOR_FormatCrYCbY = 28;
+ public final static int COLOR_FormatYUV444Interleaved = 29;
+ public final static int COLOR_FormatRawBayer8bit = 30;
+ public final static int COLOR_FormatRawBayer10bit = 31;
+ public final static int COLOR_FormatRawBayer8bitcompressed = 32;
+ public final static int COLOR_FormatL2 = 33;
+ public final static int COLOR_FormatL4 = 34;
+ public final static int COLOR_FormatL8 = 35;
+ public final static int COLOR_FormatL16 = 36;
+ public final static int COLOR_FormatL24 = 37;
+ public final static int COLOR_FormatL32 = 38;
+ public final static int COLOR_FormatYUV420PackedSemiPlanar = 39;
+ public final static int COLOR_FormatYUV422PackedSemiPlanar = 40;
+ public final static int COLOR_Format18BitBGR666 = 41;
+ public final static int COLOR_Format24BitARGB6666 = 42;
+ public final static int COLOR_Format24BitABGR6666 = 43;
+
+ public final static int COLOR_TI_FormatYUV420PackedSemiPlanar = 0x7f000100;
+ public final static int COLOR_QCOM_FormatYUV420SemiPlanar = 0x7fa30c00;
+
+ /**
+ * Defined in the OpenMAX IL specs, color format values are drawn from
+ * OMX_COLOR_FORMATTYPE.
+ */
+ public int[] colorFormats;
+ };
+
+ public static final class CodecProfileLevel {
+ // from OMX_VIDEO_AVCPROFILETYPE
+ public static final int AVCProfileBaseline = 0x01;
+ public static final int AVCProfileMain = 0x02;
+ public static final int AVCProfileExtended = 0x04;
+ public static final int AVCProfileHigh = 0x08;
+ public static final int AVCProfileHigh10 = 0x10;
+ public static final int AVCProfileHigh422 = 0x20;
+ public static final int AVCProfileHigh444 = 0x40;
+
+ // from OMX_VIDEO_AVCLEVELTYPE
+ public static final int AVCLevel1 = 0x01;
+ public static final int AVCLevel1b = 0x02;
+ public static final int AVCLevel11 = 0x04;
+ public static final int AVCLevel12 = 0x08;
+ public static final int AVCLevel13 = 0x10;
+ public static final int AVCLevel2 = 0x20;
+ public static final int AVCLevel21 = 0x40;
+ public static final int AVCLevel22 = 0x80;
+ public static final int AVCLevel3 = 0x100;
+ public static final int AVCLevel31 = 0x200;
+ public static final int AVCLevel32 = 0x400;
+ public static final int AVCLevel4 = 0x800;
+ public static final int AVCLevel41 = 0x1000;
+ public static final int AVCLevel42 = 0x2000;
+ public static final int AVCLevel5 = 0x4000;
+ public static final int AVCLevel51 = 0x8000;
+
+ // from OMX_VIDEO_H263PROFILETYPE
+ public static final int H263ProfileBaseline = 0x01;
+ public static final int H263ProfileH320Coding = 0x02;
+ public static final int H263ProfileBackwardCompatible = 0x04;
+ public static final int H263ProfileISWV2 = 0x08;
+ public static final int H263ProfileISWV3 = 0x10;
+ public static final int H263ProfileHighCompression = 0x20;
+ public static final int H263ProfileInternet = 0x40;
+ public static final int H263ProfileInterlace = 0x80;
+ public static final int H263ProfileHighLatency = 0x100;
+
+ // from OMX_VIDEO_H263LEVELTYPE
+ public static final int H263Level10 = 0x01;
+ public static final int H263Level20 = 0x02;
+ public static final int H263Level30 = 0x04;
+ public static final int H263Level40 = 0x08;
+ public static final int H263Level45 = 0x10;
+ public static final int H263Level50 = 0x20;
+ public static final int H263Level60 = 0x40;
+ public static final int H263Level70 = 0x80;
+
+ // from OMX_VIDEO_MPEG4PROFILETYPE
+ public static final int MPEG4ProfileSimple = 0x01;
+ public static final int MPEG4ProfileSimpleScalable = 0x02;
+ public static final int MPEG4ProfileCore = 0x04;
+ public static final int MPEG4ProfileMain = 0x08;
+ public static final int MPEG4ProfileNbit = 0x10;
+ public static final int MPEG4ProfileScalableTexture = 0x20;
+ public static final int MPEG4ProfileSimpleFace = 0x40;
+ public static final int MPEG4ProfileSimpleFBA = 0x80;
+ public static final int MPEG4ProfileBasicAnimated = 0x100;
+ public static final int MPEG4ProfileHybrid = 0x200;
+ public static final int MPEG4ProfileAdvancedRealTime = 0x400;
+ public static final int MPEG4ProfileCoreScalable = 0x800;
+ public static final int MPEG4ProfileAdvancedCoding = 0x1000;
+ public static final int MPEG4ProfileAdvancedCore = 0x2000;
+ public static final int MPEG4ProfileAdvancedScalable = 0x4000;
+ public static final int MPEG4ProfileAdvancedSimple = 0x8000;
+
+ // from OMX_VIDEO_MPEG4LEVELTYPE
+ public static final int MPEG4Level0 = 0x01;
+ public static final int MPEG4Level0b = 0x02;
+ public static final int MPEG4Level1 = 0x04;
+ public static final int MPEG4Level2 = 0x08;
+ public static final int MPEG4Level3 = 0x10;
+ public static final int MPEG4Level4 = 0x20;
+ public static final int MPEG4Level4a = 0x40;
+ public static final int MPEG4Level5 = 0x80;
+
+ // from OMX_AUDIO_AACPROFILETYPE
+ public static final int AACObjectMain = 1;
+ public static final int AACObjectLC = 2;
+ public static final int AACObjectSSR = 3;
+ public static final int AACObjectLTP = 4;
+ public static final int AACObjectHE = 5;
+ public static final int AACObjectScalable = 6;
+ public static final int AACObjectERLC = 17;
+ public static final int AACObjectLD = 23;
+ public static final int AACObjectHE_PS = 29;
+ public static final int AACObjectELD = 39;
+
+ /**
+ * Defined in the OpenMAX IL specs, depending on the type of media
+ * this can be OMX_VIDEO_AVCPROFILETYPE, OMX_VIDEO_H263PROFILETYPE,
+ * or OMX_VIDEO_MPEG4PROFILETYPE.
+ */
+ public int profile;
+
+ /**
+ * Defined in the OpenMAX IL specs, depending on the type of media
+ * this can be OMX_VIDEO_AVCLEVELTYPE, OMX_VIDEO_H263LEVELTYPE
+ * or OMX_VIDEO_MPEG4LEVELTYPE.
+ */
+ public int level;
+ };
+
+ public final CodecCapabilities getCapabilitiesForType(
+ String type) {
+ return MediaCodecList.getCodecCapabilities(mIndex, type);
+ }
+}
diff --git a/media/java/android/media/MediaCodecList.java b/media/java/android/media/MediaCodecList.java
index 1772e9cf9fc6..174993434b25 100644
--- a/media/java/android/media/MediaCodecList.java
+++ b/media/java/android/media/MediaCodecList.java
@@ -16,49 +16,35 @@
package android.media;
+import android.media.MediaCodecInfo;
+
/**
* MediaCodecList class can be used to enumerate available codecs,
* find a codec supporting a given format and query the capabilities
* of a given codec.
-*/
+ */
final public class MediaCodecList {
- /** Count the number of available codecs.
- */
- public static native final int countCodecs();
+ /**
+ * Count the number of available codecs.
+ */
+ public static native final int getCodecCount();
- /** Retrieve the codec name at the specified index. */
- public static native final String getCodecName(int index);
+ public static final MediaCodecInfo getCodecInfoAt(int index) {
+ if (index < 0 || index > getCodecCount()) {
+ throw new IllegalArgumentException();
+ }
- /** Query if the codec at the specified index is an encoder. */
- public static native final boolean isEncoder(int index);
-
- /** Query the media types supported by the codec at the specified index */
- public static native final String[] getSupportedTypes(int index);
+ return new MediaCodecInfo(index);
+ }
- public static final class CodecProfileLevel {
- /** Defined in the OpenMAX IL specs, depending on the type of media
- * this can be OMX_VIDEO_AVCPROFILETYPE, OMX_VIDEO_H263PROFILETYPE
- * or OMX_VIDEO_MPEG4PROFILETYPE.
- */
- public int profile;
+ /* package private */ static native final String getCodecName(int index);
- /** Defined in the OpenMAX IL specs, depending on the type of media
- * this can be OMX_VIDEO_AVCLEVELTYPE, OMX_VIDEO_H263LEVELTYPE
- * or OMX_VIDEO_MPEG4LEVELTYPE.
- */
- public int level;
- };
+ /* package private */ static native final boolean isEncoder(int index);
- public static final class CodecCapabilities {
- public CodecProfileLevel[] profileLevels;
+ /* package private */ static native final String[] getSupportedTypes(int index);
- /** Defined in the OpenMAX IL specs, color format values are drawn from
- * OMX_COLOR_FORMATTYPE.
- */
- public int[] colorFormats;
- };
- public static native final CodecCapabilities getCodecCapabilities(
- int index, String type);
+ /* package private */ static native final MediaCodecInfo.CodecCapabilities
+ getCodecCapabilities(int index, String type);
private static native final void native_init();
diff --git a/media/java/android/media/MediaCrypto.java b/media/java/android/media/MediaCrypto.java
index b84ed72d265b..40a132635386 100644
--- a/media/java/android/media/MediaCrypto.java
+++ b/media/java/android/media/MediaCrypto.java
@@ -16,6 +16,9 @@
package android.media;
+import android.media.MediaCryptoException;
+import java.util.UUID;
+
/**
* MediaCrypto class can be used in conjunction with {@link android.media.MediaCodec}
* to decode encrypted media data.
@@ -24,27 +27,47 @@ package android.media;
* the method {@link #isCryptoSchemeSupported} can be used to query if a given
* scheme is supported on the device.
*
-*/
+ */
public final class MediaCrypto {
- /** Query if the given scheme identified by its UUID is supported on
- * this device.
- * @param uuid The UUID of the crypto scheme.
- */
- public static final native boolean isCryptoSchemeSupported(byte[] uuid);
+ /**
+ * Query if the given scheme identified by its UUID is supported on
+ * this device.
+ * @param uuid The UUID of the crypto scheme.
+ */
+ public static final boolean isCryptoSchemeSupported(UUID uuid) {
+ return isCryptoSchemeSupportedNative(getByteArrayFromUUID(uuid));
+ }
+
+ private static final byte[] getByteArrayFromUUID(UUID uuid) {
+ long msb = uuid.getMostSignificantBits();
+ long lsb = uuid.getLeastSignificantBits();
+
+ byte[] uuidBytes = new byte[16];
+ for (int i = 0; i < 8; ++i) {
+ uuidBytes[i] = (byte)(msb >>> (8 * (7 - i)));
+ uuidBytes[8 + i] = (byte)(lsb >>> (8 * (7 - i)));
+ }
- /** Instantiate a MediaCrypto object using opaque, crypto scheme specific
- * data.
- * @param uuid The UUID of the crypto scheme.
- * @param initData Opaque initialization data specific to the crypto scheme.
- */
- public MediaCrypto(byte[] uuid, byte[] initData) throws RuntimeException {
- native_setup(uuid, initData);
+ return uuidBytes;
}
- /** Query if the crypto scheme requires the use of a secure decoder
- * to decode data of the given mime type.
- * @param mime The mime type of the media data
- */
+ private static final native boolean isCryptoSchemeSupportedNative(byte[] uuid);
+
+ /**
+ * Instantiate a MediaCrypto object using opaque, crypto scheme specific
+ * data.
+ * @param uuid The UUID of the crypto scheme.
+ * @param initData Opaque initialization data specific to the crypto scheme.
+ */
+ public MediaCrypto(UUID uuid, byte[] initData) throws MediaCryptoException {
+ native_setup(getByteArrayFromUUID(uuid), initData);
+ }
+
+ /**
+ * Query if the crypto scheme requires the use of a secure decoder
+ * to decode data of the given mime type.
+ * @param mime The mime type of the media data
+ */
public final native boolean requiresSecureDecoderComponent(String mime);
@Override
@@ -54,7 +77,10 @@ public final class MediaCrypto {
public native final void release();
private static native final void native_init();
- private native final void native_setup(byte[] uuid, byte[] initData);
+
+ private native final void native_setup(byte[] uuid, byte[] initData)
+ throws MediaCryptoException;
+
private native final void native_finalize();
static {
diff --git a/media/java/android/media/MediaCryptoException.java b/media/java/android/media/MediaCryptoException.java
new file mode 100644
index 000000000000..44c5222c7fa9
--- /dev/null
+++ b/media/java/android/media/MediaCryptoException.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media;
+
+/**
+ * Exception thrown if MediaCrypto object could not be instantiated for
+ * whatever reason.
+ */
+public final class MediaCryptoException extends Exception {
+ public MediaCryptoException(String detailMessage) {
+ super(detailMessage);
+ }
+}
diff --git a/media/java/android/media/MediaExtractor.java b/media/java/android/media/MediaExtractor.java
index 5fe58a8cc15c..58b30dbe5d0d 100644
--- a/media/java/android/media/MediaExtractor.java
+++ b/media/java/android/media/MediaExtractor.java
@@ -20,6 +20,7 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.MediaCodec;
+import android.media.MediaFormat;
import android.net.Uri;
import java.io.FileDescriptor;
import java.io.IOException;
@@ -33,7 +34,7 @@ import java.util.Map;
* <pre>
* MediaExtractor extractor = new MediaExtractor();
* extractor.setDataSource(...);
- * int numTracks = extractor.countTracks();
+ * int numTracks = extractor.getTrackCount();
* for (int i = 0; i &lt; numTracks; ++i) {
* Map%lt;String, Object&gt; format = extractor.getTrackFormat(i);
* String mime = (String)format.get("mime");
@@ -52,7 +53,7 @@ import java.util.Map;
* extractor.release();
* extractor = null;
* </pre>
-*/
+ */
final public class MediaExtractor {
public MediaExtractor() {
native_setup();
@@ -174,105 +175,134 @@ final public class MediaExtractor {
native_finalize();
}
- /** Make sure you call this when you're done to free up any resources
- * instead of relying on the garbage collector to do this for you at
- * some point in the future.
- */
+ /**
+ * Make sure you call this when you're done to free up any resources
+ * instead of relying on the garbage collector to do this for you at
+ * some point in the future.
+ */
public native final void release();
- /** Count the number of tracks found in the data source.
+ /**
+ * Count the number of tracks found in the data source.
+ */
+ public native final int getTrackCount();
+
+ /**
+ * Get the track format at the specified index.
+ * More detail on the representation can be found at {@link android.media.MediaCodec}
+ */
+ public MediaFormat getTrackFormat(int index) {
+ return new MediaFormat(getTrackFormatNative(index));
+ }
+
+ private native Map<String, Object> getTrackFormatNative(int index);
+
+ /**
+ * Subsequent calls to {@link #readSampleData}, {@link #getSampleTrackIndex} and
+ * {@link #getSampleTime} only retrieve information for the subset of tracks
+ * selected.
+ * Selecting the same track multiple times has no effect, the track is
+ * only selected once.
*/
- public native int countTracks();
-
- /** Get the track format at the specified index.
- * More detail on the representation can be found at {@link android.media.MediaCodec}
- */
- public native Map<String, Object> getTrackFormat(int index);
-
- /** Subsequent calls to {@link #readSampleData}, {@link #getSampleTrackIndex} and
- * {@link #getSampleTime} only retrieve information for the subset of tracks
- * selected.
- * Selecting the same track multiple times has no effect, the track is
- * only selected once.
- */
public native void selectTrack(int index);
- /** Subsequent calls to {@link #readSampleData}, {@link #getSampleTrackIndex} and
- * {@link #getSampleTime} only retrieve information for the subset of tracks
- * selected.
- */
+ /**
+ * Subsequent calls to {@link #readSampleData}, {@link #getSampleTrackIndex} and
+ * {@link #getSampleTime} only retrieve information for the subset of tracks
+ * selected.
+ */
public native void unselectTrack(int index);
- /** If possible, seek to a sync sample at or before the specified time */
+ /**
+ * If possible, seek to a sync sample at or before the specified time
+ */
public static final int SEEK_TO_PREVIOUS_SYNC = 0;
- /** If possible, seek to a sync sample at or after the specified time */
+ /**
+ * If possible, seek to a sync sample at or after the specified time
+ */
public static final int SEEK_TO_NEXT_SYNC = 1;
- /** If possible, seek to the sync sample closest to the specified time */
+ /**
+ * If possible, seek to the sync sample closest to the specified time
+ */
public static final int SEEK_TO_CLOSEST_SYNC = 2;
- /** If possible, seek to a sample closest to the specified time, which may
- * NOT be a sync sample!
- */
+ /**
+ * If possible, seek to a sample closest to the specified time, which may
+ * NOT be a sync sample!
+ */
public static final int SEEK_TO_CLOSEST = 3;
- /** All selected tracks seek near the requested time according to the
- * specified mode.
- */
+ /**
+ * All selected tracks seek near the requested time according to the
+ * specified mode.
+ */
public native void seekTo(long timeUs, int mode);
- /** Advance to the next sample. Returns false if no more sample data
- * is available (end of stream).
+ /**
+ * Advance to the next sample. Returns false if no more sample data
+ * is available (end of stream).
*/
public native boolean advance();
- /** Retrieve the current encoded sample and store it in the byte buffer
- * starting at the given offset. Returns the sample size (or -1 if
- * no more samples are available).
- */
+ /**
+ * Retrieve the current encoded sample and store it in the byte buffer
+ * starting at the given offset. Returns the sample size (or -1 if
+ * no more samples are available).
+ */
public native int readSampleData(ByteBuffer byteBuf, int offset);
- /** Returns the track index the current sample originates from (or -1
- * if no more samples are available)
- */
+ /**
+ * Returns the track index the current sample originates from (or -1
+ * if no more samples are available)
+ */
public native int getSampleTrackIndex();
- /** Returns the current sample's presentation time in microseconds.
- * or -1 if no more samples are available.
- */
+ /**
+ * Returns the current sample's presentation time in microseconds.
+ * or -1 if no more samples are available.
+ */
public native long getSampleTime();
// Keep these in sync with their equivalents in NuMediaExtractor.h
- /** The sample is a sync sample */
+ /**
+ * The sample is a sync sample
+ */
public static final int SAMPLE_FLAG_SYNC = 1;
- /** The sample is (at least partially) encrypted, see also the documentation
- * for {@link android.media.MediaCodec#queueSecureInputBuffer}
- */
+ /**
+ * The sample is (at least partially) encrypted, see also the documentation
+ * for {@link android.media.MediaCodec#queueSecureInputBuffer}
+ */
public static final int SAMPLE_FLAG_ENCRYPTED = 2;
- /** Returns the current sample's flags. */
+ /**
+ * Returns the current sample's flags.
+ */
public native int getSampleFlags();
- /** If the sample flags indicate that the current sample is at least
- * partially encrypted, this call returns relevant information about
- * the structure of the sample data required for decryption.
- * @param info The android.media.MediaCodec.CryptoInfo structure
- * to be filled in.
- * @return true iff the sample flags contain {@link #SAMPLE_FLAG_ENCRYPTED}
- */
+ /**
+ * If the sample flags indicate that the current sample is at least
+ * partially encrypted, this call returns relevant information about
+ * the structure of the sample data required for decryption.
+ * @param info The android.media.MediaCodec.CryptoInfo structure
+ * to be filled in.
+ * @return true iff the sample flags contain {@link #SAMPLE_FLAG_ENCRYPTED}
+ */
public native boolean getSampleCryptoInfo(MediaCodec.CryptoInfo info);
- /** Returns an estimate of how much data is presently cached in memory
- expressed in microseconds. Returns -1 if that information is unavailable
- or not applicable (no cache).
+ /**
+ * Returns an estimate of how much data is presently cached in memory
+ * expressed in microseconds. Returns -1 if that information is unavailable
+ * or not applicable (no cache).
*/
public native long getCachedDuration();
- /** Returns true iff we are caching data and the cache has reached the
- * end of the data stream (for now, a future seek may of course restart
- * the fetching of data).
- * This API only returns a meaningful result if {link #getCachedDuration}
- * indicates the presence of a cache, i.e. does NOT return -1.
- */
+ /**
+ * Returns true iff we are caching data and the cache has reached the
+ * end of the data stream (for now, a future seek may of course restart
+ * the fetching of data).
+ * This API only returns a meaningful result if {link #getCachedDuration}
+ * indicates the presence of a cache, i.e. does NOT return -1.
+ */
public native boolean hasCacheReachedEndOfStream();
private static native final void native_init();
diff --git a/media/java/android/media/MediaFormat.java b/media/java/android/media/MediaFormat.java
new file mode 100644
index 000000000000..df77c9e8e98e
--- /dev/null
+++ b/media/java/android/media/MediaFormat.java
@@ -0,0 +1,290 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media;
+
+import java.nio.ByteBuffer;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Encapsulates the information describing the format of media data,
+ * be it audio or video.
+ *
+ * The format of the media data is specified as string/value pairs.
+ *
+ * Keys common to all formats:
+ *
+ * <table>
+ * <tr><th>Name</th><th>Value Type</th><th>Description</th></tr>
+ * <tr><td>{@link #KEY_MIME}</td><td>String</td><td>The type of the format.</td></tr>
+ * <tr><td>{@link #KEY_MAX_INPUT_SIZE}</td><td>Integer</td><td>optional, maximum size of a buffer of input data</td></tr>
+ * <tr><td>{@link #KEY_BIT_RATE}</td><td>Integer</td><td><b>encoder-only</b>, desired bitrate in bits/second</td></tr>
+ * </table>
+ *
+ * Video formats have the following keys:
+ * <table>
+ * <tr><th>Name</th><th>Value Type</th><th>Description</th></tr>
+ * <tr><td>{@link #KEY_WIDTH}</td><td>Integer</td><td></td></tr>
+ * <tr><td>{@link #KEY_HEIGHT}</td><td>Integer</td><td></td></tr>
+ * <tr><td>{@link #KEY_COLOR_FORMAT}</td><td>Integer</td><td><b>encoder-only</b></td></tr>
+ * <tr><td>{@link #KEY_FRAME_RATE}</td><td>Integer or Float</td><td><b>encoder-only</b></td></tr>
+ * <tr><td>{@link #KEY_I_FRAME_INTERVAL}</td><td>Integer</td><td><b>encoder-only</b></td></tr>
+ * </table>
+ *
+ * Audio formats have the following keys:
+ * <table>
+ * <tr><th>Name</th><th>Value Type</th><th>Description</th></tr>
+ * <tr><td>{@link #KEY_CHANNEL_COUNT}</td><td>Integer</td><td></td></tr>
+ * <tr><td>{@link #KEY_SAMPLE_RATE}</td><td>Integer</td><td></td></tr>
+ * <tr><td>{@link #KEY_IS_ADTS}</td><td>Integer</td><td>optional, if content is AAC audio, setting this key to 1 indicates that each audio frame is prefixed by the ADTS header.</td></tr>
+ * <tr><td>{@link #KEY_AAC_PROFILE}</td><td>Integer</td><td><b>encoder-only</b>, optional, if content is AAC audio, specifies the desired profile.</td></tr>
+ * <tr><td>{@link #KEY_CHANNEL_MASK}</td><td>Integer</td><td>A mask of audio channel assignments</td></tr>
+ * </table>
+ *
+ */
+public final class MediaFormat {
+ private Map<String, Object> mMap;
+
+ /**
+ * A key describing the mime type of the MediaFormat.
+ * The associated value is a string.
+ */
+ public static final String KEY_MIME = "mime";
+
+ /**
+ * A key describing the sample rate of an audio format.
+ * The associated value is an integer
+ */
+ public static final String KEY_SAMPLE_RATE = "sample-rate";
+
+ /**
+ * A key describing the number of channels in an audio format.
+ * The associated value is an integer
+ */
+ public static final String KEY_CHANNEL_COUNT = "channel-count";
+
+ /**
+ * A key describing the width of the content in a video format.
+ * The associated value is an integer
+ */
+ public static final String KEY_WIDTH = "width";
+
+ /**
+ * A key describing the height of the content in a video format.
+ * The associated value is an integer
+ */
+ public static final String KEY_HEIGHT = "height";
+
+ /** A key describing the maximum size in bytes of a buffer of data
+ * described by this MediaFormat.
+ * The associated value is an integer
+ */
+ public static final String KEY_MAX_INPUT_SIZE = "max-input-size";
+
+ /**
+ * A key describing the bitrate in bits/sec.
+ * The associated value is an integer
+ */
+ public static final String KEY_BIT_RATE = "bitrate";
+
+ /**
+ * A key describing the color format of the content in a video format.
+ * Constants are declared in {@link android.media.MediaCodecInfo.CodecCapabilities}.
+ */
+ public static final String KEY_COLOR_FORMAT = "color-format";
+
+ /**
+ * A key describing the frame rate of a video format in frames/sec.
+ * The associated value is an integer or a float.
+ */
+ public static final String KEY_FRAME_RATE = "frame-rate";
+
+ /**
+ * A key describing the frequency of I frames expressed in secs
+ * between I frames.
+ * The associated value is an integer.
+ */
+ public static final String KEY_I_FRAME_INTERVAL = "i-frame-interval";
+
+ /**
+ * @hide
+ */
+ public static final String KEY_STRIDE = "stride";
+ /**
+ * @hide
+ */
+ public static final String KEY_SLICE_HEIGHT = "slice-height";
+
+ /**
+ * A key describing the duration (in microseconds) of the content.
+ * The associated value is a long.
+ */
+ public static final String KEY_DURATION = "durationUs";
+
+ /**
+ * A key mapping to a value of 1 if the content is AAC audio and
+ * audio frames are prefixed with an ADTS header.
+ * The associated value is an integer (0 or 1).
+ */
+ public static final String KEY_IS_ADTS = "is-adts";
+
+ /**
+ * A key describing the channel composition of audio content. This mask
+ * is composed of bits drawn from channel mask definitions in {@link android.media.AudioFormat}.
+ * The associated value is an integer.
+ */
+ public static final String KEY_CHANNEL_MASK = "channel-mask";
+
+ /**
+ * A key describing the AAC profile to be used (AAC audio formats only).
+ * Constants are declared in {@link android.media.MediaCodecInfo.CodecCapabilities}.
+ */
+ public static final String KEY_AAC_PROFILE = "aac-profile";
+
+ /* package private */ MediaFormat(Map<String, Object> map) {
+ mMap = map;
+ }
+
+ /**
+ * Creates an empty MediaFormat
+ */
+ public MediaFormat() {
+ mMap = new HashMap();
+ }
+
+ /* package private */ Map<String, Object> getMap() {
+ return mMap;
+ }
+
+ /**
+ * Returns true iff a key of the given name exists in the format.
+ */
+ public final boolean containsKey(String name) {
+ return mMap.containsKey(name);
+ }
+
+ /**
+ * Returns the value of an integer key.
+ */
+ public final int getInteger(String name) {
+ return ((Integer)mMap.get(name)).intValue();
+ }
+
+ /**
+ * Returns the value of a long key.
+ */
+ public final long getLong(String name) {
+ return ((Long)mMap.get(name)).longValue();
+ }
+
+ /**
+ * Returns the value of a float key.
+ */
+ public final float getFloat(String name) {
+ return ((Float)mMap.get(name)).floatValue();
+ }
+
+ /**
+ * Returns the value of a string key.
+ */
+ public final String getString(String name) {
+ return (String)mMap.get(name);
+ }
+
+ /**
+ * Returns the value of a ByteBuffer key.
+ */
+ public final ByteBuffer getByteBuffer(String name) {
+ return (ByteBuffer)mMap.get(name);
+ }
+
+ /**
+ * Sets the value of an integer key.
+ */
+ public final void setInteger(String name, int value) {
+ mMap.put(name, new Integer(value));
+ }
+
+ /**
+ * Sets the value of a long key.
+ */
+ public final void setLong(String name, long value) {
+ mMap.put(name, new Long(value));
+ }
+
+ /**
+ * Sets the value of a float key.
+ */
+ public final void setFloat(String name, float value) {
+ mMap.put(name, new Float(value));
+ }
+
+ /**
+ * Sets the value of a string key.
+ */
+ public final void setString(String name, String value) {
+ mMap.put(name, value);
+ }
+
+ /**
+ * Sets the value of a ByteBuffer key.
+ */
+ public final void setByteBuffer(String name, ByteBuffer bytes) {
+ mMap.put(name, bytes);
+ }
+
+ /**
+ * Creates a minimal audio format.
+ * @param mime The mime type of the content.
+ * @param sampleRate The sampling rate of the content.
+ * @param channelCount The number of audio channels in the content.
+ */
+ public static final MediaFormat createAudioFormat(
+ String mime,
+ int sampleRate,
+ int channelCount) {
+ MediaFormat format = new MediaFormat();
+ format.setString(KEY_MIME, mime);
+ format.setInteger(KEY_SAMPLE_RATE, sampleRate);
+ format.setInteger(KEY_CHANNEL_COUNT, channelCount);
+
+ return format;
+ }
+
+ /**
+ * Creates a minimal video format.
+ * @param mime The mime type of the content.
+ * @param width The width of the content (in pixels)
+ * @param height The height of the content (in pixels)
+ */
+ public static final MediaFormat createVideoFormat(
+ String mime,
+ int width,
+ int height) {
+ MediaFormat format = new MediaFormat();
+ format.setString(KEY_MIME, mime);
+ format.setInteger(KEY_WIDTH, width);
+ format.setInteger(KEY_HEIGHT, height);
+
+ return format;
+ }
+
+ @Override
+ public String toString() {
+ return mMap.toString();
+ }
+}
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index f98c063b3b0e..acd81e1d591e 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -630,9 +630,9 @@ static void android_media_MediaCodec_releaseOutputBuffer(
throwExceptionAsNecessary(env, err);
}
-static jobject android_media_MediaCodec_getOutputFormat(
+static jobject android_media_MediaCodec_getOutputFormatNative(
JNIEnv *env, jobject thiz) {
- ALOGV("android_media_MediaCodec_getOutputFormat");
+ ALOGV("android_media_MediaCodec_getOutputFormatNative");
sp<JMediaCodec> codec = getMediaCodec(env, thiz);
@@ -790,8 +790,8 @@ static JNINativeMethod gMethods[] = {
{ "releaseOutputBuffer", "(IZ)V",
(void *)android_media_MediaCodec_releaseOutputBuffer },
- { "getOutputFormat", "()Ljava/util/Map;",
- (void *)android_media_MediaCodec_getOutputFormat },
+ { "getOutputFormatNative", "()Ljava/util/Map;",
+ (void *)android_media_MediaCodec_getOutputFormatNative },
{ "getBuffers", "(Z)[Ljava/nio/ByteBuffer;",
(void *)android_media_MediaCodec_getBuffers },
diff --git a/media/jni/android_media_MediaCodecList.cpp b/media/jni/android_media_MediaCodecList.cpp
index 7139560af4b8..0638b4ab7dda 100644
--- a/media/jni/android_media_MediaCodecList.cpp
+++ b/media/jni/android_media_MediaCodecList.cpp
@@ -27,7 +27,7 @@
using namespace android;
-static jint android_media_MediaCodecList_countCodecs(
+static jint android_media_MediaCodecList_getCodecCount(
JNIEnv *env, jobject thiz) {
return MediaCodecList::getInstance()->countCodecs();
}
@@ -105,13 +105,13 @@ static jobject android_media_MediaCodecList_getCodecCapabilities(
}
jclass capsClazz =
- env->FindClass("android/media/MediaCodecList$CodecCapabilities");
+ env->FindClass("android/media/MediaCodecInfo$CodecCapabilities");
CHECK(capsClazz != NULL);
jobject caps = env->AllocObject(capsClazz);
jclass profileLevelClazz =
- env->FindClass("android/media/MediaCodecList$CodecProfileLevel");
+ env->FindClass("android/media/MediaCodecInfo$CodecProfileLevel");
CHECK(profileLevelClazz != NULL);
jobjectArray profileLevelArray =
@@ -140,7 +140,7 @@ static jobject android_media_MediaCodecList_getCodecCapabilities(
jfieldID profileLevelsField = env->GetFieldID(
capsClazz,
"profileLevels",
- "[Landroid/media/MediaCodecList$CodecProfileLevel;");
+ "[Landroid/media/MediaCodecInfo$CodecProfileLevel;");
env->SetObjectField(caps, profileLevelsField, profileLevelArray);
@@ -169,7 +169,7 @@ static void android_media_MediaCodecList_native_init(JNIEnv *env) {
}
static JNINativeMethod gMethods[] = {
- { "countCodecs", "()I", (void *)android_media_MediaCodecList_countCodecs },
+ { "getCodecCount", "()I", (void *)android_media_MediaCodecList_getCodecCount },
{ "getCodecName", "(I)Ljava/lang/String;",
(void *)android_media_MediaCodecList_getCodecName },
{ "isEncoder", "(I)Z", (void *)android_media_MediaCodecList_isEncoder },
@@ -177,7 +177,7 @@ static JNINativeMethod gMethods[] = {
(void *)android_media_MediaCodecList_getSupportedTypes },
{ "getCodecCapabilities",
- "(ILjava/lang/String;)Landroid/media/MediaCodecList$CodecCapabilities;",
+ "(ILjava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;",
(void *)android_media_MediaCodecList_getCodecCapabilities },
{ "native_init", "()V", (void *)android_media_MediaCodecList_native_init },
diff --git a/media/jni/android_media_MediaCrypto.cpp b/media/jni/android_media_MediaCrypto.cpp
index f4f095365717..517a293535a0 100644
--- a/media/jni/android_media_MediaCrypto.cpp
+++ b/media/jni/android_media_MediaCrypto.cpp
@@ -210,7 +210,7 @@ static void android_media_MediaCrypto_native_setup(
if (err != OK) {
jniThrowException(
env,
- "java/lang/RuntimeException",
+ "android/media/MediaCryptoException",
"Failed to instantiate crypto object.");
return;
}
@@ -223,7 +223,7 @@ static void android_media_MediaCrypto_native_finalize(
android_media_MediaCrypto_release(env, thiz);
}
-static jboolean android_media_MediaCrypto_isCryptoSchemeSupported(
+static jboolean android_media_MediaCrypto_isCryptoSchemeSupportedNative(
JNIEnv *env, jobject thiz, jbyteArray uuidObj) {
jsize uuidLength = env->GetArrayLength(uuidObj);
@@ -284,8 +284,8 @@ static JNINativeMethod gMethods[] = {
{ "native_finalize", "()V",
(void *)android_media_MediaCrypto_native_finalize },
- { "isCryptoSchemeSupported", "([B)Z",
- (void *)android_media_MediaCrypto_isCryptoSchemeSupported },
+ { "isCryptoSchemeSupportedNative", "([B)Z",
+ (void *)android_media_MediaCrypto_isCryptoSchemeSupportedNative },
{ "requiresSecureDecoderComponent", "(Ljava/lang/String;)Z",
(void *)android_media_MediaCrypto_requiresSecureDecoderComponent },
diff --git a/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp
index 9e1920ca8dfc..c93baf1e4726 100644
--- a/media/jni/android_media_MediaExtractor.cpp
+++ b/media/jni/android_media_MediaExtractor.cpp
@@ -237,7 +237,7 @@ static void android_media_MediaExtractor_release(JNIEnv *env, jobject thiz) {
setMediaExtractor(env, thiz, NULL);
}
-static jint android_media_MediaExtractor_countTracks(
+static jint android_media_MediaExtractor_getTrackCount(
JNIEnv *env, jobject thiz) {
sp<JMediaExtractor> extractor = getMediaExtractor(env, thiz);
@@ -249,7 +249,7 @@ static jint android_media_MediaExtractor_countTracks(
return extractor->countTracks();
}
-static jobject android_media_MediaExtractor_getTrackFormat(
+static jobject android_media_MediaExtractor_getTrackFormatNative(
JNIEnv *env, jobject thiz, jint index) {
sp<JMediaExtractor> extractor = getMediaExtractor(env, thiz);
@@ -669,10 +669,10 @@ static void android_media_MediaExtractor_native_finalize(
static JNINativeMethod gMethods[] = {
{ "release", "()V", (void *)android_media_MediaExtractor_release },
- { "countTracks", "()I", (void *)android_media_MediaExtractor_countTracks },
+ { "getTrackCount", "()I", (void *)android_media_MediaExtractor_getTrackCount },
- { "getTrackFormat", "(I)Ljava/util/Map;",
- (void *)android_media_MediaExtractor_getTrackFormat },
+ { "getTrackFormatNative", "(I)Ljava/util/Map;",
+ (void *)android_media_MediaExtractor_getTrackFormatNative },
{ "selectTrack", "(I)V", (void *)android_media_MediaExtractor_selectTrack },
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/GrainFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/GrainFilter.java
index 168a9c675f44..318554607941 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/GrainFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/GrainFilter.java
@@ -42,14 +42,25 @@ public class GrainFilter extends Filter {
@GenerateFieldPort(name = "tile_size", hasDefault = true)
private int mTileSize = 640;
- private Program mProgram;
+ private Program mGrainProgram;
+ private Program mNoiseProgram;
private int mWidth = 0;
private int mHeight = 0;
private int mTarget = FrameFormat.TARGET_UNSPECIFIED;
- private Frame mNoiseFrame = null;
- private Random mRandom;
+ private Random mRandom = new Random();
+
+ private final String mNoiseShader =
+ "precision mediump float;\n" +
+ "uniform vec2 seed;\n" +
+ "varying vec2 v_texcoord;\n" +
+ "float rand(vec2 loc) {\n" +
+ " return fract(sin(dot(loc, vec2(12.9898, 78.233))) * 43758.5453);\n" +
+ "}\n" +
+ "void main() {\n" +
+ " gl_FragColor = vec4(rand(v_texcoord + seed), 0.0, 0.0, 1.0);\n" +
+ "}\n";
private final String mGrainShader =
"precision mediump float;\n" +
@@ -75,8 +86,6 @@ public class GrainFilter extends Filter {
public GrainFilter(String name) {
super(name);
-
- mRandom = new Random();
}
@Override
@@ -93,9 +102,13 @@ public class GrainFilter extends Filter {
public void initProgram(FilterContext context, int target) {
switch (target) {
case FrameFormat.TARGET_GPU:
- ShaderProgram shaderProgram = new ShaderProgram(context, mGrainShader);
+ ShaderProgram shaderProgram = new ShaderProgram(context, mNoiseShader);
+ shaderProgram.setMaximumTileSize(mTileSize);
+ mNoiseProgram = shaderProgram;
+
+ shaderProgram = new ShaderProgram(context, mGrainShader);
shaderProgram.setMaximumTileSize(mTileSize);
- mProgram = shaderProgram;
+ mGrainProgram = shaderProgram;
break;
default:
@@ -106,46 +119,49 @@ public class GrainFilter extends Filter {
}
private void updateParameters() {
- mProgram.setHostValue("scale", mScale);
+ float seed[] = { mRandom.nextFloat(), mRandom.nextFloat() };
+ mNoiseProgram.setHostValue("seed", seed);
+
+ mGrainProgram.setHostValue("scale", mScale);
}
private void updateFrameSize(int width, int height) {
mWidth = width;
mHeight = height;
- if (mProgram != null) {
- mProgram.setHostValue("stepX", 0.5f / mWidth);
- mProgram.setHostValue("stepY", 0.5f / mHeight);
+ if (mGrainProgram != null) {
+ mGrainProgram.setHostValue("stepX", 0.5f / mWidth);
+ mGrainProgram.setHostValue("stepY", 0.5f / mHeight);
updateParameters();
}
}
@Override
public void fieldPortValueUpdated(String name, FilterContext context) {
- if (mProgram != null) {
+ if (mGrainProgram != null && mNoiseProgram != null) {
updateParameters();
}
}
@Override
- public void tearDown(FilterContext context) {
- if (mNoiseFrame != null) {
- mNoiseFrame.release();
- mNoiseFrame = null;
- }
- }
-
- @Override
public void process(FilterContext context) {
// Get input frame
Frame input = pullInput("image");
FrameFormat inputFormat = input.getFormat();
+ FrameFormat noiseFormat = ImageFormat.create(inputFormat.getWidth() / 2,
+ inputFormat.getHeight() / 2,
+ ImageFormat.COLORSPACE_RGBA,
+ FrameFormat.TARGET_GPU);
+
+ // Create noise frame
+ Frame noiseFrame = context.getFrameManager().newFrame(inputFormat);
+
// Create output frame
Frame output = context.getFrameManager().newFrame(inputFormat);
// Create program if not created already
- if (mProgram == null || inputFormat.getTarget() != mTarget) {
+ if (mNoiseProgram == null || mGrainProgram == null || inputFormat.getTarget() != mTarget) {
initProgram(context, inputFormat.getTarget());
updateParameters();
}
@@ -153,35 +169,20 @@ public class GrainFilter extends Filter {
// Check if the frame size has changed
if (inputFormat.getWidth() != mWidth || inputFormat.getHeight() != mHeight) {
updateFrameSize(inputFormat.getWidth(), inputFormat.getHeight());
-
- int[] buffer = new int[mWidth * mHeight];
- for (int i = 0; i < mWidth * mHeight; ++i) {
- buffer[i] = (mRandom.nextInt(256) < RAND_THRESHOLD) ?
- mRandom.nextInt(256) : 0;
- }
- FrameFormat format = ImageFormat.create(mWidth, mHeight,
- ImageFormat.COLORSPACE_RGBA,
- FrameFormat.TARGET_GPU);
- if (mNoiseFrame != null) {
- mNoiseFrame.release();
- }
- mNoiseFrame = context.getFrameManager().newFrame(format);
- mNoiseFrame.setInts(buffer);
}
- if (mNoiseFrame.getFormat().getWidth() != mWidth ||
- mNoiseFrame.getFormat().getHeight() != mHeight) {
- throw new RuntimeException("Random map and imput image size mismatch!");
- }
+ Frame[] empty = {};
+ mNoiseProgram.process(empty, noiseFrame);
// Process
- Frame[] inputs = {input, mNoiseFrame};
- mProgram.process(inputs, output);
+ Frame[] inputs = {input, noiseFrame};
+ mGrainProgram.process(inputs, output);
// Push output
pushOutput("image", output);
// Release pushed frame
output.release();
+ noiseFrame.release();
}
}
diff --git a/native/android/Android.mk b/native/android/Android.mk
index e2c99ee72b62..00d11daade07 100644
--- a/native/android/Android.mk
+++ b/native/android/Android.mk
@@ -30,8 +30,7 @@ LOCAL_STATIC_LIBRARIES := \
LOCAL_C_INCLUDES += \
frameworks/base/native/include \
- frameworks/base/core/jni/android \
- dalvik/libnativehelper/include/nativehelper
+ frameworks/base/core/jni/android
LOCAL_MODULE:= libandroid
diff --git a/native/graphics/jni/Android.mk b/native/graphics/jni/Android.mk
index 7b741db7fc14..8b333e729454 100644
--- a/native/graphics/jni/Android.mk
+++ b/native/graphics/jni/Android.mk
@@ -25,8 +25,7 @@ LOCAL_SHARED_LIBRARIES := \
LOCAL_C_INCLUDES += \
external/skia/include/core \
frameworks/base/native/include \
- frameworks/base/core/jni/android/graphics \
- dalvik/libnativehelper/include/nativehelper
+ frameworks/base/core/jni/android/graphics
LOCAL_MODULE:= libjnigraphics
diff --git a/packages/SystemUI/res/layout-sw600dp/super_status_bar.xml b/packages/SystemUI/res/layout-sw600dp/super_status_bar.xml
index 8e862349e878..b9af3a965766 100644
--- a/packages/SystemUI/res/layout-sw600dp/super_status_bar.xml
+++ b/packages/SystemUI/res/layout-sw600dp/super_status_bar.xml
@@ -18,9 +18,11 @@
-->
<!-- This is the combined status bar / notification panel window. -->
-<FrameLayout
+<com.android.systemui.statusbar.phone.StatusBarWindowView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
+ android:focusable="true"
+ android:descendantFocusability="afterDescendants"
android:fitsSystemWindows="true"
>
@@ -35,4 +37,4 @@
android:layout_height="@*android:dimen/status_bar_height"
/>
-</FrameLayout>
+</com.android.systemui.statusbar.phone.StatusBarWindowView>
diff --git a/packages/SystemUI/res/layout/super_status_bar.xml b/packages/SystemUI/res/layout/super_status_bar.xml
index c094988d07fc..6c31ff4c3b33 100644
--- a/packages/SystemUI/res/layout/super_status_bar.xml
+++ b/packages/SystemUI/res/layout/super_status_bar.xml
@@ -18,7 +18,7 @@
-->
<!-- This is the combined status bar / notification panel window. -->
-<FrameLayout
+<com.android.systemui.statusbar.phone.StatusBarWindowView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
android:focusable="true"
@@ -36,4 +36,4 @@
android:layout_height="@*android:dimen/status_bar_height"
/>
-</FrameLayout>
+</com.android.systemui.statusbar.phone.StatusBarWindowView>
diff --git a/packages/SystemUI/src/com/android/systemui/SearchPanelView.java b/packages/SystemUI/src/com/android/systemui/SearchPanelView.java
index f3b9e30d8e2a..185ca5b24d5a 100644
--- a/packages/SystemUI/src/com/android/systemui/SearchPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/SearchPanelView.java
@@ -52,7 +52,6 @@ public class SearchPanelView extends FrameLayout implements
private boolean mShowing;
private View mSearchTargetsContainer;
private MultiWaveView mMultiWaveView;
- private SearchManager mSearchManager;
public SearchPanelView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
@@ -67,10 +66,30 @@ public class SearchPanelView extends FrameLayout implements
}
}
- public boolean isSearchAvailable() {
+ private SearchManager mSearchManager;
+
+ public boolean isAssistantAvailable() {
return mSearchManager != null && mSearchManager.getGlobalSearchActivity() != null;
}
+ private void startAssistActivity() {
+ if (mSearchManager != null) {
+ ComponentName globalSearchActivity = mSearchManager.getGlobalSearchActivity();
+ if (globalSearchActivity != null) {
+ Intent intent = new Intent(Intent.ACTION_ASSIST);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.setPackage(globalSearchActivity.getPackageName());
+ try {
+ mContext.startActivity(intent);
+ } catch (ActivityNotFoundException e) {
+ Slog.w(TAG, "Activity not found for " + intent.getAction());
+ }
+ } else {
+ Slog.w(TAG, "No global search activity");
+ }
+ }
+ }
+
final MultiWaveView.OnTriggerListener mMultiWaveViewListener
= new MultiWaveView.OnTriggerListener() {
@@ -90,29 +109,11 @@ public class SearchPanelView extends FrameLayout implements
final int resId = mMultiWaveView.getResourceIdForTarget(target);
switch (resId) {
case com.android.internal.R.drawable.ic_lockscreen_search:
- startGlobalSearch();
+ startAssistActivity();
break;
}
mBar.hideSearchPanel();
}
-
- private void startGlobalSearch() {
- if (mSearchManager != null) {
- ComponentName globalSearchActivity = mSearchManager.getGlobalSearchActivity();
- if (globalSearchActivity != null) {
- Intent intent = new Intent(SearchManager.INTENT_ACTION_GLOBAL_SEARCH);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.setComponent(globalSearchActivity);
- try {
- mContext.startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Slog.w(TAG, "Application not found for action " + intent.getAction());
- }
- } else {
- Slog.w(TAG, "No global search activity");
- }
- }
- }
};
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
index 492fe4b84bb5..e865b9c00542 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
@@ -714,7 +714,9 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener
public void handleSwipe(View view) {
TaskDescription ad = ((ViewHolder) view.getTag()).taskDescription;
if (ad == null) {
- Log.v(TAG, "Not able to find activity description for swiped task");
+ Log.v(TAG, "Not able to find activity description for swiped task; view=" + view +
+ " tag=" + view.getTag());
+ return;
}
if (DEBUG) Log.v(TAG, "Jettison " + ad.getLabel());
mRecentTaskDescriptions.remove(ad);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 1f1e64eb6e86..f0db2bce4396 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -408,7 +408,7 @@ public abstract class BaseStatusBar extends SystemUI implements
break;
case MSG_OPEN_SEARCH_PANEL:
if (DEBUG) Slog.d(TAG, "opening search panel");
- if (mSearchPanelView != null && mSearchPanelView.isSearchAvailable()) {
+ if (mSearchPanelView != null && mSearchPanelView.isAssistantAvailable()) {
mSearchPanelView.show(true, true);
}
break;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 8b212e992f67..c1d3c57c3a48 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -47,6 +47,7 @@ import android.util.DisplayMetrics;
import android.util.Log;
import android.util.Slog;
import android.util.TypedValue;
+import android.view.Choreographer;
import android.view.Display;
import android.view.Gravity;
import android.view.IWindowManager;
@@ -106,8 +107,6 @@ public class PhoneStatusBar extends BaseStatusBar {
static final int EXPANDED_LEAVE_ALONE = -10000;
static final int EXPANDED_FULL_OPEN = -10001;
- private static final int MSG_ANIMATE = 100;
- private static final int MSG_ANIMATE_REVEAL = 101;
private static final int MSG_OPEN_NOTIFICATION_PANEL = 1000;
private static final int MSG_CLOSE_NOTIFICATION_PANEL = 1001;
private static final int MSG_SHOW_INTRUDER = 1002;
@@ -148,7 +147,7 @@ public class PhoneStatusBar extends BaseStatusBar {
IWindowManager mWindowManager;
- View mStatusBarWindow;
+ StatusBarWindowView mStatusBarWindow;
PhoneStatusBarView mStatusBarView;
int mPixelFormat;
@@ -207,14 +206,12 @@ public class PhoneStatusBar extends BaseStatusBar {
boolean mTracking;
VelocityTracker mVelocityTracker;
- static final int ANIM_FRAME_DURATION = (1000/60);
-
+ Choreographer mChoreographer;
boolean mAnimating;
- long mCurAnimationTime;
float mAnimY;
float mAnimVel;
float mAnimAccel;
- long mAnimLastTime;
+ long mAnimLastTimeNanos;
boolean mAnimatingReveal = false;
int mViewDelta;
int[] mAbsPos = new int[2];
@@ -283,11 +280,12 @@ public class PhoneStatusBar extends BaseStatusBar {
mIconSize = res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_icon_size);
- mStatusBarWindow = View.inflate(context,
+ mStatusBarWindow = (StatusBarWindowView) View.inflate(context,
R.layout.super_status_bar, null);
if (DEBUG) {
mStatusBarWindow.setBackgroundColor(0x6000FF80);
}
+ mStatusBarWindow.mService = this;
mStatusBarWindow.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
@@ -310,6 +308,8 @@ public class PhoneStatusBar extends BaseStatusBar {
mStatusBarView.mService = this;
+ mChoreographer = Choreographer.getInstance();
+
try {
boolean showNav = mWindowManager.hasNavigationBar();
if (DEBUG) Slog.v(TAG, "hasNavigationBar=" + showNav);
@@ -1090,12 +1090,6 @@ public class PhoneStatusBar extends BaseStatusBar {
public void handleMessage(Message m) {
super.handleMessage(m);
switch (m.what) {
- case MSG_ANIMATE:
- doAnimation();
- break;
- case MSG_ANIMATE_REVEAL:
- doRevealAnimation();
- break;
case MSG_OPEN_NOTIFICATION_PANEL:
animateExpand();
break;
@@ -1113,6 +1107,20 @@ public class PhoneStatusBar extends BaseStatusBar {
}
}
+ final Runnable mAnimationCallback = new Runnable() {
+ @Override
+ public void run() {
+ doAnimation(mChoreographer.getFrameTimeNanos());
+ }
+ };
+
+ final Runnable mRevealAnimationCallback = new Runnable() {
+ @Override
+ public void run() {
+ doRevealAnimation(mChoreographer.getFrameTimeNanos());
+ }
+ };
+
View.OnFocusChangeListener mFocusChangeListener = new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
// Because 'v' is a ViewGroup, all its children will be (un)selected
@@ -1134,10 +1142,13 @@ public class PhoneStatusBar extends BaseStatusBar {
// Expand the window to encompass the full screen in anticipation of the drag.
// This is only possible to do atomically because the status bar is at the top of the screen!
WindowManager.LayoutParams lp = (WindowManager.LayoutParams) mStatusBarWindow.getLayoutParams();
+ lp.flags &= (~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
lp.height = ViewGroup.LayoutParams.MATCH_PARENT;
final WindowManager wm = WindowManagerImpl.getDefault();
wm.updateViewLayout(mStatusBarWindow, lp);
+ mStatusBarWindow.requestFocus(View.FOCUS_FORWARD);
+
visibilityChanged(true);
}
@@ -1224,6 +1235,7 @@ public class PhoneStatusBar extends BaseStatusBar {
// Shrink the window to the size of the status bar only
WindowManager.LayoutParams lp = (WindowManager.LayoutParams) mStatusBarWindow.getLayoutParams();
lp.height = getStatusBarHeight();
+ lp.flags |= (WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
final WindowManager wm = WindowManagerImpl.getDefault();
wm.updateViewLayout(mStatusBarWindow, lp);
@@ -1245,29 +1257,42 @@ public class PhoneStatusBar extends BaseStatusBar {
}
}
- void doAnimation() {
+ void doAnimation(long frameTimeNanos) {
if (mAnimating) {
if (SPEW) Slog.d(TAG, "doAnimation");
if (SPEW) Slog.d(TAG, "doAnimation before mAnimY=" + mAnimY);
- incrementAnim();
+ incrementAnim(frameTimeNanos);
if (SPEW) Slog.d(TAG, "doAnimation after mAnimY=" + mAnimY);
+
if (mAnimY >= getExpandedViewMaxHeight()-1) {
if (SPEW) Slog.d(TAG, "Animation completed to expanded state.");
mAnimating = false;
updateExpandedViewPos(EXPANDED_FULL_OPEN);
performExpand();
+ return;
}
- else if (mAnimY < getStatusBarHeight()) {
+
+ if (mAnimY == 0 && mAnimAccel == 0 && mAnimVel == 0) {
if (SPEW) Slog.d(TAG, "Animation completed to collapsed state.");
mAnimating = false;
- updateExpandedViewPos(0);
performCollapse();
+ return;
}
- else {
- updateExpandedViewPos((int)mAnimY);
- mCurAnimationTime += ANIM_FRAME_DURATION;
- mHandler.sendMessageAtTime(mHandler.obtainMessage(MSG_ANIMATE), mCurAnimationTime);
+
+ if (mAnimY < getStatusBarHeight()) {
+ // Draw one more frame with the bar positioned at the top of the screen
+ // before ending the animation so that the user sees the bar in
+ // its final position. The call to performCollapse() causes a window
+ // relayout which takes time and might cause the animation to skip
+ // on the very last frame before the bar disappears if we did it now.
+ mAnimY = 0;
+ mAnimAccel = 0;
+ mAnimVel = 0;
}
+
+ updateExpandedViewPos((int)mAnimY);
+ mChoreographer.postCallback(Choreographer.CALLBACK_ANIMATION,
+ mAnimationCallback, null);
}
}
@@ -1278,31 +1303,30 @@ public class PhoneStatusBar extends BaseStatusBar {
mVelocityTracker = null;
}
- void incrementAnim() {
- long now = SystemClock.uptimeMillis();
- float t = ((float)(now - mAnimLastTime)) / 1000; // ms -> s
+ void incrementAnim(long frameTimeNanos) {
+ final long deltaNanos = Math.max(frameTimeNanos - mAnimLastTimeNanos, 0);
+ final float t = deltaNanos * 0.000000001f; // ns -> s
final float y = mAnimY;
final float v = mAnimVel; // px/s
final float a = mAnimAccel; // px/s/s
mAnimY = y + (v*t) + (0.5f*a*t*t); // px
mAnimVel = v + (a*t); // px/s
- mAnimLastTime = now; // ms
+ mAnimLastTimeNanos = frameTimeNanos; // ns
//Slog.d(TAG, "y=" + y + " v=" + v + " a=" + a + " t=" + t + " mAnimY=" + mAnimY
// + " mAnimAccel=" + mAnimAccel);
}
- void doRevealAnimation() {
+ void doRevealAnimation(long frameTimeNanos) {
final int h = getCloseViewHeight() + getStatusBarHeight();
if (mAnimatingReveal && mAnimating && mAnimY < h) {
- incrementAnim();
+ incrementAnim(frameTimeNanos);
if (mAnimY >= h) {
mAnimY = h;
updateExpandedViewPos((int)mAnimY);
} else {
updateExpandedViewPos((int)mAnimY);
- mCurAnimationTime += ANIM_FRAME_DURATION;
- mHandler.sendMessageAtTime(mHandler.obtainMessage(MSG_ANIMATE_REVEAL),
- mCurAnimationTime);
+ mChoreographer.postCallback(Choreographer.CALLBACK_ANIMATION,
+ mRevealAnimationCallback, null);
}
}
}
@@ -1322,20 +1346,20 @@ public class PhoneStatusBar extends BaseStatusBar {
updateExpandedViewPos((int)mAnimY);
mAnimating = true;
mAnimatingReveal = true;
- mHandler.removeMessages(MSG_ANIMATE);
- mHandler.removeMessages(MSG_ANIMATE_REVEAL);
- long now = SystemClock.uptimeMillis();
- mAnimLastTime = now;
- mCurAnimationTime = now + ANIM_FRAME_DURATION;
- mAnimating = true;
- mHandler.sendMessageAtTime(mHandler.obtainMessage(MSG_ANIMATE_REVEAL),
- mCurAnimationTime);
+ mAnimLastTimeNanos = System.nanoTime();
+ mChoreographer.removeCallbacks(Choreographer.CALLBACK_ANIMATION,
+ mAnimationCallback, null);
+ mChoreographer.removeCallbacks(Choreographer.CALLBACK_ANIMATION,
+ mRevealAnimationCallback, null);
+ mChoreographer.postCallback(Choreographer.CALLBACK_ANIMATION,
+ mRevealAnimationCallback, null);
makeExpandedVisible();
} else {
// it's open, close it?
if (mAnimating) {
mAnimating = false;
- mHandler.removeMessages(MSG_ANIMATE);
+ mChoreographer.removeCallbacks(Choreographer.CALLBACK_ANIMATION,
+ mAnimationCallback, null);
}
updateExpandedViewPos(y + mViewDelta);
}
@@ -1396,13 +1420,15 @@ public class PhoneStatusBar extends BaseStatusBar {
//Slog.d(TAG, "mAnimY=" + mAnimY + " mAnimVel=" + mAnimVel
// + " mAnimAccel=" + mAnimAccel);
- long now = SystemClock.uptimeMillis();
- mAnimLastTime = now;
- mCurAnimationTime = now + ANIM_FRAME_DURATION;
+ mAnimLastTimeNanos = System.nanoTime();
mAnimating = true;
- mHandler.removeMessages(MSG_ANIMATE);
- mHandler.removeMessages(MSG_ANIMATE_REVEAL);
- mHandler.sendMessageAtTime(mHandler.obtainMessage(MSG_ANIMATE), mCurAnimationTime);
+
+ mChoreographer.removeCallbacks(Choreographer.CALLBACK_ANIMATION,
+ mAnimationCallback, null);
+ mChoreographer.removeCallbacks(Choreographer.CALLBACK_ANIMATION,
+ mRevealAnimationCallback, null);
+ mChoreographer.postCallback(Choreographer.CALLBACK_ANIMATION,
+ mAnimationCallback, null);
stopTracking();
}
@@ -1784,8 +1810,7 @@ public class PhoneStatusBar extends BaseStatusBar {
pw.println(" mAnimating=" + mAnimating
+ ", mAnimY=" + mAnimY + ", mAnimVel=" + mAnimVel
+ ", mAnimAccel=" + mAnimAccel);
- pw.println(" mCurAnimationTime=" + mCurAnimationTime
- + " mAnimLastTime=" + mAnimLastTime);
+ pw.println(" mAnimLastTimeNanos=" + mAnimLastTimeNanos);
pw.println(" mAnimatingReveal=" + mAnimatingReveal
+ " mViewDelta=" + mViewDelta);
pw.println(" mDisplayMetrics=" + mDisplayMetrics);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
index 16071d425956..a8f5c6463c21 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
@@ -22,6 +22,7 @@ import android.graphics.Canvas;
import android.graphics.Rect;
import android.os.SystemClock;
import android.util.AttributeSet;
+import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
new file mode 100644
index 000000000000..0fc5b4d42719
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.phone;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.KeyEvent;
+import android.widget.FrameLayout;
+import android.widget.TextSwitcher;
+
+
+public class StatusBarWindowView extends FrameLayout
+{
+ PhoneStatusBar mService;
+
+ public StatusBarWindowView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public boolean dispatchKeyEvent(KeyEvent event) {
+ boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
+ switch (event.getKeyCode()) {
+ case KeyEvent.KEYCODE_BACK:
+ if (!down) {
+ mService.animateCollapse();
+ }
+ return true;
+ }
+ return super.dispatchKeyEvent(event);
+ }
+}
+
diff --git a/policy/src/com/android/internal/policy/impl/LockScreen.java b/policy/src/com/android/internal/policy/impl/LockScreen.java
index dacaeb57fb8d..8b0d858823b3 100644
--- a/policy/src/com/android/internal/policy/impl/LockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/LockScreen.java
@@ -29,6 +29,7 @@ import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.SearchManager;
import android.content.ActivityNotFoundException;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
@@ -38,8 +39,8 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
-import android.speech.RecognizerIntent;
import android.util.Log;
+import android.util.Slog;
import android.media.AudioManager;
import android.os.RemoteException;
import android.provider.MediaStore;
@@ -80,6 +81,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen {
private View mUnlockWidget;
private boolean mCameraDisabled;
private boolean mSearchDisabled;
+ private SearchManager mSearchManager;
InfoCallbackImpl mInfoCallback = new InfoCallbackImpl() {
@@ -237,6 +239,25 @@ class LockScreen extends LinearLayout implements KeyguardScreen {
}
}
+ private Intent getAssistIntent() {
+ Intent intent = null;
+ if (mSearchManager == null) {
+ mSearchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE);
+ }
+ if (mSearchManager != null) {
+ ComponentName globalSearchActivity = mSearchManager.getGlobalSearchActivity();
+ if (globalSearchActivity != null) {
+ intent = new Intent(Intent.ACTION_ASSIST);
+ intent.setPackage(globalSearchActivity.getPackageName());
+ } else {
+ Slog.w(TAG, "No global search activity");
+ }
+ } else {
+ Slog.w(TAG, "No SearchManager");
+ }
+ return intent;
+ }
+
class MultiWaveViewMethods implements MultiWaveView.OnTriggerListener,
UnlockWidgetCommonMethods {
private final MultiWaveView mMultiWaveView;
@@ -279,7 +300,12 @@ class LockScreen extends LinearLayout implements KeyguardScreen {
final int resId = mMultiWaveView.getResourceIdForTarget(target);
switch (resId) {
case com.android.internal.R.drawable.ic_lockscreen_search:
- launchActivity(new Intent(RecognizerIntent.ACTION_WEB_SEARCH));
+ Intent assistIntent = getAssistIntent();
+ if (assistIntent != null) {
+ launchActivity(assistIntent);
+ } else {
+ Log.w(TAG, "Failed to get intent for assist activity");
+ }
mCallback.pokeWakelock();
break;
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index c3c49b0a5216..4b914227c8f3 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -2108,8 +2108,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
w = 0;
}
- final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
- widthMeasureSpec = MeasureSpec.makeMeasureSpec(Math.min(w, widthSize), EXACTLY);
+ if (w > 0) {
+ final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
+ widthMeasureSpec = MeasureSpec.makeMeasureSpec(
+ Math.min(w, widthSize), EXACTLY);
+ }
}
}
@@ -2125,9 +2128,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
h = 0;
}
- final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
- heightMeasureSpec =
- MeasureSpec.makeMeasureSpec(Math.min(h, heightSize), EXACTLY);
+ if (h > 0) {
+ final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
+ heightMeasureSpec = MeasureSpec.makeMeasureSpec(
+ Math.min(h, heightSize), EXACTLY);
+ }
}
}
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index dd650bf229d3..e396a6970362 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -884,22 +884,25 @@ private NetworkStateTracker makeWimaxStateTracker() {
@Override
public boolean isActiveNetworkMetered() {
enforceAccessPermission();
-
final long token = Binder.clearCallingIdentity();
try {
- final NetworkState state = getNetworkStateUnchecked(mActiveDefaultNetwork);
- if (state != null) {
- try {
- return mPolicyManager.isNetworkMetered(state);
- } catch (RemoteException e) {
- }
- }
- return false;
+ return isNetworkMeteredUnchecked(mActiveDefaultNetwork);
} finally {
Binder.restoreCallingIdentity(token);
}
}
+ private boolean isNetworkMeteredUnchecked(int networkType) {
+ final NetworkState state = getNetworkStateUnchecked(networkType);
+ if (state != null) {
+ try {
+ return mPolicyManager.isNetworkMetered(state);
+ } catch (RemoteException e) {
+ }
+ }
+ return false;
+ }
+
public boolean setRadios(boolean turnOn) {
boolean result = true;
enforceChangePermission();
@@ -993,7 +996,8 @@ private NetworkStateTracker makeWimaxStateTracker() {
public int startUsingNetworkFeature(int networkType, String feature,
IBinder binder) {
if (VDBG) {
- log("startUsingNetworkFeature for net " + networkType + ": " + feature);
+ log("startUsingNetworkFeature for net " + networkType + ": " + feature + ", uid="
+ + Binder.getCallingUid());
}
enforceChangePermission();
if (!ConnectivityManager.isNetworkTypeValid(networkType) ||
@@ -1010,6 +1014,16 @@ private NetworkStateTracker makeWimaxStateTracker() {
enforceConnectivityInternalPermission();
}
+ // if UID is restricted, don't allow them to bring up metered APNs
+ final boolean networkMetered = isNetworkMeteredUnchecked(usedNetworkType);
+ final int uidRules;
+ synchronized (mRulesLock) {
+ uidRules = mUidRules.get(Binder.getCallingUid(), RULE_ALLOW_ALL);
+ }
+ if (networkMetered && (uidRules & RULE_REJECT_METERED) != 0) {
+ return Phone.APN_REQUEST_FAILED;
+ }
+
NetworkStateTracker network = mNetTrackers[usedNetworkType];
if (network != null) {
Integer currentPid = new Integer(getCallingPid());
@@ -1432,7 +1446,6 @@ private NetworkStateTracker makeWimaxStateTracker() {
mUidRules.put(uid, uidRules);
}
- // TODO: dispatch into NMS to push rules towards kernel module
// TODO: notify UID when it has requested targeted updates
}
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 43c22924210f..8e3b8255ed36 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -39,6 +39,7 @@ import android.app.KeyguardManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
@@ -110,6 +111,7 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Locale;
import java.util.TreeMap;
/**
@@ -152,6 +154,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
private static final String TAG_ENABLED_WHEN_DEFAULT_IS_NOT_ASCII_CAPABLE =
"EnabledWhenDefaultIsNotAsciiCapable";
private static final String TAG_ASCII_CAPABLE = "AsciiCapable";
+ private static final Locale ENGLISH_LOCALE = new Locale("en");
final Context mContext;
final Resources mRes;
@@ -371,6 +374,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
private View mSwitchingDialogTitleView;
private InputMethodInfo[] mIms;
private int[] mSubtypeIds;
+ private Locale mLastSystemLocale;
class SettingsObserver extends ContentObserver {
SettingsObserver(Handler handler) {
@@ -586,6 +590,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
mImeSwitcherNotification.vibrate = null;
Intent intent = new Intent(Settings.ACTION_SHOW_INPUT_METHOD_PICKER);
mImeSwitchPendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
+ mLastSystemLocale = mRes.getConfiguration().locale;
mShowOngoingImeSwitcherForPhones = false;
@@ -612,32 +617,102 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
if (TextUtils.isEmpty(Settings.Secure.getString(
mContext.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD))) {
- InputMethodInfo defIm = null;
- for (InputMethodInfo imi: mMethodList) {
- if (defIm == null && imi.getIsDefaultResourceId() != 0) {
- try {
- Resources res = context.createPackageContext(
- imi.getPackageName(), 0).getResources();
- if (res.getBoolean(imi.getIsDefaultResourceId())) {
- defIm = imi;
- Slog.i(TAG, "Selected default: " + imi.getId());
+ resetDefaultImeLocked(context);
+ }
+
+ mSettingsObserver = new SettingsObserver(mHandler);
+ updateFromSettingsLocked();
+
+ // IMMS wants to receive Intent.ACTION_LOCALE_CHANGED in order to update the current IME
+ // according to the new system locale.
+ final IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_LOCALE_CHANGED);
+ mContext.registerReceiver(
+ new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ synchronized(mMethodMap) {
+ checkCurrentLocaleChangedLocked();
}
- } catch (PackageManager.NameNotFoundException ex) {
- } catch (Resources.NotFoundException ex) {
}
- }
+ }, filter);
+ }
+
+ private void checkCurrentLocaleChangedLocked() {
+ final Locale newLocale = mRes.getConfiguration().locale;
+ if (newLocale != null && !newLocale.equals(mLastSystemLocale)) {
+ if (DEBUG) {
+ Slog.i(TAG, "Locale has been changed to " + newLocale);
}
- if (defIm == null && mMethodList.size() > 0) {
- defIm = getMostApplicableDefaultIMELocked();
- Slog.i(TAG, "No default found, using " + defIm.getId());
+ buildInputMethodListLocked(mMethodList, mMethodMap);
+ // Reset the current ime to the proper one
+ resetDefaultImeLocked(mContext);
+ mLastSystemLocale = newLocale;
+ }
+ }
+
+ private void resetDefaultImeLocked(Context context) {
+ // Do not reset the default (current) IME when it is a 3rd-party IME
+ if (mCurMethodId != null && !isSystemIme(mMethodMap.get(mCurMethodId))) {
+ return;
+ }
+
+ InputMethodInfo defIm = null;
+ for (InputMethodInfo imi : mMethodList) {
+ if (defIm == null) {
+ if (isValidSystemDefaultIme(imi, context)) {
+ defIm = imi;
+ Slog.i(TAG, "Selected default: " + imi.getId());
+ }
}
- if (defIm != null) {
- setSelectedInputMethodAndSubtypeLocked(defIm, NOT_A_SUBTYPE_ID, false);
+ }
+ if (defIm == null && mMethodList.size() > 0) {
+ defIm = getMostApplicableDefaultIMELocked();
+ Slog.i(TAG, "No default found, using " + defIm.getId());
+ }
+ if (defIm != null) {
+ setSelectedInputMethodAndSubtypeLocked(defIm, NOT_A_SUBTYPE_ID, false);
+ }
+ }
+
+ private static boolean isValidSystemDefaultIme(InputMethodInfo imi, Context context) {
+ if (!isSystemIme(imi)) {
+ return false;
+ }
+ if (imi.getIsDefaultResourceId() != 0) {
+ try {
+ Resources res = context.createPackageContext(
+ imi.getPackageName(), 0).getResources();
+ if (res.getBoolean(imi.getIsDefaultResourceId())
+ && containsSubtypeOf(imi, context.getResources().getConfiguration().
+ locale.getLanguage())) {
+ return true;
+ }
+ } catch (PackageManager.NameNotFoundException ex) {
+ } catch (Resources.NotFoundException ex) {
}
}
+ if (imi.getSubtypeCount() == 0) {
+ Slog.w(TAG, "Found no subtypes in a system IME: " + imi.getPackageName());
+ }
+ return false;
+ }
- mSettingsObserver = new SettingsObserver(mHandler);
- updateFromSettingsLocked();
+ private static boolean isSystemImeThatHasEnglishSubtype(InputMethodInfo imi) {
+ if (!isSystemIme(imi)) {
+ return false;
+ }
+ return containsSubtypeOf(imi, ENGLISH_LOCALE.getLanguage());
+ }
+
+ private static boolean containsSubtypeOf(InputMethodInfo imi, String language) {
+ final int N = imi.getSubtypeCount();
+ for (int i = 0; i < N; ++i) {
+ if (imi.getSubtypeAt(i).getLocale().startsWith(language)) {
+ return true;
+ }
+ }
+ return false;
}
@Override
@@ -663,6 +738,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
mContext.getSystemService(Context.KEYGUARD_SERVICE);
mNotificationManager = (NotificationManager)
mContext.getSystemService(Context.NOTIFICATION_SERVICE);
+ mLastSystemLocale = mContext.getResources().getConfiguration().locale;
mStatusBar = statusBar;
statusBar.setIconVisibility("ime", false);
updateImeWindowStatusLocked();
@@ -2043,7 +2119,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
return false;
}
- private boolean isSystemIme(InputMethodInfo inputMethod) {
+ private static boolean isSystemIme(InputMethodInfo inputMethod) {
return (inputMethod.getServiceInfo().applicationInfo.flags
& ApplicationInfo.FLAG_SYSTEM) != 0;
}
@@ -2139,9 +2215,11 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
final String id = p.getId();
map.put(id, p);
- // System IMEs are enabled by default, unless there's a hard keyboard
- // and the system IME was explicitly disabled
- if (isSystemIme(p) && (!haveHardKeyboard || disabledSysImes.indexOf(id) < 0)) {
+ // Valid system default IMEs and IMEs that have English subtypes are enabled
+ // by default, unless there's a hard keyboard and the system IME was explicitly
+ // disabled
+ if ((isValidSystemDefaultIme(p, mContext) || isSystemImeThatHasEnglishSubtype(p))
+ && (!haveHardKeyboard || disabledSysImes.indexOf(id) < 0)) {
setInputMethodEnabledLocked(id, true);
}
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index d651111e25f9..4582d67739eb 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -489,6 +489,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
mNetworkLocationProvider =
new LocationProviderProxy(mContext, LocationManager.NETWORK_PROVIDER,
mNetworkLocationProviderPackageName, mLocationHandler);
+
addProvider(mNetworkLocationProvider);
}
@@ -1156,11 +1157,11 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
if (p == null) {
throw new IllegalArgumentException("provider=" + provider);
}
-
receiver.requiredPermissions = checkPermissionsSafe(provider,
receiver.requiredPermissions);
// so wakelock calls will succeed
+ final int callingPid = Binder.getCallingPid();
final int callingUid = Binder.getCallingUid();
boolean newUid = !providerHasListener(provider, callingUid, null);
long identity = Binder.clearCallingIdentity();
@@ -1179,6 +1180,8 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
boolean isProviderEnabled = isAllowedBySettingsLocked(provider);
if (isProviderEnabled) {
long minTimeForProvider = getMinTimeLocked(provider);
+ Slog.i(TAG, "request " + provider + " (pid " + callingPid + ") " + minTime +
+ " " + minTimeForProvider + (singleShot ? " (singleshot)" : ""));
p.setMinTime(minTimeForProvider, mTmpWorkSource);
// try requesting single shot if singleShot is true, and fall back to
// regular location tracking if requestSingleShotFix() is not supported
@@ -1231,6 +1234,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
}
// so wakelock calls will succeed
+ final int callingPid = Binder.getCallingPid();
final int callingUid = Binder.getCallingUid();
long identity = Binder.clearCallingIdentity();
try {
@@ -1280,8 +1284,13 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
LocationProviderInterface p = mProvidersByName.get(provider);
if (p != null) {
if (hasOtherListener) {
- p.setMinTime(getMinTimeLocked(provider), mTmpWorkSource);
+ long minTime = getMinTimeLocked(provider);
+ Slog.i(TAG, "remove " + provider + " (pid " + callingPid +
+ "), next minTime = " + minTime);
+ p.setMinTime(minTime, mTmpWorkSource);
} else {
+ Slog.i(TAG, "remove " + provider + " (pid " + callingPid +
+ "), disabled");
p.enableLocationTracking(false);
}
}
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java
index 817d04df99f1..4536a6dd1f5f 100644
--- a/services/java/com/android/server/NetworkManagementService.java
+++ b/services/java/com/android/server/NetworkManagementService.java
@@ -989,9 +989,15 @@ public class NetworkManagementService extends INetworkManagementService.Stub
}
@Override
- public NetworkStats getNetworkStatsSummary() {
+ public NetworkStats getNetworkStatsSummaryDev() {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
- return mStatsFactory.readNetworkStatsSummary();
+ return mStatsFactory.readNetworkStatsSummaryDev();
+ }
+
+ @Override
+ public NetworkStats getNetworkStatsSummaryXt() {
+ mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
+ return mStatsFactory.readNetworkStatsSummaryXt();
}
@Override
diff --git a/services/java/com/android/server/NetworkTimeUpdateService.java b/services/java/com/android/server/NetworkTimeUpdateService.java
index 1ff914f2afd2..76972bce8f84 100644
--- a/services/java/com/android/server/NetworkTimeUpdateService.java
+++ b/services/java/com/android/server/NetworkTimeUpdateService.java
@@ -165,9 +165,15 @@ public class NetworkTimeUpdateService {
if (mTime.getCacheAge() < POLLING_INTERVAL_MS) {
final long ntp = mTime.currentTimeMillis();
mTryAgainCounter = 0;
- mLastNtpFetchTime = SystemClock.elapsedRealtime();
- if (Math.abs(ntp - currentTime) > TIME_ERROR_THRESHOLD_MS) {
+ // If the clock is more than N seconds off or this is the first time it's been
+ // fetched since boot, set the current time.
+ if (Math.abs(ntp - currentTime) > TIME_ERROR_THRESHOLD_MS
+ || mLastNtpFetchTime == NOT_SET) {
// Set the system time
+ if (DBG && mLastNtpFetchTime == NOT_SET
+ && Math.abs(ntp - currentTime) <= TIME_ERROR_THRESHOLD_MS) {
+ Log.d(TAG, "For initial setup, rtc = " + currentTime);
+ }
if (DBG) Log.d(TAG, "Ntp time to be set = " + ntp);
// Make sure we don't overflow, since it's going to be converted to an int
if (ntp / 1000 < Integer.MAX_VALUE) {
@@ -176,6 +182,7 @@ public class NetworkTimeUpdateService {
} else {
if (DBG) Log.d(TAG, "Ntp time is close enough = " + ntp);
}
+ mLastNtpFetchTime = SystemClock.elapsedRealtime();
} else {
// Try again shortly
mTryAgainCounter++;
diff --git a/services/java/com/android/server/ThrottleService.java b/services/java/com/android/server/ThrottleService.java
index 215514785425..f35a5af6e8b6 100644
--- a/services/java/com/android/server/ThrottleService.java
+++ b/services/java/com/android/server/ThrottleService.java
@@ -511,7 +511,7 @@ public class ThrottleService extends IThrottleManager.Stub {
long incRead = 0;
long incWrite = 0;
try {
- final NetworkStats stats = mNMService.getNetworkStatsSummary();
+ final NetworkStats stats = mNMService.getNetworkStatsSummaryDev();
final int index = stats.findIndex(mIface, NetworkStats.UID_ALL,
NetworkStats.SET_DEFAULT, NetworkStats.TAG_NONE);
diff --git a/services/java/com/android/server/VibratorService.java b/services/java/com/android/server/VibratorService.java
index 6282c31ce97d..b6098675b5dc 100755
--- a/services/java/com/android/server/VibratorService.java
+++ b/services/java/com/android/server/VibratorService.java
@@ -391,9 +391,15 @@ public class VibratorService extends IVibratorService.Stub
}
private boolean doVibratorExists() {
- synchronized (mInputDeviceVibrators) {
- return !mInputDeviceVibrators.isEmpty() || vibratorExists();
- }
+ // For now, we choose to ignore the presence of input devices that have vibrators
+ // when reporting whether the device has a vibrator. Applications often use this
+ // information to decide whether to enable certain features so they expect the
+ // result of hasVibrator() to be constant. For now, just report whether
+ // the device has a built-in vibrator.
+ //synchronized (mInputDeviceVibrators) {
+ // return !mInputDeviceVibrators.isEmpty() || vibratorExists();
+ //}
+ return vibratorExists();
}
private void doVibratorOn(long millis) {
diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
index 8d454ceae2c1..fbe4a83c23ac 100644
--- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -1701,17 +1701,17 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
| AccessibilityNodeInfo.ACTION_CLEAR_SELECTION
| AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS
| AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS
- | AccessibilityNodeInfo.ACTION_NEXT_AT_GRANULARITY
- | AccessibilityNodeInfo.ACTION_PREVIOUS_AT_GRANULARITY
+ | AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY
+ | AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY
| AccessibilityNodeInfo.ACTION_NEXT_HTML_ELEMENT
| AccessibilityNodeInfo.ACTION_PREVIOUS_HTML_ELEMENT;
private static final int VALID_GRANULARITIES =
- AccessibilityNodeInfo.GRANULARITY_CHARACTER
- | AccessibilityNodeInfo.GRANULARITY_WORD
- | AccessibilityNodeInfo.GRANULARITY_LINE
- | AccessibilityNodeInfo.GRANULARITY_PARAGRAPH
- | AccessibilityNodeInfo.GRANULARITY_PAGE;
+ AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER
+ | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_WORD
+ | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_LINE
+ | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PARAGRAPH
+ | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PAGE;
private static final int RETRIEVAL_ALLOWING_EVENT_TYPES =
AccessibilityEvent.TYPE_VIEW_CLICKED
diff --git a/services/java/com/android/server/input/InputManagerService.java b/services/java/com/android/server/input/InputManagerService.java
index 117e0649d62e..299649db0ae5 100644
--- a/services/java/com/android/server/input/InputManagerService.java
+++ b/services/java/com/android/server/input/InputManagerService.java
@@ -140,7 +140,8 @@ public class InputManagerService extends IInputManager.Stub implements Watchdog.
private static native void nativeStart(int ptr);
private static native void nativeSetDisplaySize(int ptr, int displayId,
int width, int height, int externalWidth, int externalHeight);
- private static native void nativeSetDisplayOrientation(int ptr, int displayId, int rotation);
+ private static native void nativeSetDisplayOrientation(int ptr, int displayId,
+ int rotation, int externalRotation);
private static native int nativeGetScanCodeState(int ptr,
int deviceId, int sourceMask, int scanCode);
@@ -287,15 +288,16 @@ public class InputManagerService extends IInputManager.Stub implements Watchdog.
nativeSetDisplaySize(mPtr, displayId, width, height, externalWidth, externalHeight);
}
- public void setDisplayOrientation(int displayId, int rotation) {
+ public void setDisplayOrientation(int displayId, int rotation, int externalRotation) {
if (rotation < Surface.ROTATION_0 || rotation > Surface.ROTATION_270) {
throw new IllegalArgumentException("Invalid rotation.");
}
if (DEBUG) {
- Slog.d(TAG, "Setting display #" + displayId + " orientation to " + rotation);
+ Slog.d(TAG, "Setting display #" + displayId + " orientation to rotation " + rotation
+ + " external rotation " + externalRotation);
}
- nativeSetDisplayOrientation(mPtr, displayId, rotation);
+ nativeSetDisplayOrientation(mPtr, displayId, rotation, externalRotation);
}
/**
diff --git a/services/java/com/android/server/net/NetworkPolicyManagerService.java b/services/java/com/android/server/net/NetworkPolicyManagerService.java
index 8ebe224f15fd..1b8c9cb24fd3 100644
--- a/services/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -118,6 +118,7 @@ import android.telephony.TelephonyManager;
import android.text.format.Formatter;
import android.text.format.Time;
import android.util.Log;
+import android.util.MathUtils;
import android.util.NtpTrustedTime;
import android.util.Slog;
import android.util.SparseArray;
@@ -166,7 +167,7 @@ import libcore.io.IoUtils;
*/
public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
private static final String TAG = "NetworkPolicy";
- private static final boolean LOGD = true;
+ private static final boolean LOGD = false;
private static final boolean LOGV = false;
private static final int VERSION_INIT = 1;
@@ -318,6 +319,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
public void systemReady() {
+ if (!isBandwidthControlEnabled()) {
+ Slog.w(TAG, "bandwidth controls disabled, unable to enforce policy");
+ return;
+ }
+
synchronized (mRulesLock) {
// read policy from disk
readPolicyLocked();
@@ -962,6 +968,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
}
+ long lowestRule = Long.MAX_VALUE;
final HashSet<String> newMeteredIfaces = Sets.newHashSet();
// apply each policy that we found ifaces for; compute remaining data
@@ -985,6 +992,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
+ Arrays.toString(ifaces));
}
+ final boolean hasWarning = policy.warningBytes != LIMIT_DISABLED;
final boolean hasLimit = policy.limitBytes != LIMIT_DISABLED;
if (hasLimit || policy.metered) {
final long quotaBytes;
@@ -1014,6 +1022,23 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
newMeteredIfaces.add(iface);
}
}
+
+ // keep track of lowest warning or limit of active policies
+ if (hasWarning && policy.warningBytes < lowestRule) {
+ lowestRule = policy.warningBytes;
+ }
+ if (hasLimit && policy.limitBytes < lowestRule) {
+ lowestRule = policy.limitBytes;
+ }
+ }
+
+ try {
+ // make sure stats are recorded frequently enough; we aim for 2MB
+ // threshold for 2GB/month rules.
+ final long persistThreshold = lowestRule / 1000;
+ mNetworkStats.advisePersistThreshold(persistThreshold);
+ } catch (RemoteException e) {
+ // ignored; service lives in system_server
}
// remove quota on any trailing interfaces
@@ -1897,6 +1922,18 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
}
+ private boolean isBandwidthControlEnabled() {
+ final long token = Binder.clearCallingIdentity();
+ try {
+ return mNetworkManager.isBandwidthControlEnabled();
+ } catch (RemoteException e) {
+ // ignored; service lives in system_server
+ return false;
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
/**
* Try refreshing {@link #mTime} when stale.
*/
diff --git a/services/java/com/android/server/net/NetworkStatsCollection.java b/services/java/com/android/server/net/NetworkStatsCollection.java
index 2892a74845d4..c2e475a5b4ea 100644
--- a/services/java/com/android/server/net/NetworkStatsCollection.java
+++ b/services/java/com/android/server/net/NetworkStatsCollection.java
@@ -186,12 +186,12 @@ public class NetworkStatsCollection implements FileRotator.Reader {
if (history.size() == 0) return;
noteRecordedHistory(history.getStart(), history.getEnd(), history.getTotalBytes());
- final NetworkStatsHistory existing = mStats.get(key);
- if (existing != null) {
- existing.recordEntireHistory(history);
- } else {
- mStats.put(key, history);
+ NetworkStatsHistory target = mStats.get(key);
+ if (target == null) {
+ target = new NetworkStatsHistory(history.getBucketDuration());
+ mStats.put(key, target);
}
+ target.recordEntireHistory(history);
}
/**
diff --git a/services/java/com/android/server/net/NetworkStatsRecorder.java b/services/java/com/android/server/net/NetworkStatsRecorder.java
index 57ad158bf26f..2ce777113556 100644
--- a/services/java/com/android/server/net/NetworkStatsRecorder.java
+++ b/services/java/com/android/server/net/NetworkStatsRecorder.java
@@ -17,6 +17,8 @@
package com.android.server.net;
import static android.net.NetworkStats.TAG_NONE;
+import static android.net.TrafficStats.KB_IN_BYTES;
+import static android.net.TrafficStats.MB_IN_BYTES;
import static com.android.internal.util.Preconditions.checkNotNull;
import android.net.NetworkStats;
@@ -25,6 +27,7 @@ import android.net.NetworkStatsHistory;
import android.net.NetworkTemplate;
import android.net.TrafficStats;
import android.util.Log;
+import android.util.MathUtils;
import android.util.Slog;
import com.android.internal.util.FileRotator;
@@ -58,9 +61,9 @@ public class NetworkStatsRecorder {
private final String mCookie;
private final long mBucketDuration;
- private final long mPersistThresholdBytes;
private final boolean mOnlyTags;
+ private long mPersistThresholdBytes = 2 * MB_IN_BYTES;
private NetworkStats mLastSnapshot;
private final NetworkStatsCollection mPending;
@@ -71,13 +74,12 @@ public class NetworkStatsRecorder {
private WeakReference<NetworkStatsCollection> mComplete;
public NetworkStatsRecorder(FileRotator rotator, NonMonotonicObserver<String> observer,
- String cookie, long bucketDuration, long persistThresholdBytes, boolean onlyTags) {
+ String cookie, long bucketDuration, boolean onlyTags) {
mRotator = checkNotNull(rotator, "missing FileRotator");
mObserver = checkNotNull(observer, "missing NonMonotonicObserver");
mCookie = cookie;
mBucketDuration = bucketDuration;
- mPersistThresholdBytes = persistThresholdBytes;
mOnlyTags = onlyTags;
mPending = new NetworkStatsCollection(bucketDuration);
@@ -86,6 +88,12 @@ public class NetworkStatsRecorder {
mPendingRewriter = new CombiningRewriter(mPending);
}
+ public void setPersistThreshold(long thresholdBytes) {
+ if (LOGV) Slog.v(TAG, "setPersistThreshold() with " + thresholdBytes);
+ mPersistThresholdBytes = MathUtils.constrain(
+ thresholdBytes, 1 * KB_IN_BYTES, 100 * MB_IN_BYTES);
+ }
+
public void resetLocked() {
mLastSnapshot = null;
mPending.reset();
@@ -128,6 +136,9 @@ public class NetworkStatsRecorder {
Map<String, NetworkIdentitySet> ifaceIdent, long currentTimeMillis) {
final HashSet<String> unknownIfaces = Sets.newHashSet();
+ // skip recording when snapshot missing
+ if (snapshot == null) return;
+
// assume first snapshot is bootstrap and don't record
if (mLastSnapshot == null) {
mLastSnapshot = snapshot;
@@ -150,7 +161,7 @@ public class NetworkStatsRecorder {
continue;
}
- // skip when no delta occured
+ // skip when no delta occurred
if (entry.isEmpty()) continue;
// only record tag data when requested
diff --git a/services/java/com/android/server/net/NetworkStatsService.java b/services/java/com/android/server/net/NetworkStatsService.java
index 1c3e24f7e521..a9d4b596220f 100644
--- a/services/java/com/android/server/net/NetworkStatsService.java
+++ b/services/java/com/android/server/net/NetworkStatsService.java
@@ -36,6 +36,7 @@ import static android.net.NetworkStats.TAG_NONE;
import static android.net.NetworkStats.UID_ALL;
import static android.net.NetworkTemplate.buildTemplateMobileWildcard;
import static android.net.NetworkTemplate.buildTemplateWifiWildcard;
+import static android.net.TrafficStats.KB_IN_BYTES;
import static android.net.TrafficStats.MB_IN_BYTES;
import static android.provider.Settings.Secure.NETSTATS_DEV_BUCKET_DURATION;
import static android.provider.Settings.Secure.NETSTATS_DEV_DELETE_AGE;
@@ -49,6 +50,10 @@ import static android.provider.Settings.Secure.NETSTATS_UID_BUCKET_DURATION;
import static android.provider.Settings.Secure.NETSTATS_UID_DELETE_AGE;
import static android.provider.Settings.Secure.NETSTATS_UID_PERSIST_BYTES;
import static android.provider.Settings.Secure.NETSTATS_UID_ROTATE_AGE;
+import static android.provider.Settings.Secure.NETSTATS_UID_TAG_BUCKET_DURATION;
+import static android.provider.Settings.Secure.NETSTATS_UID_TAG_DELETE_AGE;
+import static android.provider.Settings.Secure.NETSTATS_UID_TAG_PERSIST_BYTES;
+import static android.provider.Settings.Secure.NETSTATS_UID_TAG_ROTATE_AGE;
import static android.telephony.PhoneStateListener.LISTEN_DATA_CONNECTION_STATE;
import static android.telephony.PhoneStateListener.LISTEN_NONE;
import static android.text.format.DateUtils.DAY_IN_MILLIS;
@@ -94,10 +99,12 @@ import android.os.PowerManager;
import android.os.RemoteException;
import android.os.SystemClock;
import android.provider.Settings;
+import android.provider.Settings.Secure;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.EventLog;
import android.util.Log;
+import android.util.MathUtils;
import android.util.NtpTrustedTime;
import android.util.Slog;
import android.util.SparseIntArray;
@@ -159,6 +166,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private PendingIntent mPollIntent;
private static final String PREFIX_DEV = "dev";
+ private static final String PREFIX_XT = "xt";
private static final String PREFIX_UID = "uid";
private static final String PREFIX_UID_TAG = "uid_tag";
@@ -168,27 +176,30 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
public interface NetworkStatsSettings {
public long getPollInterval();
public long getTimeCacheMaxAge();
- public long getGlobalAlertBytes();
public boolean getSampleEnabled();
public static class Config {
public final long bucketDuration;
- public final long persistBytes;
public final long rotateAgeMillis;
public final long deleteAgeMillis;
- public Config(long bucketDuration, long persistBytes, long rotateAgeMillis,
- long deleteAgeMillis) {
+ public Config(long bucketDuration, long rotateAgeMillis, long deleteAgeMillis) {
this.bucketDuration = bucketDuration;
- this.persistBytes = persistBytes;
this.rotateAgeMillis = rotateAgeMillis;
this.deleteAgeMillis = deleteAgeMillis;
}
}
public Config getDevConfig();
+ public Config getXtConfig();
public Config getUidConfig();
public Config getUidTagConfig();
+
+ public long getGlobalAlertBytes(long def);
+ public long getDevPersistBytes(long def);
+ public long getXtPersistBytes(long def);
+ public long getUidPersistBytes(long def);
+ public long getUidTagPersistBytes(long def);
}
private final Object mStatsLock = new Object();
@@ -204,6 +215,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
new DropBoxNonMonotonicObserver();
private NetworkStatsRecorder mDevRecorder;
+ private NetworkStatsRecorder mXtRecorder;
private NetworkStatsRecorder mUidRecorder;
private NetworkStatsRecorder mUidTagRecorder;
@@ -220,6 +232,8 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private final Handler mHandler;
private boolean mSystemReady;
+ private long mPersistThreshold = 2 * MB_IN_BYTES;
+ private long mGlobalAlertBytes;
public NetworkStatsService(
Context context, INetworkManagementService networkManager, IAlarmManager alarmManager) {
@@ -268,9 +282,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// create data recorders along with historical rotators
mDevRecorder = buildRecorder(PREFIX_DEV, mSettings.getDevConfig(), false);
+ mXtRecorder = buildRecorder(PREFIX_XT, mSettings.getXtConfig(), false);
mUidRecorder = buildRecorder(PREFIX_UID, mSettings.getUidConfig(), false);
mUidTagRecorder = buildRecorder(PREFIX_UID_TAG, mSettings.getUidTagConfig(), true);
+ updatePersistThresholds();
+
synchronized (mStatsLock) {
// upgrade any legacy stats, migrating them to rotated files
maybeUpgradeLegacyStatsLocked();
@@ -321,10 +338,9 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private NetworkStatsRecorder buildRecorder(
String prefix, NetworkStatsSettings.Config config, boolean includeTags) {
- return new NetworkStatsRecorder(
- new FileRotator(mBaseDir, prefix, config.rotateAgeMillis, config.deleteAgeMillis),
- mNonMonotonicObserver, prefix, config.bucketDuration, config.persistBytes,
- includeTags);
+ return new NetworkStatsRecorder(new FileRotator(
+ mBaseDir, prefix, config.rotateAgeMillis, config.deleteAgeMillis),
+ mNonMonotonicObserver, prefix, config.bucketDuration, includeTags);
}
private void shutdownLocked() {
@@ -343,10 +359,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// persist any pending stats
mDevRecorder.forcePersistLocked(currentTime);
+ mXtRecorder.forcePersistLocked(currentTime);
mUidRecorder.forcePersistLocked(currentTime);
mUidTagRecorder.forcePersistLocked(currentTime);
mDevRecorder = null;
+ mXtRecorder = null;
mUidRecorder = null;
mUidTagRecorder = null;
@@ -408,8 +426,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
*/
private void registerGlobalAlert() {
try {
- final long alertBytes = mSettings.getGlobalAlertBytes();
- mNetworkManager.setGlobalAlert(alertBytes);
+ mNetworkManager.setGlobalAlert(mGlobalAlertBytes);
} catch (IllegalStateException e) {
Slog.w(TAG, "problem registering for global alert: " + e);
} catch (RemoteException e) {
@@ -431,14 +448,18 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private NetworkStatsCollection getUidComplete() {
if (mUidComplete == null) {
- mUidComplete = mUidRecorder.getOrLoadCompleteLocked();
+ synchronized (mStatsLock) {
+ mUidComplete = mUidRecorder.getOrLoadCompleteLocked();
+ }
}
return mUidComplete;
}
private NetworkStatsCollection getUidTagComplete() {
if (mUidTagComplete == null) {
- mUidTagComplete = mUidTagRecorder.getOrLoadCompleteLocked();
+ synchronized (mStatsLock) {
+ mUidTagComplete = mUidTagRecorder.getOrLoadCompleteLocked();
+ }
}
return mUidTagComplete;
}
@@ -578,6 +599,45 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
}
+ @Override
+ public void advisePersistThreshold(long thresholdBytes) {
+ mContext.enforceCallingOrSelfPermission(MODIFY_NETWORK_ACCOUNTING, TAG);
+ assertBandwidthControlEnabled();
+
+ // clamp threshold into safe range
+ mPersistThreshold = MathUtils.constrain(thresholdBytes, 128 * KB_IN_BYTES, 2 * MB_IN_BYTES);
+ updatePersistThresholds();
+
+ if (LOGV) {
+ Slog.v(TAG, "advisePersistThreshold() given " + thresholdBytes + ", clamped to "
+ + mPersistThreshold);
+ }
+
+ // persist if beyond new thresholds
+ final long currentTime = mTime.hasCache() ? mTime.currentTimeMillis()
+ : System.currentTimeMillis();
+ mDevRecorder.maybePersistLocked(currentTime);
+ mXtRecorder.maybePersistLocked(currentTime);
+ mUidRecorder.maybePersistLocked(currentTime);
+ mUidTagRecorder.maybePersistLocked(currentTime);
+
+ // re-arm global alert
+ registerGlobalAlert();
+ }
+
+ /**
+ * Update {@link NetworkStatsRecorder} and {@link #mGlobalAlertBytes} to
+ * reflect current {@link #mPersistThreshold} value. Always defers to
+ * {@link Secure} values when defined.
+ */
+ private void updatePersistThresholds() {
+ mDevRecorder.setPersistThreshold(mSettings.getDevPersistBytes(mPersistThreshold));
+ mXtRecorder.setPersistThreshold(mSettings.getXtPersistBytes(mPersistThreshold));
+ mUidRecorder.setPersistThreshold(mSettings.getUidPersistBytes(mPersistThreshold));
+ mUidTagRecorder.setPersistThreshold(mSettings.getUidTagPersistBytes(mPersistThreshold));
+ mGlobalAlertBytes = mSettings.getGlobalAlertBytes(mPersistThreshold);
+ }
+
/**
* Receiver that watches for {@link IConnectivityManager} to claim network
* interfaces. Used to associate {@link TelephonyManager#getSubscriberId()}
@@ -772,9 +832,11 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// snapshot and record current counters; read UID stats first to
// avoid overcounting dev stats.
final NetworkStats uidSnapshot = getNetworkStatsUidDetail();
- final NetworkStats devSnapshot = getNetworkStatsSummary();
+ final NetworkStats xtSnapshot = mNetworkManager.getNetworkStatsSummaryXt();
+ final NetworkStats devSnapshot = mNetworkManager.getNetworkStatsSummaryDev();
mDevRecorder.recordSnapshotLocked(devSnapshot, mActiveIfaces, currentTime);
+ mXtRecorder.recordSnapshotLocked(xtSnapshot, mActiveIfaces, currentTime);
mUidRecorder.recordSnapshotLocked(uidSnapshot, mActiveIfaces, currentTime);
mUidTagRecorder.recordSnapshotLocked(uidSnapshot, mActiveIfaces, currentTime);
@@ -824,9 +886,11 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// snapshot and record current counters; read UID stats first to
// avoid overcounting dev stats.
final NetworkStats uidSnapshot = getNetworkStatsUidDetail();
- final NetworkStats devSnapshot = getNetworkStatsSummary();
+ final NetworkStats xtSnapshot = mNetworkManager.getNetworkStatsSummaryXt();
+ final NetworkStats devSnapshot = mNetworkManager.getNetworkStatsSummaryDev();
mDevRecorder.recordSnapshotLocked(devSnapshot, mActiveIfaces, currentTime);
+ mXtRecorder.recordSnapshotLocked(xtSnapshot, mActiveIfaces, currentTime);
mUidRecorder.recordSnapshotLocked(uidSnapshot, mActiveIfaces, currentTime);
mUidTagRecorder.recordSnapshotLocked(uidSnapshot, mActiveIfaces, currentTime);
@@ -841,11 +905,13 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// persist any pending data depending on requested flags
if (persistForce) {
mDevRecorder.forcePersistLocked(currentTime);
+ mXtRecorder.forcePersistLocked(currentTime);
mUidRecorder.forcePersistLocked(currentTime);
mUidTagRecorder.forcePersistLocked(currentTime);
} else {
if (persistNetwork) {
mDevRecorder.maybePersistLocked(currentTime);
+ mXtRecorder.maybePersistLocked(currentTime);
}
if (persistUid) {
mUidRecorder.maybePersistLocked(currentTime);
@@ -884,7 +950,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// collect mobile sample
template = buildTemplateMobileWildcard();
devTotal = mDevRecorder.getTotalSinceBootLocked(template);
- xtTotal = new NetworkStats.Entry();
+ xtTotal = mXtRecorder.getTotalSinceBootLocked(template);
uidTotal = mUidRecorder.getTotalSinceBootLocked(template);
EventLogTags.writeNetstatsMobileSample(
@@ -896,7 +962,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// collect wifi sample
template = buildTemplateWifiWildcard();
devTotal = mDevRecorder.getTotalSinceBootLocked(template);
- xtTotal = new NetworkStats.Entry();
+ xtTotal = mXtRecorder.getTotalSinceBootLocked(template);
uidTotal = mUidRecorder.getTotalSinceBootLocked(template);
EventLogTags.writeNetstatsWifiSample(
@@ -970,6 +1036,11 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
mDevRecorder.dumpLocked(pw, fullHistory);
pw.decreaseIndent();
+ pw.println("Xt stats:");
+ pw.increaseIndent();
+ mXtRecorder.dumpLocked(pw, fullHistory);
+ pw.decreaseIndent();
+
if (includeUid) {
pw.println("UID stats:");
pw.increaseIndent();
@@ -986,10 +1057,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
}
- private NetworkStats getNetworkStatsSummary() throws RemoteException {
- return mNetworkManager.getNetworkStatsSummary();
- }
-
/**
* Return snapshot of current UID statistics, including any
* {@link TrafficStats#UID_TETHERING} and {@link #mUidOperations} values.
@@ -1109,36 +1176,50 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
return getSecureLong(NETSTATS_TIME_CACHE_MAX_AGE, DAY_IN_MILLIS);
}
@Override
- public long getGlobalAlertBytes() {
- return getSecureLong(NETSTATS_GLOBAL_ALERT_BYTES, 2 * MB_IN_BYTES);
+ public long getGlobalAlertBytes(long def) {
+ return getSecureLong(NETSTATS_GLOBAL_ALERT_BYTES, def);
}
@Override
public boolean getSampleEnabled() {
return getSecureBoolean(NETSTATS_SAMPLE_ENABLED, true);
}
-
@Override
public Config getDevConfig() {
return new Config(getSecureLong(NETSTATS_DEV_BUCKET_DURATION, HOUR_IN_MILLIS),
- getSecureLong(NETSTATS_DEV_PERSIST_BYTES, 2 * MB_IN_BYTES),
getSecureLong(NETSTATS_DEV_ROTATE_AGE, 15 * DAY_IN_MILLIS),
getSecureLong(NETSTATS_DEV_DELETE_AGE, 90 * DAY_IN_MILLIS));
}
-
+ @Override
+ public Config getXtConfig() {
+ return getDevConfig();
+ }
@Override
public Config getUidConfig() {
return new Config(getSecureLong(NETSTATS_UID_BUCKET_DURATION, 2 * HOUR_IN_MILLIS),
- getSecureLong(NETSTATS_UID_PERSIST_BYTES, 2 * MB_IN_BYTES),
getSecureLong(NETSTATS_UID_ROTATE_AGE, 15 * DAY_IN_MILLIS),
getSecureLong(NETSTATS_UID_DELETE_AGE, 90 * DAY_IN_MILLIS));
}
-
@Override
public Config getUidTagConfig() {
- return new Config(getSecureLong(NETSTATS_UID_BUCKET_DURATION, 2 * HOUR_IN_MILLIS),
- getSecureLong(NETSTATS_UID_PERSIST_BYTES, 2 * MB_IN_BYTES),
- getSecureLong(NETSTATS_UID_ROTATE_AGE, 5 * DAY_IN_MILLIS),
- getSecureLong(NETSTATS_UID_DELETE_AGE, 15 * DAY_IN_MILLIS));
+ return new Config(getSecureLong(NETSTATS_UID_TAG_BUCKET_DURATION, 2 * HOUR_IN_MILLIS),
+ getSecureLong(NETSTATS_UID_TAG_ROTATE_AGE, 5 * DAY_IN_MILLIS),
+ getSecureLong(NETSTATS_UID_TAG_DELETE_AGE, 15 * DAY_IN_MILLIS));
+ }
+ @Override
+ public long getDevPersistBytes(long def) {
+ return getSecureLong(NETSTATS_DEV_PERSIST_BYTES, def);
+ }
+ @Override
+ public long getXtPersistBytes(long def) {
+ return getDevPersistBytes(def);
+ }
+ @Override
+ public long getUidPersistBytes(long def) {
+ return getSecureLong(NETSTATS_UID_PERSIST_BYTES, def);
+ }
+ @Override
+ public long getUidTagPersistBytes(long def) {
+ return getSecureLong(NETSTATS_UID_TAG_PERSIST_BYTES, def);
}
}
}
diff --git a/services/java/com/android/server/wm/BlackFrame.java b/services/java/com/android/server/wm/BlackFrame.java
index c915932a3648..27af31328e55 100644
--- a/services/java/com/android/server/wm/BlackFrame.java
+++ b/services/java/com/android/server/wm/BlackFrame.java
@@ -42,8 +42,17 @@ public class BlackFrame {
this.layer = layer;
int w = r-l;
int h = b-t;
- surface = new Surface(session, 0, "BlackSurface",
- -1, w, h, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM);
+ if (WindowManagerService.DEBUG_SURFACE_TRACE) {
+ surface = new WindowStateAnimator.SurfaceTrace(session, 0, "BlackSurface("
+ + l + ", " + t + ")",
+ -1, w, h, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM);
+ } else {
+ surface = new Surface(session, 0, "BlackSurface",
+ -1, w, h, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM);
+ }
+ surface.setAlpha(1);
+ surface.setLayer(layer);
+ surface.show();
if (WindowManagerService.SHOW_TRANSACTIONS ||
WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(WindowManagerService.TAG,
" BLACK " + surface + ": CREATE layer=" + layer);
@@ -58,8 +67,6 @@ public class BlackFrame {
surface.setMatrix(
mTmpFloats[Matrix.MSCALE_X], mTmpFloats[Matrix.MSKEW_Y],
mTmpFloats[Matrix.MSKEW_X], mTmpFloats[Matrix.MSCALE_Y]);
- surface.setAlpha(1.0f);
- surface.setLayer(layer);
if (false) {
Slog.i(WindowManagerService.TAG, "Black Surface @ (" + left + "," + top + "): ("
+ mTmpFloats[Matrix.MTRANS_X] + ","
@@ -159,14 +166,6 @@ public class BlackFrame {
}
}
- public void setAlpha(float alpha) {
- for (int i=0; i<mBlackSurfaces.length; i++) {
- if (mBlackSurfaces[i] != null) {
- mBlackSurfaces[i].surface.setAlpha(alpha);
- }
- }
- }
-
public void clearMatrix() {
for (int i=0; i<mBlackSurfaces.length; i++) {
if (mBlackSurfaces[i] != null) {
diff --git a/services/java/com/android/server/wm/ScreenRotationAnimation.java b/services/java/com/android/server/wm/ScreenRotationAnimation.java
index 13013a8d776e..938db9e77fa7 100644
--- a/services/java/com/android/server/wm/ScreenRotationAnimation.java
+++ b/services/java/com/android/server/wm/ScreenRotationAnimation.java
@@ -862,7 +862,6 @@ class ScreenRotationAnimation {
} else {
mExitFrameFinalMatrix.setConcat(mExitTransformation.getMatrix(), mFrameInitialMatrix);
mExitingBlackFrame.setMatrix(mExitFrameFinalMatrix);
- mExitingBlackFrame.setAlpha(mExitTransformation.getAlpha());
}
}
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index ee74e40094d9..8eda9ca2b5c9 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -5580,7 +5580,8 @@ public class WindowManagerService extends IWindowManager.Stub
mWaitingForConfig = true;
mLayoutNeeded = true;
startFreezingDisplayLocked(inTransaction);
- mInputManager.setDisplayOrientation(0, rotation);
+ mInputManager.setDisplayOrientation(0, rotation,
+ mDisplay != null ? mDisplay.getExternalRotation() : Surface.ROTATION_0);
// We need to update our screen size information to match the new
// rotation. Note that this is redundant with the later call to
@@ -6606,6 +6607,8 @@ public class WindowManagerService extends IWindowManager.Stub
mInputManager.setDisplaySize(Display.DEFAULT_DISPLAY,
mDisplay.getRawWidth(), mDisplay.getRawHeight(),
mDisplay.getRawExternalWidth(), mDisplay.getRawExternalHeight());
+ mInputManager.setDisplayOrientation(Display.DEFAULT_DISPLAY,
+ mDisplay.getRotation(), mDisplay.getExternalRotation());
mPolicy.setInitialDisplaySize(mDisplay, mInitialDisplayWidth, mInitialDisplayHeight);
}
diff --git a/services/jni/com_android_server_input_InputManagerService.cpp b/services/jni/com_android_server_input_InputManagerService.cpp
index b6378bfaf022..0e1ce5165220 100644
--- a/services/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/jni/com_android_server_input_InputManagerService.cpp
@@ -166,7 +166,7 @@ public:
void setDisplaySize(int32_t displayId, int32_t width, int32_t height,
int32_t externalWidth, int32_t externalHeight);
- void setDisplayOrientation(int32_t displayId, int32_t orientation);
+ void setDisplayOrientation(int32_t displayId, int32_t orientation, int32_t externalOrientation);
status_t registerInputChannel(JNIEnv* env, const sp<InputChannel>& inputChannel,
const sp<InputWindowHandle>& inputWindowHandle, bool monitor);
@@ -224,8 +224,9 @@ private:
struct Locked {
// Display size information.
int32_t displayWidth, displayHeight; // -1 when not initialized
- int32_t displayExternalWidth, displayExternalHeight; // -1 when not initialized
int32_t displayOrientation;
+ int32_t displayExternalWidth, displayExternalHeight; // -1 when not initialized
+ int32_t displayExternalOrientation;
// System UI visibility.
int32_t systemUiVisibility;
@@ -275,9 +276,10 @@ NativeInputManager::NativeInputManager(jobject contextObj,
AutoMutex _l(mLock);
mLocked.displayWidth = -1;
mLocked.displayHeight = -1;
+ mLocked.displayOrientation = DISPLAY_ORIENTATION_0;
mLocked.displayExternalWidth = -1;
mLocked.displayExternalHeight = -1;
- mLocked.displayOrientation = DISPLAY_ORIENTATION_0;
+ mLocked.displayExternalOrientation = DISPLAY_ORIENTATION_0;
mLocked.systemUiVisibility = ASYSTEM_UI_VISIBILITY_STATUS_BAR_VISIBLE;
mLocked.pointerSpeed = 0;
@@ -345,7 +347,8 @@ void NativeInputManager::setDisplaySize(int32_t displayId, int32_t width, int32_
}
}
-void NativeInputManager::setDisplayOrientation(int32_t displayId, int32_t orientation) {
+void NativeInputManager::setDisplayOrientation(int32_t displayId, int32_t orientation,
+ int32_t externalOrientation) {
bool changed = false;
if (displayId == 0) {
AutoMutex _l(mLock);
@@ -359,6 +362,11 @@ void NativeInputManager::setDisplayOrientation(int32_t displayId, int32_t orient
controller->setDisplayOrientation(orientation);
}
}
+
+ if (mLocked.displayExternalOrientation != externalOrientation) {
+ changed = true;
+ mLocked.displayExternalOrientation = externalOrientation;
+ }
}
if (changed) {
@@ -444,7 +452,7 @@ void NativeInputManager::getReaderConfiguration(InputReaderConfiguration* outCon
mLocked.displayWidth, mLocked.displayHeight, mLocked.displayOrientation);
outConfig->setDisplayInfo(0, true /*external*/,
mLocked.displayExternalWidth, mLocked.displayExternalHeight,
- mLocked.displayOrientation);
+ mLocked.displayExternalOrientation);
} // release lock
}
@@ -1041,10 +1049,10 @@ static void nativeSetDisplaySize(JNIEnv* env, jclass clazz, jint ptr,
}
static void nativeSetDisplayOrientation(JNIEnv* env, jclass clazz,
- jint ptr, jint displayId, jint orientation) {
+ jint ptr, jint displayId, jint orientation, jint externalOrientation) {
NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
- im->setDisplayOrientation(displayId, orientation);
+ im->setDisplayOrientation(displayId, orientation, externalOrientation);
}
static jint nativeGetScanCodeState(JNIEnv* env, jclass clazz,
@@ -1327,7 +1335,7 @@ static JNINativeMethod gInputManagerMethods[] = {
(void*) nativeStart },
{ "nativeSetDisplaySize", "(IIIIII)V",
(void*) nativeSetDisplaySize },
- { "nativeSetDisplayOrientation", "(III)V",
+ { "nativeSetDisplayOrientation", "(IIII)V",
(void*) nativeSetDisplayOrientation },
{ "nativeGetScanCodeState", "(IIII)I",
(void*) nativeGetScanCodeState },
diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
index ba3fd3c64cd7..c23e868c3123 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
@@ -37,6 +37,7 @@ import static com.android.server.net.NetworkPolicyManagerService.TYPE_LIMIT;
import static com.android.server.net.NetworkPolicyManagerService.TYPE_LIMIT_SNOOZED;
import static com.android.server.net.NetworkPolicyManagerService.TYPE_WARNING;
import static org.easymock.EasyMock.anyInt;
+import static org.easymock.EasyMock.anyLong;
import static org.easymock.EasyMock.aryEq;
import static org.easymock.EasyMock.capture;
import static org.easymock.EasyMock.createMock;
@@ -106,8 +107,9 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
private static final long TEST_START = 1194220800000L;
private static final String TEST_IFACE = "test0";
+ private static final String TEST_SSID = "AndroidAP";
- private static NetworkTemplate sTemplateWifi = NetworkTemplate.buildTemplateWifi();
+ private static NetworkTemplate sTemplateWifi = NetworkTemplate.buildTemplateWifi(TEST_SSID);
private BroadcastInterceptingContext mServiceContext;
private File mPolicyDir;
@@ -228,6 +230,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// expect to answer screen status during systemReady()
expect(mPowerManager.isScreenOn()).andReturn(true).atLeastOnce();
+ expect(mNetworkManager.isBandwidthControlEnabled()).andReturn(true).atLeastOnce();
expectCurrentTime();
replay();
@@ -612,6 +615,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
expect(mConnManager.getAllNetworkState()).andReturn(state).atLeastOnce();
expectCurrentTime();
expectClearNotifications();
+ expectAdvisePersistThreshold();
future = expectMeteredIfacesChanged();
replay();
@@ -636,6 +640,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
expectSetInterfaceQuota(TEST_IFACE, (2 * MB_IN_BYTES) - 512);
expectClearNotifications();
+ expectAdvisePersistThreshold();
future = expectMeteredIfacesChanged(TEST_IFACE);
replay();
@@ -703,6 +708,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
expectPolicyDataEnable(TYPE_WIFI, true);
expectClearNotifications();
+ expectAdvisePersistThreshold();
future = expectMeteredIfacesChanged();
replay();
@@ -729,6 +735,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
expectSetInterfaceQuota(TEST_IFACE, 2 * MB_IN_BYTES);
expectClearNotifications();
+ expectAdvisePersistThreshold();
future = expectMeteredIfacesChanged(TEST_IFACE);
replay();
@@ -793,6 +800,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
// still restricted.
expectRemoveInterfaceQuota(TEST_IFACE);
expectSetInterfaceQuota(TEST_IFACE, Long.MAX_VALUE);
+ expectAdvisePersistThreshold();
expectMeteredIfacesChanged(TEST_IFACE);
future = expectClearNotifications();
@@ -834,6 +842,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
expectSetInterfaceQuota(TEST_IFACE, Long.MAX_VALUE);
expectClearNotifications();
+ expectAdvisePersistThreshold();
future = expectMeteredIfacesChanged(TEST_IFACE);
replay();
@@ -860,7 +869,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
info.setDetailedState(DetailedState.CONNECTED, null, null);
final LinkProperties prop = new LinkProperties();
prop.setInterfaceName(TEST_IFACE);
- return new NetworkState(info, prop, null);
+ return new NetworkState(info, prop, null, null, TEST_SSID);
}
private void expectCurrentTime() throws Exception {
@@ -942,6 +951,11 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase {
return future;
}
+ private void expectAdvisePersistThreshold() throws Exception {
+ mStatsService.advisePersistThreshold(anyLong());
+ expectLastCall().anyTimes();
+ }
+
private static class TestAbstractFuture<T> extends AbstractFuture<T> {
@Override
public T get() throws InterruptedException, ExecutionException {
diff --git a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
index 6d9bb2935186..332d1980167f 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
@@ -30,7 +30,7 @@ import static android.net.NetworkStats.TAG_NONE;
import static android.net.NetworkStats.UID_ALL;
import static android.net.NetworkStatsHistory.FIELD_ALL;
import static android.net.NetworkTemplate.buildTemplateMobileAll;
-import static android.net.NetworkTemplate.buildTemplateWifi;
+import static android.net.NetworkTemplate.buildTemplateWifiWildcard;
import static android.net.TrafficStats.MB_IN_BYTES;
import static android.net.TrafficStats.UID_REMOVED;
import static android.net.TrafficStats.UID_TETHERING;
@@ -93,8 +93,9 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
private static final String IMSI_1 = "310004";
private static final String IMSI_2 = "310260";
+ private static final String TEST_SSID = "AndroidAP";
- private static NetworkTemplate sTemplateWifi = buildTemplateWifi();
+ private static NetworkTemplate sTemplateWifi = buildTemplateWifiWildcard();
private static NetworkTemplate sTemplateImsi1 = buildTemplateMobileAll(IMSI_1);
private static NetworkTemplate sTemplateImsi2 = buildTemplateMobileAll(IMSI_2);
@@ -136,7 +137,6 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
mService = new NetworkStatsService(
mServiceContext, mNetManager, mAlarmManager, mTime, mStatsDir, mSettings);
mService.bindConnectivityManager(mConnManager);
- mSession = mService.openSession();
mElapsedRealtime = 0L;
@@ -154,6 +154,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
replay();
mService.systemReady();
+ mSession = mService.openSession();
verifyAndReset();
mNetworkObserver = networkObserver.getValue();
@@ -162,9 +163,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
@Override
public void tearDown() throws Exception {
- for (File file : mStatsDir.listFiles()) {
- file.delete();
- }
+ IoUtils.deleteContents(mStatsDir);
mServiceContext = null;
mStatsDir = null;
@@ -820,7 +819,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
}
private void expectNetworkStatsSummary(NetworkStats summary) throws Exception {
- expect(mNetManager.getNetworkStatsSummary()).andReturn(summary).atLeastOnce();
+ expect(mNetManager.getNetworkStatsSummaryDev()).andReturn(summary).atLeastOnce();
+ expect(mNetManager.getNetworkStatsSummaryXt()).andReturn(summary).atLeastOnce();
}
private void expectNetworkStatsUidDetail(NetworkStats detail) throws Exception {
@@ -846,13 +846,19 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
throws Exception {
expect(mSettings.getPollInterval()).andReturn(HOUR_IN_MILLIS).anyTimes();
expect(mSettings.getTimeCacheMaxAge()).andReturn(DAY_IN_MILLIS).anyTimes();
- expect(mSettings.getGlobalAlertBytes()).andReturn(MB_IN_BYTES).anyTimes();
expect(mSettings.getSampleEnabled()).andReturn(true).anyTimes();
- final Config config = new Config(bucketDuration, persistBytes, deleteAge, deleteAge);
+ final Config config = new Config(bucketDuration, deleteAge, deleteAge);
expect(mSettings.getDevConfig()).andReturn(config).anyTimes();
+ expect(mSettings.getXtConfig()).andReturn(config).anyTimes();
expect(mSettings.getUidConfig()).andReturn(config).anyTimes();
expect(mSettings.getUidTagConfig()).andReturn(config).anyTimes();
+
+ expect(mSettings.getGlobalAlertBytes(anyLong())).andReturn(MB_IN_BYTES).anyTimes();
+ expect(mSettings.getDevPersistBytes(anyLong())).andReturn(MB_IN_BYTES).anyTimes();
+ expect(mSettings.getXtPersistBytes(anyLong())).andReturn(MB_IN_BYTES).anyTimes();
+ expect(mSettings.getUidPersistBytes(anyLong())).andReturn(MB_IN_BYTES).anyTimes();
+ expect(mSettings.getUidTagPersistBytes(anyLong())).andReturn(MB_IN_BYTES).anyTimes();
}
private void expectCurrentTime() throws Exception {
@@ -903,7 +909,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
info.setDetailedState(DetailedState.CONNECTED, null, null);
final LinkProperties prop = new LinkProperties();
prop.setInterfaceName(TEST_IFACE);
- return new NetworkState(info, prop, null);
+ return new NetworkState(info, prop, null, null, TEST_SSID);
}
private static NetworkState buildMobile3gState(String subscriberId) {
@@ -912,7 +918,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
info.setDetailedState(DetailedState.CONNECTED, null, null);
final LinkProperties prop = new LinkProperties();
prop.setInterfaceName(TEST_IFACE);
- return new NetworkState(info, prop, null, subscriberId);
+ return new NetworkState(info, prop, null, subscriberId, null);
}
private static NetworkState buildMobile4gState(String iface) {
diff --git a/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java b/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java
index 6a9778ee94ab..afa0eec319ec 100644
--- a/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/ThrottleServiceTest.java
@@ -232,7 +232,8 @@ public class ThrottleServiceTest extends AndroidTestCase {
final INetworkManagementService nmService = INetworkManagementService.Stub.asInterface(b);
// test is currently no-op, just exercises stats apis
- Log.d(TAG, nmService.getNetworkStatsSummary().toString());
+ Log.d(TAG, nmService.getNetworkStatsSummaryDev().toString());
+ Log.d(TAG, nmService.getNetworkStatsSummaryXt().toString());
Log.d(TAG, nmService.getNetworkStatsDetail().toString());
}
@@ -286,7 +287,7 @@ public class ThrottleServiceTest extends AndroidTestCase {
}
/**
- * Expect {@link NetworkManagementService#getNetworkStatsSummary()} mock
+ * Expect {@link NetworkManagementService#getNetworkStatsSummaryDev()} mock
* calls, responding with the given counter values.
*/
public void expectGetInterfaceCounter(long rx, long tx) throws Exception {
@@ -294,7 +295,7 @@ public class ThrottleServiceTest extends AndroidTestCase {
final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 1);
stats.addValues(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, rx, 0L, tx, 0L, 0);
- expect(mMockNMService.getNetworkStatsSummary()).andReturn(stats).atLeastOnce();
+ expect(mMockNMService.getNetworkStatsSummaryDev()).andReturn(stats).atLeastOnce();
}
/**
diff --git a/services/tests/servicestests/src/com/android/server/net/NetworkStatsCollectionTest.java b/services/tests/servicestests/src/com/android/server/net/NetworkStatsCollectionTest.java
index e40f1666ecc0..863482156e87 100644
--- a/services/tests/servicestests/src/com/android/server/net/NetworkStatsCollectionTest.java
+++ b/services/tests/servicestests/src/com/android/server/net/NetworkStatsCollectionTest.java
@@ -43,7 +43,7 @@ import libcore.io.Streams;
*/
@MediumTest
public class NetworkStatsCollectionTest extends AndroidTestCase {
-
+
private static final String TEST_FILE = "test.bin";
private static final String TEST_IMSI = "310260000000000";
@@ -53,10 +53,10 @@ public class NetworkStatsCollectionTest extends AndroidTestCase {
final NetworkStatsCollection collection = new NetworkStatsCollection(30 * MINUTE_IN_MILLIS);
collection.readLegacyNetwork(testFile);
-
+
// verify that history read correctly
assertSummaryTotal(collection, buildTemplateMobileAll(TEST_IMSI),
- 636014522L, 709291L, 88037144L, 518820L);
+ 636016770L, 709306L, 88038768L, 518836L);
// now export into a unified format
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
@@ -70,7 +70,7 @@ public class NetworkStatsCollectionTest extends AndroidTestCase {
// and read back into structure, verifying that totals are same
collection.read(new ByteArrayInputStream(bos.toByteArray()));
assertSummaryTotal(collection, buildTemplateMobileAll(TEST_IMSI),
- 636014522L, 709291L, 88037144L, 518820L);
+ 636016770L, 709306L, 88038768L, 518836L);
}
public void testReadLegacyUid() throws Exception {
@@ -82,7 +82,7 @@ public class NetworkStatsCollectionTest extends AndroidTestCase {
// verify that history read correctly
assertSummaryTotal(collection, buildTemplateMobileAll(TEST_IMSI),
- 637073904L, 711398L, 88342093L, 521006L);
+ 637076152L, 711413L, 88343717L, 521022L);
// now export into a unified format
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
@@ -96,7 +96,7 @@ public class NetworkStatsCollectionTest extends AndroidTestCase {
// and read back into structure, verifying that totals are same
collection.read(new ByteArrayInputStream(bos.toByteArray()));
assertSummaryTotal(collection, buildTemplateMobileAll(TEST_IMSI),
- 637073904L, 711398L, 88342093L, 521006L);
+ 637076152L, 711413L, 88343717L, 521022L);
}
public void testReadLegacyUidTags() throws Exception {
diff --git a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
index 75eb226d4aa1..bd780654e916 100644
--- a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -463,6 +463,61 @@ public abstract class ServiceStateTracker extends Handler {
pollingContext = new int[1];
}
+ /**
+ * Return true if time zone needs fixing.
+ *
+ * @param phoneBase
+ * @param operatorNumeric
+ * @param prevOperatorNumeric
+ * @param needToFixTimeZone
+ * @return true if time zone needs to be fixed
+ */
+ protected boolean shouldFixTimeZoneNow(PhoneBase phoneBase, String operatorNumeric,
+ String prevOperatorNumeric, boolean needToFixTimeZone) {
+ // Return false if the mcc isn't valid as we don't know where we are.
+ // Return true if we have an IccCard and the mcc changed or we
+ // need to fix it because when the NITZ time came in we didn't
+ // know the country code.
+
+ // If mcc is invalid then we'll return false
+ int mcc;
+ try {
+ mcc = Integer.parseInt(operatorNumeric.substring(0, 3));
+ } catch (Exception e) {
+ if (DBG) {
+ log("shouldFixTimeZoneNow: no mcc, operatorNumeric=" + operatorNumeric +
+ " retVal=false");
+ }
+ return false;
+ }
+
+ // If prevMcc is invalid will make it different from mcc
+ // so we'll return true if the card exists.
+ int prevMcc;
+ try {
+ prevMcc = Integer.parseInt(prevOperatorNumeric.substring(0, 3));
+ } catch (Exception e) {
+ prevMcc = mcc + 1;
+ }
+
+ // Determine if the Icc card exists
+ IccCard iccCard = phoneBase.getIccCard();
+ boolean iccCardExist = (iccCard != null) && iccCard.getState().iccCardExist();
+
+ // Determine retVal
+ boolean retVal = ((iccCardExist && (mcc != prevMcc)) || needToFixTimeZone);
+ if (DBG) {
+ log("shouldFixTimeZoneNow: retVal=" + retVal +
+ " iccCard=" + iccCard +
+ " iccCard.state=" + (iccCard == null ? "null" : iccCard.getState().toString()) +
+ " iccCardExist=" + iccCardExist +
+ " operatorNumeric=" + operatorNumeric + " mcc=" + mcc +
+ " prevOperatorNumeric=" + prevOperatorNumeric + " prevMcc=" + prevMcc +
+ " needToFixTimeZone=" + needToFixTimeZone);
+ }
+ return retVal;
+ }
+
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
pw.println("ServiceStateTracker:");
pw.println(" ss=" + ss);
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
index ff7a0810a40f..297c2ac90974 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
@@ -377,12 +377,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, operatorNumeric);
if (operatorNumeric == null) {
- if (DBG) {
- log("pollStateDone: operatorNumeric=" + operatorNumeric +
- " prevOperatorNumeric=" + prevOperatorNumeric +
- " mNeedFixZone=" + mNeedFixZone +
- " clear PROPERTY_OPERATOR_ISO_COUNTRY");
- }
+ if (DBG) log("operatorNumeric is null");
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
mGotCountryCode = false;
} else {
@@ -396,20 +391,13 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
} catch (StringIndexOutOfBoundsException ex) {
loge("countryCodeForMcc error" + ex);
}
- if (DBG) {
- log("pollStateDone: operatorNumeric=" + operatorNumeric +
- " prevOperatorNumeric=" + prevOperatorNumeric +
- " mNeedFixZone=" + mNeedFixZone +
- " mcc=" + mcc + " iso-cc=" + isoCountryCode);
- }
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY,
isoCountryCode);
mGotCountryCode = true;
- // Fix the time zone If the operator changed or we need to fix it because
- // when the NITZ time came in we didn't know the country code.
- if ( ! operatorNumeric.equals(prevOperatorNumeric) || mNeedFixZone) {
+ if (shouldFixTimeZoneNow(phone, operatorNumeric, prevOperatorNumeric,
+ mNeedFixZone)) {
fixTimeZone(isoCountryCode);
}
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
index b694e0a4c62c..ba2e51a2353e 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
@@ -904,9 +904,11 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
if (getAutoTimeZone()) {
setAndBroadcastNetworkSetTimeZone(zone.getID());
} else {
- log("fixTimeZone: zone == null");
+ log("fixTimeZone: skip changing zone as getAutoTimeZone was false");
}
saveNitzTimeZone(zone.getID());
+ } else {
+ log("fixTimeZone: zone == null, do nothing for zone");
}
}
@@ -1003,12 +1005,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, operatorNumeric);
if (operatorNumeric == null) {
- if (DBG) {
- log("pollStateDone: operatorNumeric=" + operatorNumeric +
- " prevOperatorNumeric=" + prevOperatorNumeric +
- " mNeedFixZone=" + mNeedFixZone +
- " clear PROPERTY_OPERATOR_ISO_COUNTRY");
- }
+ if (DBG) log("operatorNumeric is null");
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
mGotCountryCode = false;
} else {
@@ -1022,20 +1019,13 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
} catch ( StringIndexOutOfBoundsException ex) {
loge("pollStateDone: countryCodeForMcc error" + ex);
}
- if (DBG) {
- log("pollStateDone: operatorNumeric=" + operatorNumeric +
- " prevOperatorNumeric=" + prevOperatorNumeric +
- " mNeedFixZone=" + mNeedFixZone +
- " mcc=" + mcc + " iso-cc=" + isoCountryCode);
- }
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY,
isoCountryCode);
mGotCountryCode = true;
- // Fix the time zone If the operator changed or we need to fix it because
- // when the NITZ time came in we didn't know the country code.
- if ( ! operatorNumeric.equals(prevOperatorNumeric) || mNeedFixZone) {
+ if (shouldFixTimeZoneNow(phone, operatorNumeric, prevOperatorNumeric,
+ mNeedFixZone)) {
fixTimeZone(isoCountryCode);
}
}
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
index c0acf5b57e71..42355774dae9 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
@@ -21,6 +21,7 @@ import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.DataConnectionTracker;
import com.android.internal.telephony.EventLogTags;
import com.android.internal.telephony.IccCard;
+import com.android.internal.telephony.IccCardStatus;
import com.android.internal.telephony.MccTable;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.RestrictedState;
@@ -645,8 +646,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
String opNames[] = (String[])ar.result;
if (opNames != null && opNames.length >= 3) {
- newSS.setOperatorName (
- opNames[0], opNames[1], opNames[2]);
+ newSS.setOperatorName (opNames[0], opNames[1], opNames[2]);
}
break;
@@ -858,12 +858,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, operatorNumeric);
if (operatorNumeric == null) {
- if (DBG) {
- log("pollStateDone: operatorNumeric=" + operatorNumeric +
- " prevOperatorNumeric=" + prevOperatorNumeric +
- " mNeedFixZone=" + mNeedFixZone +
- " clear PROPERTY_OPERATOR_ISO_COUNTRY");
- }
+ if (DBG) log("operatorNumeric is null");
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
mGotCountryCode = false;
mNitzUpdatedTime = false;
@@ -877,12 +872,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
} catch ( StringIndexOutOfBoundsException ex) {
loge("pollStateDone: countryCodeForMcc error" + ex);
}
- if (DBG) {
- log("pollStateDone: operatorNumeric=" + operatorNumeric +
- " prevOperatorNumeric=" + prevOperatorNumeric +
- " mNeedFixZone=" + mNeedFixZone +
- " mcc=" + mcc + " iso-cc=" + iso);
- }
phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, iso);
mGotCountryCode = true;
@@ -916,9 +905,8 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
}
}
- // Fix the time zone If the operator changed or we need to fix it because
- // when the NITZ time came in we didn't know the country code.
- if ( ! operatorNumeric.equals(prevOperatorNumeric) || mNeedFixZone) {
+ if (shouldFixTimeZoneNow(phone, operatorNumeric, prevOperatorNumeric,
+ mNeedFixZone)) {
// If the offset is (0, false) and the timezone property
// is set, use the timezone property rather than
// GMT.
diff --git a/tests/BiDiTests/Android.mk b/tests/BiDiTests/AndroidPrivate.mk
index ae29fc262b13..ae29fc262b13 100644
--- a/tests/BiDiTests/Android.mk
+++ b/tests/BiDiTests/AndroidPrivate.mk
diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml
index 786cba36672d..9e103acefe23 100644
--- a/tests/HwAccelerationTest/AndroidManifest.xml
+++ b/tests/HwAccelerationTest/AndroidManifest.xml
@@ -658,6 +658,15 @@
</activity>
<activity
+ android:name="PathDestructionActivity"
+ android:label="_PathDestruction">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+
+ <activity
android:name="TransformsAndAnimationsActivity"
android:label="_TransformAnim">
<intent-filter>
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/PathDestructionActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/PathDestructionActivity.java
new file mode 100644
index 000000000000..4177725e3847
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/PathDestructionActivity.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.os.Bundle;
+import android.util.MathUtils;
+import android.view.View;
+
+/**
+ * The point of this test is to ensure that we can cause many paths to be created, drawn,
+ * and destroyed without causing hangs or crashes. This tests the native reference counting
+ * scheme in particular, because we should be able to have the Java-level path finalized
+ * without destroying the underlying native path object until we are done referencing it
+ * in pending DisplayLists.
+ */
+public class PathDestructionActivity extends Activity {
+
+ private static final int MIN_SIZE = 20;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ MyView view = new MyView(this);
+ setContentView(view);
+ }
+
+ private static class MyView extends View {
+ Paint strokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ Paint fillPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ Paint fillAndStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+
+ private MyView(Context context) {
+ super(context);
+ strokePaint.setStyle(Paint.Style.STROKE);
+ fillPaint.setStyle(Paint.Style.FILL);
+ fillAndStrokePaint.setStyle(Paint.Style.FILL_AND_STROKE);
+ }
+
+ private Path getRandomPath() {
+ float left, top, right, bottom;
+ left = MathUtils.random(getWidth() - MIN_SIZE);
+ top = MathUtils.random(getHeight() - MIN_SIZE);
+ right = left + MathUtils.random(getWidth() - left);
+ bottom = top + MathUtils.random(getHeight() - top);
+ Path path = new Path();
+ path.moveTo(left, top);
+ path.lineTo(right, top);
+ path.lineTo(right, bottom);
+ path.lineTo(left, bottom);
+ path.close();
+ return path;
+ }
+
+ private int getRandomColor() {
+ int red = MathUtils.random(255);
+ int green = MathUtils.random(255);
+ int blue = MathUtils.random(255);
+ return 0xff000000 | red << 16 | green << 8 | blue;
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ Path path;
+ for (int i = 0; i < 15; ++i) {
+ path = getRandomPath();
+ strokePaint.setColor(getRandomColor());
+ canvas.drawPath(path, strokePaint);
+ path = null;
+ path = getRandomPath();
+ fillPaint.setColor(getRandomColor());
+ canvas.drawPath(path, fillPaint);
+ path = null;
+ path = getRandomPath();
+ fillAndStrokePaint.setColor(getRandomColor());
+ canvas.drawPath(path, fillAndStrokePaint);
+ path = null;
+ }
+
+ invalidate();
+ }
+ }
+}
diff --git a/tools/makekeycodes/Android.mk b/tools/makekeycodes/Android.mk
deleted file mode 100644
index 401d44e9692b..000000000000
--- a/tools/makekeycodes/Android.mk
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright 2005 The Android Open Source Project
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- makekeycodes.cpp
-
-LOCAL_MODULE := makekeycodes
-
-include $(BUILD_HOST_EXECUTABLE)
-
-
diff --git a/tools/makekeycodes/makekeycodes.cpp b/tools/makekeycodes/makekeycodes.cpp
deleted file mode 100644
index 6ffbfb859ab8..000000000000
--- a/tools/makekeycodes/makekeycodes.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <androidfw/KeycodeLabels.h>
-
-int
-main(int argc, char** argv)
-{
- // TODO: Add full copyright.
- printf("// Copyright (C) 2008 The Android Open Source Project\n");
- printf("//\n");
- printf("// This file is generated by makekeycodes from the definitions.\n");
- printf("// in includes/ui/KeycodeLabels.h.\n");
- printf("//\n");
- printf("// If you modify this, your changes will be overwritten.\n");
- printf("\n");
- printf("pacakge android.os;\n");
- printf("\n");
- printf("public class KeyEvent\n");
- printf("{\n");
-
- for (int i=0; KEYCODES[i].literal != NULL; i++) {
- printf(" public static final int KEYCODE_%s = 0x%08x;\n",
- KEYCODES[i].literal, KEYCODES[i].value);
- }
-
- printf("\n");
- for (int i=0; FLAGS[i].literal != NULL; i++) {
- printf(" public static final int MODIFIER_%s = 0x%08x;\n",
- FLAGS[i].literal, FLAGS[i].value);
- }
-
- printf("}\n");
- return 0;
-}
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index b49f46c46aaa..b09920279e95 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -184,6 +184,9 @@ public class WifiStateMachine extends StateMachine {
private LinkProperties mLinkProperties;
+ /* Tracks sequence number on a periodic scan message */
+ private int mPeriodicScanToken = 0;
+
// Wakelock held during wifi start/stop and driver load/unload
private PowerManager.WakeLock mWakeLock;
@@ -331,6 +334,9 @@ public class WifiStateMachine extends StateMachine {
static final int CMD_SET_SUSPEND_OPTIMIZATIONS = BASE + 86;
/* Clear suspend mode optimizations in the driver */
static final int CMD_CLEAR_SUSPEND_OPTIMIZATIONS = BASE + 87;
+ /* When there are no saved networks, we do a periodic scan to notify user of
+ * an open network */
+ static final int CMD_NO_NETWORKS_PERIODIC_SCAN = BASE + 88;
/* arg1 values to CMD_STOP_PACKET_FILTERING and CMD_START_PACKET_FILTERING */
static final int MULTICAST_V6 = 1;
@@ -385,10 +391,11 @@ public class WifiStateMachine extends StateMachine {
private final int mDefaultFrameworkScanIntervalMs;
/**
- * Default supplicant scan interval in milliseconds.
- * {@link Settings.Secure#WIFI_SUPPLICANT_SCAN_INTERVAL_MS} can override this.
+ * Supplicant scan interval in milliseconds.
+ * Comes from {@link Settings.Secure#WIFI_SUPPLICANT_SCAN_INTERVAL_MS} or
+ * from the default config if the setting is not set
*/
- private final int mDefaultSupplicantScanIntervalMs;
+ private long mSupplicantScanIntervalMs;
/**
* Minimum time interval between enabling all networks.
@@ -568,9 +575,6 @@ public class WifiStateMachine extends StateMachine {
mDefaultFrameworkScanIntervalMs = mContext.getResources().getInteger(
com.android.internal.R.integer.config_wifi_framework_scan_interval);
- mDefaultSupplicantScanIntervalMs = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_wifi_supplicant_scan_interval);
-
mDriverStopDelayMs = mContext.getResources().getInteger(
com.android.internal.R.integer.config_wifi_driver_stop_delay);
@@ -1869,6 +1873,7 @@ public class WifiStateMachine extends StateMachine {
case WifiWatchdogStateMachine.POOR_LINK_DETECTED:
case WifiWatchdogStateMachine.GOOD_LINK_DETECTED:
case CMD_CLEAR_SUSPEND_OPTIMIZATIONS:
+ case CMD_NO_NETWORKS_PERIODIC_SCAN:
break;
case CMD_SET_SUSPEND_OPTIMIZATIONS:
mSuspendWakeLock.release();
@@ -2268,11 +2273,15 @@ public class WifiStateMachine extends StateMachine {
mIsScanMode = false;
/* Wifi is available as long as we have a connection to supplicant */
mNetworkInfo.setIsAvailable(true);
- /* Set scan interval */
- long supplicantScanIntervalMs = Settings.Secure.getLong(mContext.getContentResolver(),
+
+ int defaultInterval = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_wifi_supplicant_scan_interval);
+
+ mSupplicantScanIntervalMs = Settings.Secure.getLong(mContext.getContentResolver(),
Settings.Secure.WIFI_SUPPLICANT_SCAN_INTERVAL_MS,
- mDefaultSupplicantScanIntervalMs);
- mWifiNative.setScanInterval((int)supplicantScanIntervalMs / 1000);
+ defaultInterval);
+
+ mWifiNative.setScanInterval((int)mSupplicantScanIntervalMs / 1000);
}
@Override
public boolean processMessage(Message message) {
@@ -3273,11 +3282,39 @@ public class WifiStateMachine extends StateMachine {
} else {
setScanAlarm(true);
}
+
+ /**
+ * If we have no networks saved, the supplicant stops doing the periodic scan.
+ * The scans are useful to notify the user of the presence of an open network.
+ * Note that these are not wake up scans.
+ */
+ if (mWifiConfigStore.getConfiguredNetworks().size() == 0) {
+ sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,
+ ++mPeriodicScanToken, 0), mSupplicantScanIntervalMs);
+ }
}
@Override
public boolean processMessage(Message message) {
if (DBG) log(getName() + message.toString() + "\n");
+ boolean ret = HANDLED;
switch (message.what) {
+ case CMD_NO_NETWORKS_PERIODIC_SCAN:
+ if (message.arg1 == mPeriodicScanToken &&
+ mWifiConfigStore.getConfiguredNetworks().size() == 0) {
+ sendMessage(CMD_START_SCAN);
+ sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,
+ ++mPeriodicScanToken, 0), mSupplicantScanIntervalMs);
+ }
+ break;
+ case WifiManager.FORGET_NETWORK:
+ case CMD_REMOVE_NETWORK:
+ // Set up a delayed message here. After the forget/remove is handled
+ // the handled delayed message will determine if there is a need to
+ // scan and continue
+ sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,
+ ++mPeriodicScanToken, 0), mSupplicantScanIntervalMs);
+ ret = NOT_HANDLED;
+ break;
case CMD_SET_SCAN_MODE:
if (message.arg1 == SCAN_ONLY_MODE) {
mWifiNative.setScanResultHandling(message.arg1);
@@ -3304,25 +3341,28 @@ public class WifiStateMachine extends StateMachine {
StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
setNetworkDetailedState(WifiInfo.getDetailedStateOf(stateChangeResult.state));
/* ConnectModeState does the rest of the handling */
- return NOT_HANDLED;
+ ret = NOT_HANDLED;
+ break;
case CMD_START_SCAN:
/* Disable background scan temporarily during a regular scan */
if (mEnableBackgroundScan) {
mWifiNative.enableBackgroundScan(false);
}
/* Handled in parent state */
- return NOT_HANDLED;
+ ret = NOT_HANDLED;
+ break;
case WifiMonitor.SCAN_RESULTS_EVENT:
/* Re-enable background scan when a pending scan result is received */
if (mEnableBackgroundScan && mScanResultIsPending) {
mWifiNative.enableBackgroundScan(true);
}
/* Handled in parent state */
- return NOT_HANDLED;
+ ret = NOT_HANDLED;
+ break;
default:
- return NOT_HANDLED;
+ ret = NOT_HANDLED;
}
- return HANDLED;
+ return ret;
}
@Override