summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmds/bootanimation/BootAnimation.cpp223
-rw-r--r--cmds/bootanimation/BootAnimation.h24
-rw-r--r--core/java/android/hardware/camera2/DngCreator.java11
-rw-r--r--core/java/android/net/metrics/ValidationProbeEvent.java12
-rw-r--r--core/java/android/os/AsyncTask.java3
-rw-r--r--core/java/android/preference/Preference.java3
-rwxr-xr-xcore/java/android/provider/Settings.java81
-rw-r--r--core/java/android/view/View.java2
-rw-r--r--core/java/android/view/ViewConfiguration.java37
-rw-r--r--core/java/android/view/ViewRootImpl.java3
-rw-r--r--core/java/android/widget/AbsListView.java45
-rw-r--r--core/java/android/widget/HorizontalScrollView.java67
-rw-r--r--core/java/android/widget/ScrollView.java67
-rw-r--r--core/java/com/android/internal/app/AlertController.java3
-rw-r--r--core/java/com/android/internal/widget/WatchHeaderListView.java41
-rw-r--r--core/java/com/android/internal/widget/WatchListDecorLayout.java5
-rw-r--r--core/jni/android_util_AssetManager.cpp18
-rw-r--r--core/jni/fd_utils-inl.h37
-rw-r--r--core/res/assets/images/android-logo-mask.pngbin14395 -> 12104 bytes
-rw-r--r--core/res/assets/images/android-logo-shine.pngbin97831 -> 88700 bytes
-rw-r--r--core/res/assets/images/clock64.pngbin131490 -> 0 bytes
-rw-r--r--core/res/assets/images/clock_font.pngbin0 -> 12142 bytes
-rw-r--r--core/res/assets/sounds/bootanim0.rawbin79471 -> 0 bytes
-rw-r--r--core/res/assets/sounds/bootanim1.rawbin79392 -> 0 bytes
-rw-r--r--core/res/assets/webkit/hyph_en_US.dic9784
-rw-r--r--core/res/assets/webkit/incognito_mode_start_page.html24
-rw-r--r--core/res/assets/webkit/missingImage.pngbin456 -> 0 bytes
-rw-r--r--core/res/assets/webkit/nullPlugin.pngbin1552 -> 0 bytes
-rw-r--r--core/res/assets/webkit/play.pngbin64890 -> 0 bytes
-rw-r--r--core/res/assets/webkit/textAreaResizeCorner.pngbin182 -> 0 bytes
-rw-r--r--core/res/assets/webkit/togglePlugin.pngbin1009 -> 0 bytes
-rw-r--r--core/res/assets/webkit/youtube.html71
-rw-r--r--core/res/assets/webkit/youtube.pngbin1544 -> 0 bytes
-rw-r--r--core/res/res/anim-watch/progress_indeterminate_material.xml42
-rw-r--r--core/res/res/anim-watch/progress_indeterminate_rotation_material.xml24
-rw-r--r--core/res/res/anim/watch_switch_thumb_to_off_animation.xml36
-rw-r--r--core/res/res/anim/watch_switch_thumb_to_on_animation.xml37
-rw-r--r--core/res/res/color/watch_switch_thumb_color_material.xml10
-rw-r--r--core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_14w.pngbin0 -> 1188 bytes
-rw-r--r--core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_15w.pngbin0 -> 1122 bytes
-rw-r--r--core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_16w.pngbin0 -> 793 bytes
-rw-r--r--core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_17w.pngbin0 -> 1081 bytes
-rw-r--r--core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_18w.pngbin0 -> 1109 bytes
-rw-r--r--core/res/res/drawable-hdpi/watch_switch_track_mtrl_alpha.pngbin0 -> 910 bytes
-rw-r--r--core/res/res/drawable-nodpi/default_wallpaper.pngbin489912 -> 235 bytes
-rw-r--r--core/res/res/drawable-sw600dp-hdpi/unlock_wave.pngbin186896 -> 133 bytes
-rw-r--r--core/res/res/drawable-sw600dp-mdpi/unlock_wave.pngbin110079 -> 104 bytes
-rw-r--r--core/res/res/drawable-sw600dp-nodpi/default_wallpaper.pngbin1197339 -> 625 bytes
-rw-r--r--core/res/res/drawable-sw600dp-xhdpi/unlock_wave.pngbin256400 -> 176 bytes
-rw-r--r--core/res/res/drawable-sw720dp-nodpi/default_wallpaper.pngbin1930496 -> 974 bytes
-rw-r--r--core/res/res/drawable-watch/ic_input_extract_action_done.xml19
-rw-r--r--core/res/res/drawable-watch/ic_input_extract_action_send.xml24
-rw-r--r--core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_14w.pngbin0 -> 1568 bytes
-rw-r--r--core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_15w.pngbin0 -> 1467 bytes
-rw-r--r--core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_16w.pngbin0 -> 1418 bytes
-rw-r--r--core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_17w.pngbin0 -> 1330 bytes
-rw-r--r--core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_18w.pngbin0 -> 1438 bytes
-rw-r--r--core/res/res/drawable-xhdpi/watch_switch_track_mtrl_alpha.pngbin0 -> 1248 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_14w.pngbin0 -> 2415 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_15w.pngbin0 -> 2099 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_16w.pngbin0 -> 2118 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_17w.pngbin0 -> 2052 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_18w.pngbin0 -> 2207 bytes
-rw-r--r--core/res/res/drawable-xxhdpi/watch_switch_track_mtrl_alpha.pngbin0 -> 1992 bytes
-rw-r--r--core/res/res/drawable/watch_switch_thumb_material.xml27
-rw-r--r--core/res/res/drawable/watch_switch_thumb_material_anim.xml72
-rw-r--r--core/res/res/drawable/watch_switch_track_material.xml16
-rw-r--r--core/res/res/interpolator-watch/progress_indeterminate_rotation_interpolator.xml18
-rw-r--r--core/res/res/interpolator-watch/trim_end_interpolator.xml (renamed from core/res/res/values-round-watch/styles_material.xml)12
-rw-r--r--core/res/res/interpolator-watch/trim_offset_interpolator.xml (renamed from core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml)15
-rw-r--r--core/res/res/interpolator-watch/trim_start_interpolator.xml (renamed from core/res/res/drawable/watch_switch_thumb_to_off_anim_mtrl.xml)15
-rw-r--r--core/res/res/layout-notround-watch/alert_dialog_title_material.xml (renamed from core/res/res/layout-notround-watch/alert_dialog_header_micro.xml)7
-rw-r--r--core/res/res/layout-round-watch/alert_dialog_title_material.xml (renamed from core/res/res/layout-round-watch/alert_dialog_header_micro.xml)8
-rw-r--r--core/res/res/layout-watch/alert_dialog_material.xml8
-rw-r--r--core/res/res/layout-watch/date_picker_dialog.xml26
-rw-r--r--core/res/res/layout-watch/input_method_extract_view.xml2
-rw-r--r--core/res/res/layout-watch/preference_widget_switch.xml2
-rw-r--r--core/res/res/layout-watch/time_picker_dialog.xml26
-rw-r--r--core/res/res/layout/date_picker_legacy_holo.xml12
-rw-r--r--core/res/res/layout/number_picker_material.xml2
-rw-r--r--core/res/res/layout/time_picker_legacy_material.xml12
-rw-r--r--core/res/res/raw-ar-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-ar/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-bg-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-bg/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-ca-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-ca/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-cs-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-cs/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-da-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-da/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-de-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-de/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-el-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-el/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-en-rGB-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-en-rGB/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-es-rUS-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-es-rUS/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-es-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-es/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-fa-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-fa/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-fi-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-fi/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-fr-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-fr/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-hi-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-hi/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-hr-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-hr/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-hu-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-hu/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-id-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-id/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-it-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-it/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-iw-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-iw/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-ja-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-ja/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-ko-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-ko/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-lt-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-lt/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-lv-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-lv/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-nb-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-nb/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-nl-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-nl/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-pl-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-pl/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-pt-rPT-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-pt-rPT/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-pt-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-pt/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-ro-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-ro/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-ru-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-ru/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-sk-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-sk/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-sl-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-sl/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-sr-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-sr/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-sv-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-sv/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-th-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-th/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-tl-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-tl/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-tr-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-tr/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-uk-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-uk/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-vi-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-vi/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-xlarge/incognito_mode_start_page.html24
-rw-r--r--core/res/res/raw-zh-rCN-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-zh-rCN/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-zh-rTW-xlarge/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw-zh-rTW/incognito_mode_start_page.html19
-rw-r--r--core/res/res/raw/incognito_mode_start_page.html24
-rw-r--r--core/res/res/values-notround-watch/config_material.xml25
-rw-r--r--core/res/res/values-notround-watch/dimens.xml1
-rw-r--r--core/res/res/values-round-watch/config_material.xml6
-rw-r--r--core/res/res/values-round-watch/dimens.xml1
-rw-r--r--core/res/res/values-w180dp-notround-watch/dimens_material.xml36
-rw-r--r--core/res/res/values-w210dp-round-watch/dimens_material.xml36
-rw-r--r--core/res/res/values-w225dp/dimens_material.xml (renamed from core/res/res/values-notround-watch/styles_material.xml)6
-rw-r--r--core/res/res/values-watch/colors_material.xml2
-rw-r--r--core/res/res/values-watch/config.xml5
-rw-r--r--core/res/res/values-watch/config_material.xml3
-rw-r--r--core/res/res/values-watch/dimens_material.xml24
-rw-r--r--core/res/res/values-watch/integers.xml (renamed from core/res/res/layout-watch/number_picker_material.xml)20
-rw-r--r--core/res/res/values-watch/styles_material.xml21
-rw-r--r--core/res/res/values-watch/themes_material.xml13
-rw-r--r--core/res/res/values/attrs.xml2
-rw-r--r--core/res/res/values/config.xml59
-rw-r--r--core/res/res/values/config_material.xml6
-rw-r--r--core/res/res/values/dimens_material.xml4
-rw-r--r--core/res/res/values/integers.xml7
-rw-r--r--core/res/res/values/strings.xml8
-rw-r--r--core/res/res/values/styles.xml2
-rw-r--r--core/res/res/values/styles_material.xml18
-rw-r--r--core/res/res/values/symbols.xml11
-rw-r--r--core/res/res/values/themes_material.xml12
-rw-r--r--core/res/res/xml-watch/default_zen_mode_config.xml6
-rw-r--r--docs/html/guide/topics/manifest/provider-element.jd20
-rw-r--r--docs/html/guide/topics/ui/drag-drop.jd2
-rw-r--r--docs/html/guide/topics/ui/multi-window.jd2
-rw-r--r--docs/html/training/monitoring-device-state/battery-monitoring.jd9
-rw-r--r--docs/html/wear/images/partners/mkors.pngbin0 -> 9355 bytes
-rw-r--r--docs/html/wear/images/partners/nixon.pngbin0 -> 3813 bytes
-rw-r--r--docs/html/wear/images/partners/polar.pngbin0 -> 3418 bytes
-rw-r--r--docs/html/wear/index.jd9
-rw-r--r--docs/html/wear/preview/_book.yaml14
-rw-r--r--docs/html/wear/preview/api-overview.jd756
-rw-r--r--docs/html/wear/preview/behavior-changes.jd43
-rw-r--r--docs/html/wear/preview/downloads.jd145
-rw-r--r--docs/html/wear/preview/features/app-distribution.jd325
-rw-r--r--docs/html/wear/preview/features/bridger.jd230
-rw-r--r--docs/html/wear/preview/features/complications.jd580
-rw-r--r--docs/html/wear/preview/features/notifications.jd161
-rw-r--r--docs/html/wear/preview/features/standalone-apps.jd499
-rw-r--r--docs/html/wear/preview/features/wearable-recycler-view.jd223
-rw-r--r--docs/html/wear/preview/images/alignment.pngbin0 -> 54538 bytes
-rw-r--r--docs/html/wear/preview/images/apk-details.pngbin0 -> 11516 bytes
-rw-r--r--docs/html/wear/preview/images/apk-tabs.pngbin0 -> 22654 bytes
-rw-r--r--docs/html/wear/preview/images/center_align.pngbin0 -> 18248 bytes
-rw-r--r--docs/html/wear/preview/images/current-apk.pngbin0 -> 22639 bytes
-rw-r--r--docs/html/wear/preview/images/inline_action.pngbin0 -> 26246 bytes
-rw-r--r--docs/html/wear/preview/images/wrv_new.pngbin0 -> 35695 bytes
-rw-r--r--docs/html/wear/preview/program.jd5
-rw-r--r--docs/html/wear/preview/start.jd26
-rw-r--r--docs/html/wear/preview/support.jd311
-rw-r--r--include/androidfw/AssetManager.h7
-rw-r--r--libs/androidfw/AssetManager.cpp2
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java12
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java34
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java27
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/PackageReceiver.java14
-rw-r--r--packages/PrintSpooler/res/values-zh-rCN/strings.xml2
-rw-r--r--packages/SettingsLib/res/values-af/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-am/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-ar/strings.xml8
-rw-r--r--packages/SettingsLib/res/values-az-rAZ/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-b+sr+Latn/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-be-rBY/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-bg/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-bn-rBD/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-bs-rBA/strings.xml16
-rw-r--r--packages/SettingsLib/res/values-ca/strings.xml8
-rw-r--r--packages/SettingsLib/res/values-cs/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-da/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-de/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-el/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-en-rAU/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-en-rGB/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-en-rIN/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-es-rUS/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-es/strings.xml8
-rw-r--r--packages/SettingsLib/res/values-et-rEE/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-eu-rES/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-fa/strings.xml8
-rw-r--r--packages/SettingsLib/res/values-fi/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-fr-rCA/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-fr/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-gl-rES/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-gu-rIN/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-hi/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-hr/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-hu/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-hy-rAM/strings.xml10
-rw-r--r--packages/SettingsLib/res/values-in/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-is-rIS/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-it/strings.xml14
-rw-r--r--packages/SettingsLib/res/values-iw/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-ja/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ka-rGE/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-kk-rKZ/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-km-rKH/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-kn-rIN/strings.xml12
-rw-r--r--packages/SettingsLib/res/values-ko/strings.xml8
-rw-r--r--packages/SettingsLib/res/values-ky-rKG/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-lo-rLA/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-lt/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-lv/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-mk-rMK/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-ml-rIN/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-mn-rMN/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-mr-rIN/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-ms-rMY/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-my-rMM/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-nb/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-ne-rNP/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-nl/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-pa-rIN/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-pl/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-pt-rBR/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-pt-rPT/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-pt/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-ro/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-ru/strings.xml8
-rw-r--r--packages/SettingsLib/res/values-si-rLK/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-sk/strings.xml14
-rw-r--r--packages/SettingsLib/res/values-sl/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-sq-rAL/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-sr/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-sv/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-sw/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-ta-rIN/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-te-rIN/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-th/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-tl/strings.xml12
-rw-r--r--packages/SettingsLib/res/values-tr/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-uk/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-ur-rPK/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-uz-rUZ/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-vi/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-zh-rCN/strings.xml8
-rw-r--r--packages/SettingsLib/res/values-zh-rHK/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-zh-rTW/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-zu/strings.xml6
-rw-r--r--packages/SettingsProvider/res/values/defaults.xml3
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java18
-rw-r--r--packages/Shell/AndroidManifest.xml2
-rw-r--r--packages/SystemUI/res/values-bs-rBA-land/strings.xml2
-rw-r--r--packages/SystemUI/res/values-it/strings_car.xml2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java52
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/RemoteInputController.java89
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java46
-rw-r--r--packages/VpnDialogs/res/values-ro/strings.xml2
-rw-r--r--services/core/java/com/android/server/AnyMotionDetector.java61
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java2
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java3
-rw-r--r--services/core/java/com/android/server/am/BroadcastQueue.java10
-rw-r--r--services/core/java/com/android/server/am/CoreSettingsObserver.java1
-rw-r--r--services/core/java/com/android/server/connectivity/NetworkMonitor.java187
-rw-r--r--services/core/java/com/android/server/display/AutomaticBrightnessController.java21
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java25
-rw-r--r--services/core/java/com/android/server/display/HysteresisLevels.java104
-rw-r--r--services/core/java/com/android/server/lights/LightsService.java10
-rw-r--r--services/core/java/com/android/server/net/NetworkPolicyManagerService.java20
-rw-r--r--services/core/java/com/android/server/notification/NotificationManagerService.java3
-rw-r--r--services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java17
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerShellCommand.java15
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java128
-rw-r--r--services/core/java/com/android/server/power/PowerManagerService.java10
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java33
-rw-r--r--services/java/com/android/server/SystemServer.java32
-rw-r--r--services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java2
-rw-r--r--telephony/java/android/telephony/CarrierConfigManager.java30
336 files changed, 4838 insertions, 13067 deletions
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index a2d34e42f298..2fa1ee6b3869 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -68,15 +68,25 @@ static const char SYSTEM_ENCRYPTED_BOOTANIMATION_FILE[] = "/system/media/bootani
static const char SYSTEM_DATA_DIR_PATH[] = "/data/system";
static const char SYSTEM_TIME_DIR_NAME[] = "time";
static const char SYSTEM_TIME_DIR_PATH[] = "/data/system/time";
+static const char CLOCK_FONT_ASSET[] = "images/clock_font.png";
+static const char CLOCK_FONT_ZIP_NAME[] = "clock_font.png";
static const char LAST_TIME_CHANGED_FILE_NAME[] = "last_time_change";
static const char LAST_TIME_CHANGED_FILE_PATH[] = "/data/system/time/last_time_change";
static const char ACCURATE_TIME_FLAG_FILE_NAME[] = "time_is_accurate";
static const char ACCURATE_TIME_FLAG_FILE_PATH[] = "/data/system/time/time_is_accurate";
// Java timestamp format. Don't show the clock if the date is before 2000-01-01 00:00:00.
static const long long ACCURATE_TIME_EPOCH = 946684800000;
+static constexpr char FONT_BEGIN_CHAR = ' ';
+static constexpr char FONT_END_CHAR = '~' + 1;
+static constexpr size_t FONT_NUM_CHARS = FONT_END_CHAR - FONT_BEGIN_CHAR + 1;
+static constexpr size_t FONT_NUM_COLS = 16;
+static constexpr size_t FONT_NUM_ROWS = FONT_NUM_CHARS / FONT_NUM_COLS;
+static const int TEXT_CENTER_VALUE = INT_MAX;
+static const int TEXT_MISSING_VALUE = INT_MIN;
static const char EXIT_PROP_NAME[] = "service.bootanim.exit";
static const char PLAY_SOUND_PROP_NAME[] = "persist.sys.bootanim.play_sound";
static const int ANIM_ENTRY_NAME_MAX = 256;
+static constexpr size_t TEXT_POS_LEN_MAX = 16;
static const char BOOT_COMPLETED_PROP_NAME[] = "sys.boot_completed";
static const char BOOTREASON_PROP_NAME[] = "ro.boot.bootreason";
// bootreasons list in "system/core/bootstat/bootstat.cpp".
@@ -175,15 +185,14 @@ status_t BootAnimation::initTexture(Texture* texture, AssetManager& assets,
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+
return NO_ERROR;
}
-status_t BootAnimation::initTexture(const Animation::Frame& frame)
+status_t BootAnimation::initTexture(FileMap* map, int* width, int* height)
{
- //StopWatch watch("blah");
-
SkBitmap bitmap;
- SkMemoryStream stream(frame.map->getDataPtr(), frame.map->getDataLength());
+ SkMemoryStream stream(map->getDataPtr(), map->getDataLength());
SkImageDecoder* codec = SkImageDecoder::Factory(&stream);
if (codec != NULL) {
codec->setDitherImage(false);
@@ -196,7 +205,7 @@ status_t BootAnimation::initTexture(const Animation::Frame& frame)
// FileMap memory is never released until application exit.
// Release it now as the texture is already loaded and the memory used for
// the packed resource can be released.
- delete frame.map;
+ delete map;
// ensure we can call getPixels(). No need to call unlock, since the
// bitmap will go out of scope when we return from this method.
@@ -242,6 +251,9 @@ status_t BootAnimation::initTexture(const Animation::Frame& frame)
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
+ *width = w;
+ *height = h;
+
return NO_ERROR;
}
@@ -404,7 +416,6 @@ bool BootAnimation::android()
return false;
}
-
void BootAnimation::checkExit() {
// Allow surface flinger to gracefully request shutdown
char value[PROPERTY_VALUE_MAX];
@@ -415,6 +426,47 @@ void BootAnimation::checkExit() {
}
}
+bool BootAnimation::validClock(const Animation::Part& part) {
+ return part.clockPosX != TEXT_MISSING_VALUE && part.clockPosY != TEXT_MISSING_VALUE;
+}
+
+bool parseTextCoord(const char* str, int* dest) {
+ if (strcmp("c", str) == 0) {
+ *dest = TEXT_CENTER_VALUE;
+ return true;
+ }
+
+ char* end;
+ int val = (int) strtol(str, &end, 0);
+ if (end == str || *end != '\0' || val == INT_MAX || val == INT_MIN) {
+ return false;
+ }
+ *dest = val;
+ return true;
+}
+
+// Parse two position coordinates. If only string is non-empty, treat it as the y value.
+void parsePosition(const char* str1, const char* str2, int* x, int* y) {
+ bool success = false;
+ if (strlen(str1) == 0) { // No values were specified
+ // success = false
+ } else if (strlen(str2) == 0) { // we have only one value
+ if (parseTextCoord(str1, y)) {
+ *x = TEXT_CENTER_VALUE;
+ success = true;
+ }
+ } else {
+ if (parseTextCoord(str1, x) && parseTextCoord(str2, y)) {
+ success = true;
+ }
+ }
+
+ if (!success) {
+ *x = TEXT_MISSING_VALUE;
+ *y = TEXT_MISSING_VALUE;
+ }
+}
+
// Parse a color represented as an HTML-style 'RRGGBB' string: each pair of
// characters in str is a hex number in [0, 255], which are converted to
// floating point values in the range [0.0, 1.0] and placed in the
@@ -461,69 +513,105 @@ static bool readFile(ZipFileRO* zip, const char* name, String8& outString)
return true;
}
-// The time glyphs are stored in a single image of height 64 pixels. Each digit is 40 pixels wide,
-// and the colon character is half that at 20 pixels. The glyph order is '0123456789:'.
-// We render 24 hour time.
-void BootAnimation::drawTime(const Texture& clockTex, const int yPos) {
- static constexpr char TIME_FORMAT[] = "%H:%M";
- static constexpr int TIME_LENGTH = sizeof(TIME_FORMAT);
+// The font image should be a 96x2 array of character images. The
+// columns are the printable ASCII characters 0x20 - 0x7f. The
+// top row is regular text; the bottom row is bold.
+status_t BootAnimation::initFont(Font* font, const char* fallback) {
+ status_t status = NO_ERROR;
- static constexpr int DIGIT_HEIGHT = 64;
- static constexpr int DIGIT_WIDTH = 40;
- static constexpr int COLON_WIDTH = DIGIT_WIDTH / 2;
- static constexpr int TIME_WIDTH = (DIGIT_WIDTH * 4) + COLON_WIDTH;
+ if (font->map != nullptr) {
+ glGenTextures(1, &font->texture.name);
+ glBindTexture(GL_TEXTURE_2D, font->texture.name);
- if (clockTex.h < DIGIT_HEIGHT || clockTex.w < (10 * DIGIT_WIDTH + COLON_WIDTH)) {
- ALOGE("Clock texture is too small; abandoning boot animation clock");
- mClockEnabled = false;
- return;
+ status = initTexture(font->map, &font->texture.w, &font->texture.h);
+
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ } else if (fallback != nullptr) {
+ status = initTexture(&font->texture, mAssets, fallback);
+ } else {
+ return NO_INIT;
}
- time_t rawtime;
- time(&rawtime);
- struct tm* timeInfo = localtime(&rawtime);
+ if (status == NO_ERROR) {
+ font->char_width = font->texture.w / FONT_NUM_COLS;
+ font->char_height = font->texture.h / FONT_NUM_ROWS / 2; // There are bold and regular rows
+ }
- char timeBuff[TIME_LENGTH];
- size_t length = strftime(timeBuff, TIME_LENGTH, TIME_FORMAT, timeInfo);
+ return status;
+}
- if (length != TIME_LENGTH - 1) {
- ALOGE("Couldn't format time; abandoning boot animation clock");
- mClockEnabled = false;
- return;
+void BootAnimation::drawText(const char* str, const Font& font, bool bold, int* x, int* y) {
+ glEnable(GL_BLEND); // Allow us to draw on top of the animation
+ glBindTexture(GL_TEXTURE_2D, font.texture.name);
+
+ const int len = strlen(str);
+ const int strWidth = font.char_width * len;
+
+ if (*x == TEXT_CENTER_VALUE) {
+ *x = (mWidth - strWidth) / 2;
+ } else if (*x < 0) {
+ *x = mWidth + *x - strWidth;
+ }
+ if (*y == TEXT_CENTER_VALUE) {
+ *y = (mHeight - font.char_height) / 2;
+ } else if (*y < 0) {
+ *y = mHeight + *y - font.char_height;
}
- glEnable(GL_BLEND); // Allow us to draw on top of the animation
- glBindTexture(GL_TEXTURE_2D, clockTex.name);
+ int cropRect[4] = { 0, 0, font.char_width, -font.char_height };
- int xPos = (mWidth - TIME_WIDTH) / 2;
- int cropRect[4] = { 0, DIGIT_HEIGHT, DIGIT_WIDTH, -DIGIT_HEIGHT };
+ for (int i = 0; i < len; i++) {
+ char c = str[i];
- for (int i = 0; i < TIME_LENGTH - 1; i++) {
- char c = timeBuff[i];
- int width = DIGIT_WIDTH;
- int pos = c - '0'; // Position in the character list
- if (pos < 0 || pos > 10) {
- continue;
- }
- if (c == ':') {
- width = COLON_WIDTH;
+ if (c < FONT_BEGIN_CHAR || c > FONT_END_CHAR) {
+ c = '?';
}
// Crop the texture to only the pixels in the current glyph
- int left = pos * DIGIT_WIDTH;
- cropRect[0] = left;
- cropRect[2] = width;
+ const int charPos = (c - FONT_BEGIN_CHAR); // Position in the list of valid characters
+ const int row = charPos / FONT_NUM_COLS;
+ const int col = charPos % FONT_NUM_COLS;
+ cropRect[0] = col * font.char_width; // Left of column
+ cropRect[1] = row * font.char_height * 2; // Top of row
+ // Move down to bottom of regular (one char_heigh) or bold (two char_heigh) line
+ cropRect[1] += bold ? 2 * font.char_height : font.char_height;
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, cropRect);
- glDrawTexiOES(xPos, yPos, 0, width, DIGIT_HEIGHT);
+ glDrawTexiOES(*x, *y, 0, font.char_width, font.char_height);
- xPos += width;
+ *x += font.char_width;
}
glDisable(GL_BLEND); // Return to the animation's default behaviour
glBindTexture(GL_TEXTURE_2D, 0);
}
+// We render 24 hour time.
+void BootAnimation::drawClock(const Font& font, const int xPos, const int yPos) {
+ static constexpr char TIME_FORMAT[] = "%H:%M";
+ static constexpr int TIME_LENGTH = 6;
+
+ time_t rawtime;
+ time(&rawtime);
+ struct tm* timeInfo = localtime(&rawtime);
+
+ char timeBuff[TIME_LENGTH];
+ size_t length = strftime(timeBuff, TIME_LENGTH, TIME_FORMAT, timeInfo);
+
+ if (length != TIME_LENGTH - 1) {
+ ALOGE("Couldn't format time; abandoning boot animation clock");
+ mClockEnabled = false;
+ return;
+ }
+
+ int x = xPos;
+ int y = yPos;
+ drawText(timeBuff, font, false, &x, &y);
+}
+
bool BootAnimation::parseAnimationDesc(Animation& animation)
{
String8 desString;
@@ -544,9 +632,10 @@ bool BootAnimation::parseAnimationDesc(Animation& animation)
int height = 0;
int count = 0;
int pause = 0;
- int clockPosY = -1;
char path[ANIM_ENTRY_NAME_MAX];
char color[7] = "000000"; // default to black if unspecified
+ char clockPos1[TEXT_POS_LEN_MAX + 1] = "";
+ char clockPos2[TEXT_POS_LEN_MAX + 1] = "";
char pathType;
if (sscanf(l, "%d %d %d", &width, &height, &fps) == 3) {
@@ -554,15 +643,15 @@ bool BootAnimation::parseAnimationDesc(Animation& animation)
animation.width = width;
animation.height = height;
animation.fps = fps;
- } else if (sscanf(l, " %c %d %d %s #%6s %d",
- &pathType, &count, &pause, path, color, &clockPosY) >= 4) {
- // ALOGD("> type=%c, count=%d, pause=%d, path=%s, color=%s, clockPosY=%d", pathType, count, pause, path, color, clockPosY);
+ } else if (sscanf(l, " %c %d %d %s #%6s %16s %16s",
+ &pathType, &count, &pause, path, color, clockPos1, clockPos2) >= 4) {
+ //ALOGD("> type=%c, count=%d, pause=%d, path=%s, color=%s, clockPos1=%s, clockPos2=%s",
+ // pathType, count, pause, path, color, clockPos1, clockPos2);
Animation::Part part;
part.playUntilComplete = pathType == 'c';
part.count = count;
part.pause = pause;
part.path = path;
- part.clockPosY = clockPosY;
part.audioData = NULL;
part.animation = NULL;
if (!parseColor(color, part.backgroundColor)) {
@@ -571,6 +660,7 @@ bool BootAnimation::parseAnimationDesc(Animation& animation)
part.backgroundColor[1] = 0.0f;
part.backgroundColor[2] = 0.0f;
}
+ parsePosition(clockPos1, clockPos2, &part.clockPosX, &part.clockPosY);
animation.parts.add(part);
}
else if (strcmp(l, "$SYSTEM") == 0) {
@@ -614,6 +704,14 @@ bool BootAnimation::preloadZip(Animation& animation)
const String8 path(entryName.getPathDir());
const String8 leaf(entryName.getPathLeaf());
if (leaf.size() > 0) {
+ if (entryName == CLOCK_FONT_ZIP_NAME) {
+ FileMap* map = zip->createEntryFileMap(entry);
+ if (map) {
+ animation.clockFont.map = map;
+ }
+ continue;
+ }
+
for (size_t j = 0; j < pcount; j++) {
if (path == animation.parts[j].path) {
uint16_t method;
@@ -698,7 +796,7 @@ bool BootAnimation::movie()
bool anyPartHasClock = false;
for (size_t i=0; i < animation->parts.size(); i++) {
- if(animation->parts[i].clockPosY >= 0) {
+ if(validClock(animation->parts[i])) {
anyPartHasClock = true;
break;
}
@@ -736,10 +834,11 @@ bool BootAnimation::movie()
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- bool clockTextureInitialized = false;
+ bool clockFontInitialized = false;
if (mClockEnabled) {
- clockTextureInitialized = (initTexture(&mClock, mAssets, "images/clock64.png") == NO_ERROR);
- mClockEnabled = clockTextureInitialized;
+ clockFontInitialized =
+ (initFont(&animation->clockFont, CLOCK_FONT_ASSET) == NO_ERROR);
+ mClockEnabled = clockFontInitialized;
}
if (mClockEnabled && !updateIsTimeAccurate()) {
@@ -756,8 +855,8 @@ bool BootAnimation::movie()
releaseAnimation(animation);
- if (clockTextureInitialized) {
- glDeleteTextures(1, &mClock.name);
+ if (clockFontInitialized) {
+ glDeleteTextures(1, &animation->clockFont.texture.name);
}
return false;
@@ -813,7 +912,8 @@ bool BootAnimation::playAnimation(const Animation& animation)
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
- initTexture(frame);
+ int w, h;
+ initTexture(frame.map, &w, &h);
}
const int xc = animationX + frame.trimX;
@@ -835,8 +935,8 @@ bool BootAnimation::playAnimation(const Animation& animation)
// which is equivalent to mHeight - (yc + frame.trimHeight)
glDrawTexiOES(xc, mHeight - (yc + frame.trimHeight),
0, frame.trimWidth, frame.trimHeight);
- if (mClockEnabled && mTimeIsAccurate && part.clockPosY >= 0) {
- drawTime(mClock, part.clockPosY);
+ if (mClockEnabled && mTimeIsAccurate && validClock(part)) {
+ drawClock(animation.clockFont, part.clockPosX, part.clockPosY);
}
eglSwapBuffers(mDisplay, mSurface);
@@ -915,6 +1015,7 @@ BootAnimation::Animation* BootAnimation::loadAnimation(const String8& fn)
Animation *animation = new Animation;
animation->fileName = fn;
animation->zip = zip;
+ animation->clockFont.map = nullptr;
mLoadedFiles.add(animation->fileName);
parseAnimationDesc(*animation);
diff --git a/cmds/bootanimation/BootAnimation.h b/cmds/bootanimation/BootAnimation.h
index fd497a362fc7..42759f1acf0d 100644
--- a/cmds/bootanimation/BootAnimation.h
+++ b/cmds/bootanimation/BootAnimation.h
@@ -74,6 +74,13 @@ private:
GLuint name;
};
+ struct Font {
+ FileMap* map;
+ Texture texture;
+ int char_width;
+ int char_height;
+ };
+
struct Animation {
struct Frame {
String8 name;
@@ -90,8 +97,12 @@ private:
struct Part {
int count; // The number of times this part should repeat, 0 for infinite
int pause; // The number of frames to pause for at the end of this part
- int clockPosY; // The y position of the clock, in pixels, from the bottom of the
- // display (the clock is centred horizontally). -1 to disable the clock
+ int clockPosX; // The x position of the clock, in pixels. Positive values offset from
+ // the left of the screen, negative values offset from the right.
+ int clockPosY; // The y position of the clock, in pixels. Positive values offset from
+ // the bottom of the screen, negative values offset from the top.
+ // If either of the above are INT_MIN the clock is disabled, if INT_MAX
+ // the clock is centred on that axis.
String8 path;
String8 trimData;
SortedVector<Frame> frames;
@@ -108,13 +119,17 @@ private:
String8 audioConf;
String8 fileName;
ZipFileRO* zip;
+ Font clockFont;
};
status_t initTexture(Texture* texture, AssetManager& asset, const char* name);
- status_t initTexture(const Animation::Frame& frame);
+ status_t initTexture(FileMap* map, int* width, int* height);
+ status_t initFont(Font* font, const char* fallback);
bool android();
bool movie();
- void drawTime(const Texture& clockTex, const int yPos);
+ void drawText(const char* str, const Font& font, bool bold, int* x, int* y);
+ void drawClock(const Font& font, const int xPos, const int yPos);
+ bool validClock(const Animation::Part& part);
Animation* loadAnimation(const String8&);
bool playAnimation(const Animation&);
void releaseAnimation(Animation*) const;
@@ -127,7 +142,6 @@ private:
sp<SurfaceComposerClient> mSession;
AssetManager mAssets;
Texture mAndroid[2];
- Texture mClock;
int mWidth;
int mHeight;
bool mUseNpotTextures = false;
diff --git a/core/java/android/hardware/camera2/DngCreator.java b/core/java/android/hardware/camera2/DngCreator.java
index 45fa15e043e5..1a51acd6c5ec 100644
--- a/core/java/android/hardware/camera2/DngCreator.java
+++ b/core/java/android/hardware/camera2/DngCreator.java
@@ -119,8 +119,14 @@ public final class DngCreator implements AutoCloseable {
captureTime = timestamp / 1000000 + timeOffset;
}
+ // Create this fresh each time since the time zone may change while a long-running application
+ // is active.
+ final DateFormat dateTimeStampFormat =
+ new SimpleDateFormat(TIFF_DATETIME_FORMAT);
+ dateTimeStampFormat.setTimeZone(TimeZone.getDefault());
+
// Format for metadata
- String formattedCaptureTime = sDateTimeStampFormat.format(captureTime);
+ String formattedCaptureTime = dateTimeStampFormat.format(captureTime);
nativeInit(characteristics.getNativeCopy(), metadata.getNativeCopy(),
formattedCaptureTime);
@@ -467,13 +473,10 @@ public final class DngCreator implements AutoCloseable {
private static final String GPS_DATE_FORMAT_STR = "yyyy:MM:dd";
private static final String TIFF_DATETIME_FORMAT = "yyyy:MM:dd HH:mm:ss";
private static final DateFormat sExifGPSDateStamp = new SimpleDateFormat(GPS_DATE_FORMAT_STR);
- private static final DateFormat sDateTimeStampFormat =
- new SimpleDateFormat(TIFF_DATETIME_FORMAT);
private final Calendar mGPSTimeStampCalendar = Calendar
.getInstance(TimeZone.getTimeZone("UTC"));
static {
- sDateTimeStampFormat.setTimeZone(TimeZone.getDefault());
sExifGPSDateStamp.setTimeZone(TimeZone.getTimeZone("UTC"));
}
diff --git a/core/java/android/net/metrics/ValidationProbeEvent.java b/core/java/android/net/metrics/ValidationProbeEvent.java
index 331cf0cdd4ad..1a31b56f1ffb 100644
--- a/core/java/android/net/metrics/ValidationProbeEvent.java
+++ b/core/java/android/net/metrics/ValidationProbeEvent.java
@@ -34,10 +34,12 @@ import java.lang.annotation.RetentionPolicy;
@SystemApi
public final class ValidationProbeEvent implements Parcelable {
- public static final int PROBE_DNS = 0;
- public static final int PROBE_HTTP = 1;
- public static final int PROBE_HTTPS = 2;
- public static final int PROBE_PAC = 3;
+ public static final int PROBE_DNS = 0;
+ public static final int PROBE_HTTP = 1;
+ public static final int PROBE_HTTPS = 2;
+ public static final int PROBE_PAC = 3;
+ /** {@hide} */
+ public static final int PROBE_FALLBACK = 4;
public static final int DNS_FAILURE = 0;
public static final int DNS_SUCCESS = 1;
@@ -57,7 +59,7 @@ public final class ValidationProbeEvent implements Parcelable {
public final @ProbeType int probeType;
public final @ReturnCode int returnCode;
- /** @hide */
+ /** {@hide} */
public ValidationProbeEvent(
int netId, long durationMs, @ProbeType int probeType, @ReturnCode int returnCode) {
this.netId = netId;
diff --git a/core/java/android/os/AsyncTask.java b/core/java/android/os/AsyncTask.java
index 9a4b599f0e9b..fea64ec5ee1e 100644
--- a/core/java/android/os/AsyncTask.java
+++ b/core/java/android/os/AsyncTask.java
@@ -304,6 +304,9 @@ public abstract class AsyncTask<Params, Progress, Result> {
//noinspection unchecked
result = doInBackground(mParams);
Binder.flushPendingCommands();
+ } catch (Throwable tr) {
+ mCancelled.set(true);
+ throw tr;
} finally {
postResult(result);
}
diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java
index b1cad0538d31..ec1e102c9289 100644
--- a/core/java/android/preference/Preference.java
+++ b/core/java/android/preference/Preference.java
@@ -719,6 +719,9 @@ public class Preference implements Comparable<Preference> {
* @see #setIcon(Drawable)
*/
public Drawable getIcon() {
+ if (mIcon == null && mIconResId != 0) {
+ mIcon = getContext().getDrawable(mIconResId);
+ }
return mIcon;
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index c9b03cc2db02..17f9bad828de 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -5357,6 +5357,13 @@ public final class Settings {
public static final String LONG_PRESS_TIMEOUT = "long_press_timeout";
/**
+ * The duration in milliseconds between the first tap's up event and the second tap's
+ * down event for an interaction to be considered part of the same multi-press.
+ * @hide
+ */
+ public static final String MULTI_PRESS_TIMEOUT = "multi_press_timeout";
+
+ /**
* List of the enabled print services.
*
* N and beyond uses {@link #DISABLED_PRINT_SERVICES}. But this might be used in an upgrade
@@ -5929,6 +5936,36 @@ public final class Settings {
INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF;
/**
+ * What happens when the user presses the Back button while in-call
+ * and the screen is on.<br/>
+ * <b>Values:</b><br/>
+ * 0 - The Back buttons does nothing different.<br/>
+ * 1 - The Back button hangs up the current call.<br/>
+ *
+ * @hide
+ */
+ public static final String INCALL_BACK_BUTTON_BEHAVIOR = "incall_back_button_behavior";
+
+ /**
+ * INCALL_BACK_BUTTON_BEHAVIOR value for no action.
+ * @hide
+ */
+ public static final int INCALL_BACK_BUTTON_BEHAVIOR_NONE = 0x0;
+
+ /**
+ * INCALL_BACK_BUTTON_BEHAVIOR value for "hang up".
+ * @hide
+ */
+ public static final int INCALL_BACK_BUTTON_BEHAVIOR_HANGUP = 0x1;
+
+ /**
+ * INCALL_POWER_BUTTON_BEHAVIOR default value.
+ * @hide
+ */
+ public static final int INCALL_BACK_BUTTON_BEHAVIOR_DEFAULT =
+ INCALL_BACK_BUTTON_BEHAVIOR_NONE;
+
+ /**
* Whether the device should wake when the wake gesture sensor detects motion.
* @hide
*/
@@ -7960,12 +7997,37 @@ public final class Settings {
/**
* The server used for captive portal detection upon a new conection. A
* 204 response code from the server is used for validation.
+ * TODO: remove this deprecated symbol.
*
* @hide
*/
public static final String CAPTIVE_PORTAL_SERVER = "captive_portal_server";
/**
+ * The URL used for HTTPS captive portal detection upon a new connection.
+ * A 204 response code from the server is used for validation.
+ *
+ * @hide
+ */
+ public static final String CAPTIVE_PORTAL_HTTPS_URL = "captive_portal_https_url";
+
+ /**
+ * The URL used for HTTP captive portal detection upon a new connection.
+ * A 204 response code from the server is used for validation.
+ *
+ * @hide
+ */
+ public static final String CAPTIVE_PORTAL_HTTP_URL = "captive_portal_http_url";
+
+ /**
+ * The URL used for fallback HTTP captive portal detection when previous HTTP
+ * and HTTPS captive portal detection attemps did not return a conclusive answer.
+ *
+ * @hide
+ */
+ public static final String CAPTIVE_PORTAL_FALLBACK_URL = "captive_portal_fallback_url";
+
+ /**
* Whether to use HTTPS for network validation. This is enabled by default and the setting
* needs to be set to 0 to disable it. This setting is a misnomer because captive portals
* don't actually use HTTPS, but it's consistent with the other settings.
@@ -7975,6 +8037,14 @@ public final class Settings {
public static final String CAPTIVE_PORTAL_USE_HTTPS = "captive_portal_use_https";
/**
+ * Which User-Agent string to use in the header of the captive portal detection probes.
+ * The User-Agent field is unset when this setting has no value (HttpUrlConnection default).
+ *
+ * @hide
+ */
+ public static final String CAPTIVE_PORTAL_USER_AGENT = "captive_portal_user_agent";
+
+ /**
* Whether network service discovery is enabled.
*
* @hide
@@ -8685,7 +8755,7 @@ public final class Settings {
public static final String WFC_IMS_ENABLED = "wfc_ims_enabled";
/**
- * WFC Mode.
+ * WFC mode on home/non-roaming network.
* <p>
* Type: int - 2=Wi-Fi preferred, 1=Cellular preferred, 0=Wi-Fi only
*
@@ -8694,6 +8764,15 @@ public final class Settings {
public static final String WFC_IMS_MODE = "wfc_ims_mode";
/**
+ * WFC mode on roaming network.
+ * <p>
+ * Type: int - see {@link WFC_IMS_MODE} for values
+ *
+ * @hide
+ */
+ public static final String WFC_IMS_ROAMING_MODE = "wfc_ims_roaming_mode";
+
+ /**
* Whether WFC roaming is enabled
* <p>
* Type: int (0 for false, 1 for true)
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 972208363933..38e24bc0f89b 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -23911,7 +23911,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* on the screen.
*/
private boolean shouldDrawRoundScrollbar() {
- if (!mResources.getConfiguration().isScreenRound()) {
+ if (!mResources.getConfiguration().isScreenRound() || mAttachInfo == null) {
return false;
}
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index 4d584a3df4fb..8b8525f2f1b5 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.SystemApi;
import android.app.AppGlobals;
import android.content.Context;
import android.content.res.Configuration;
@@ -64,6 +65,12 @@ public class ViewConfiguration {
private static final int DEFAULT_LONG_PRESS_TIMEOUT = 500;
/**
+ * Defines the default duration in milliseconds between the first tap's up event and the second
+ * tap's down event for an interaction to be considered part of the same multi-press.
+ */
+ private static final int DEFAULT_MULTI_PRESS_TIMEOUT = 300;
+
+ /**
* Defines the time between successive key repeats in milliseconds.
*/
private static final int KEY_REPEAT_DELAY = 50;
@@ -213,6 +220,12 @@ public class ViewConfiguration {
private static final int OVERFLING_DISTANCE = 6;
/**
+ * Amount to scroll in response to a {@link MotionEvent#ACTION_SCROLL} event, in dips per
+ * axis value.
+ */
+ private static final int SCROLL_FACTOR = 64;
+
+ /**
* Default duration to hide an action mode for.
*/
private static final long ACTION_MODE_HIDE_DURATION_DEFAULT = 2000;
@@ -240,6 +253,7 @@ public class ViewConfiguration {
private final int mOverflingDistance;
private final boolean mFadingMarqueeEnabled;
private final long mGlobalActionsKeyTimeout;
+ private final int mScrollFactor;
private boolean sHasPermanentMenuKey;
private boolean sHasPermanentMenuKeySet;
@@ -268,6 +282,7 @@ public class ViewConfiguration {
mOverflingDistance = OVERFLING_DISTANCE;
mFadingMarqueeEnabled = true;
mGlobalActionsKeyTimeout = GLOBAL_ACTIONS_KEY_TIMEOUT;
+ mScrollFactor = SCROLL_FACTOR;
}
/**
@@ -351,6 +366,8 @@ public class ViewConfiguration {
com.android.internal.R.dimen.config_viewMaxFlingVelocity);
mGlobalActionsKeyTimeout = res.getInteger(
com.android.internal.R.integer.config_globalActionsKeyTimeout);
+ mScrollFactor = res.getDimensionPixelSize(
+ com.android.internal.R.dimen.config_scrollFactor);
}
/**
@@ -441,6 +458,16 @@ public class ViewConfiguration {
}
/**
+ * @return the duration in milliseconds between the first tap's up event and the second tap's
+ * down event for an interaction to be considered part of the same multi-press.
+ * @hide
+ */
+ public static int getMultiPressTimeout() {
+ return AppGlobals.getIntCoreSetting(Settings.Secure.MULTI_PRESS_TIMEOUT,
+ DEFAULT_MULTI_PRESS_TIMEOUT);
+ }
+
+ /**
* @return the time before the first key repeat in milliseconds.
*/
public static int getKeyRepeatTimeout() {
@@ -653,6 +680,16 @@ public class ViewConfiguration {
}
/**
+ * @return Amount to scroll in response to a {@link MotionEvent#ACTION_SCROLL} event. Multiply
+ * this by the event's axis value to obtain the number of pixels to be scrolled.
+ * @hide
+ * @SystemApi
+ */
+ public int getScaledScrollFactor() {
+ return mScrollFactor;
+ }
+
+ /**
* The maximum drawing cache size expressed in bytes.
*
* @return the maximum size of View's drawing cache expressed in bytes
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index e95fa5e6a2ee..f761b9b4ea14 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -6080,7 +6080,8 @@ public final class ViewRootImpl implements ViewParent,
return true;
}
return mEvent instanceof MotionEvent
- && mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER);
+ && (mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER)
+ || mEvent.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER));
}
public boolean shouldSendToSynthesizer() {
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 7b45d8cb05b0..f1bfadee5f36 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -21,6 +21,7 @@ import android.annotation.DrawableRes;
import android.annotation.NonNull;
import android.content.Context;
import android.content.Intent;
+import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
@@ -616,6 +617,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
private int mTouchSlop;
private float mDensityScale;
+ private float mScrollFactor;
+
private InputConnection mDefInputConnection;
private InputConnectionWrapper mPublicInputConnection;
@@ -857,6 +860,10 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
R.styleable.AbsListView_fastScrollAlwaysVisible, false));
a.recycle();
+
+ if (context.getResources().getConfiguration().uiMode == Configuration.UI_MODE_TYPE_WATCH) {
+ setRevealOnFocusHint(false);
+ }
}
private void initAbsListView() {
@@ -869,6 +876,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
final ViewConfiguration configuration = ViewConfiguration.get(mContext);
mTouchSlop = configuration.getScaledTouchSlop();
+ mScrollFactor = configuration.getScaledScrollFactor();
mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();
mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
mOverscrollDistance = configuration.getScaledOverscrollDistance();
@@ -4201,21 +4209,26 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
- if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_SCROLL:
- if (mTouchMode == TOUCH_MODE_REST) {
- final float vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL);
- if (vscroll != 0) {
- final int delta = (int) (vscroll * getVerticalScrollFactor());
- if (!trackMotionScroll(delta, delta)) {
- return true;
- }
- }
- }
- break;
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_SCROLL:
+ final float axisValue;
+ if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
+ axisValue = event.getAxisValue(MotionEvent.AXIS_VSCROLL);
+ } else if (event.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER)) {
+ axisValue = event.getAxisValue(MotionEvent.AXIS_SCROLL);
+ } else {
+ axisValue = 0;
+ }
- case MotionEvent.ACTION_BUTTON_PRESS:
+ final int delta = Math.round(axisValue * mScrollFactor);
+ if (delta != 0) {
+ if (!trackMotionScroll(delta, delta)) {
+ return true;
+ }
+ }
+ break;
+ case MotionEvent.ACTION_BUTTON_PRESS:
+ if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
int actionButton = event.getActionButton();
if ((actionButton == MotionEvent.BUTTON_STYLUS_PRIMARY
|| actionButton == MotionEvent.BUTTON_SECONDARY)
@@ -4225,8 +4238,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
removeCallbacks(mPendingCheckForTap);
}
}
- break;
- }
+ }
+ break;
}
return super.onGenericMotionEvent(event);
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index 00f368e3abe3..918b6c0d65ff 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -18,6 +18,7 @@ package android.widget;
import android.annotation.NonNull;
import android.content.Context;
+import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
@@ -128,6 +129,8 @@ public class HorizontalScrollView extends FrameLayout {
private int mOverscrollDistance;
private int mOverflingDistance;
+ private float mScrollFactor;
+
/**
* ID of the active pointer. This is used to retain consistency during
* drags/flings if multiple pointers are used.
@@ -165,6 +168,10 @@ public class HorizontalScrollView extends FrameLayout {
setFillViewport(a.getBoolean(android.R.styleable.HorizontalScrollView_fillViewport, false));
a.recycle();
+
+ if (context.getResources().getConfiguration().uiMode == Configuration.UI_MODE_TYPE_WATCH) {
+ setRevealOnFocusHint(false);
+ }
}
@Override
@@ -217,6 +224,7 @@ public class HorizontalScrollView extends FrameLayout {
mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
mOverscrollDistance = configuration.getScaledOverscrollDistance();
mOverflingDistance = configuration.getScaledOverflingDistance();
+ mScrollFactor = configuration.getScaledScrollFactor();
}
@Override
@@ -719,30 +727,35 @@ public class HorizontalScrollView extends FrameLayout {
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
- if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_SCROLL: {
- if (!mIsBeingDragged) {
- final float hscroll;
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_SCROLL: {
+ if (!mIsBeingDragged) {
+ final float axisValue;
+ if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
if ((event.getMetaState() & KeyEvent.META_SHIFT_ON) != 0) {
- hscroll = -event.getAxisValue(MotionEvent.AXIS_VSCROLL);
+ axisValue = -event.getAxisValue(MotionEvent.AXIS_VSCROLL);
} else {
- hscroll = event.getAxisValue(MotionEvent.AXIS_HSCROLL);
+ axisValue = event.getAxisValue(MotionEvent.AXIS_HSCROLL);
}
- if (hscroll != 0) {
- final int delta = (int) (hscroll * getHorizontalScrollFactor());
- final int range = getScrollRange();
- int oldScrollX = mScrollX;
- int newScrollX = oldScrollX + delta;
- if (newScrollX < 0) {
- newScrollX = 0;
- } else if (newScrollX > range) {
- newScrollX = range;
- }
- if (newScrollX != oldScrollX) {
- super.scrollTo(newScrollX, mScrollY);
- return true;
- }
+ } else if (event.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER)) {
+ axisValue = event.getAxisValue(MotionEvent.AXIS_SCROLL);
+ } else {
+ axisValue = 0;
+ }
+
+ final int delta = Math.round(axisValue * mScrollFactor);
+ if (delta != 0) {
+ final int range = getScrollRange();
+ int oldScrollX = mScrollX;
+ int newScrollX = oldScrollX + delta;
+ if (newScrollX < 0) {
+ newScrollX = 0;
+ } else if (newScrollX > range) {
+ newScrollX = range;
+ }
+ if (newScrollX != oldScrollX) {
+ super.scrollTo(newScrollX, mScrollY);
+ return true;
}
}
}
@@ -1430,11 +1443,13 @@ public class HorizontalScrollView extends FrameLayout {
@Override
public void requestChildFocus(View child, View focused) {
- if (!mIsLayoutDirty) {
- scrollToChild(focused);
- } else {
- // The child may not be laid out yet, we can't compute the scroll yet
- mChildToScrollTo = focused;
+ if (focused.getRevealOnFocusHint()) {
+ if (!mIsLayoutDirty) {
+ scrollToChild(focused);
+ } else {
+ // The child may not be laid out yet, we can't compute the scroll yet
+ mChildToScrollTo = focused;
+ }
}
super.requestChildFocus(child, focused);
}
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index 0555cd403b00..e696ff7229e8 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -17,6 +17,7 @@
package android.widget;
import android.annotation.NonNull;
+import android.content.res.Configuration;
import android.os.Build;
import android.os.Build.VERSION_CODES;
import android.os.Parcel;
@@ -134,6 +135,8 @@ public class ScrollView extends FrameLayout {
private int mOverscrollDistance;
private int mOverflingDistance;
+ private int mScrollFactor;
+
/**
* ID of the active pointer. This is used to retain consistency during
* drags/flings if multiple pointers are used.
@@ -186,6 +189,10 @@ public class ScrollView extends FrameLayout {
setFillViewport(a.getBoolean(R.styleable.ScrollView_fillViewport, false));
a.recycle();
+
+ if (context.getResources().getConfiguration().uiMode == Configuration.UI_MODE_TYPE_WATCH) {
+ setRevealOnFocusHint(false);
+ }
}
@Override
@@ -243,6 +250,7 @@ public class ScrollView extends FrameLayout {
mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
mOverscrollDistance = configuration.getScaledOverscrollDistance();
mOverflingDistance = configuration.getScaledOverflingDistance();
+ mScrollFactor = configuration.getScaledScrollFactor();
}
@Override
@@ -777,30 +785,35 @@ public class ScrollView extends FrameLayout {
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
- if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_SCROLL: {
- if (!mIsBeingDragged) {
- final float vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL);
- if (vscroll != 0) {
- final int delta = (int) (vscroll * getVerticalScrollFactor());
- final int range = getScrollRange();
- int oldScrollY = mScrollY;
- int newScrollY = oldScrollY - delta;
- if (newScrollY < 0) {
- newScrollY = 0;
- } else if (newScrollY > range) {
- newScrollY = range;
- }
- if (newScrollY != oldScrollY) {
- super.scrollTo(mScrollX, newScrollY);
- return true;
- }
- }
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_SCROLL:
+ final float axisValue;
+ if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
+ axisValue = event.getAxisValue(MotionEvent.AXIS_VSCROLL);
+ } else if (event.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER)) {
+ axisValue = event.getAxisValue(MotionEvent.AXIS_SCROLL);
+ } else {
+ axisValue = 0;
+ }
+
+ final int delta = Math.round(axisValue * mScrollFactor);
+ if (delta != 0) {
+ final int range = getScrollRange();
+ int oldScrollY = mScrollY;
+ int newScrollY = oldScrollY - delta;
+ if (newScrollY < 0) {
+ newScrollY = 0;
+ } else if (newScrollY > range) {
+ newScrollY = range;
+ }
+ if (newScrollY != oldScrollY) {
+ super.scrollTo(mScrollX, newScrollY);
+ return true;
}
}
- }
+ break;
}
+
return super.onGenericMotionEvent(event);
}
@@ -1455,11 +1468,13 @@ public class ScrollView extends FrameLayout {
@Override
public void requestChildFocus(View child, View focused) {
- if (!mIsLayoutDirty) {
- scrollToChild(focused);
- } else {
- // The child may not be laid out yet, we can't compute the scroll yet
- mChildToScrollTo = focused;
+ if (focused.getRevealOnFocusHint()) {
+ if (!mIsLayoutDirty) {
+ scrollToChild(focused);
+ } else {
+ // The child may not be laid out yet, we can't compute the scroll yet
+ mChildToScrollTo = focused;
+ }
}
super.requestChildFocus(child, focused);
}
diff --git a/core/java/com/android/internal/app/AlertController.java b/core/java/com/android/internal/app/AlertController.java
index 5aeb7f92eeda..95c291a9e8fe 100644
--- a/core/java/com/android/internal/app/AlertController.java
+++ b/core/java/com/android/internal/app/AlertController.java
@@ -888,7 +888,8 @@ public class AlertController {
final int checkedItem = mCheckedItem;
if (checkedItem > -1) {
listView.setItemChecked(checkedItem, true);
- listView.setSelection(checkedItem);
+ listView.setSelectionFromTop(checkedItem,
+ a.getDimensionPixelSize(R.styleable.AlertDialog_selectionScrollOffset, 0));
}
}
}
diff --git a/core/java/com/android/internal/widget/WatchHeaderListView.java b/core/java/com/android/internal/widget/WatchHeaderListView.java
index 3d32d86cd49c..4fd19c37bf47 100644
--- a/core/java/com/android/internal/widget/WatchHeaderListView.java
+++ b/core/java/com/android/internal/widget/WatchHeaderListView.java
@@ -103,7 +103,8 @@ public class WatchHeaderListView extends ListView {
@Override
public int getHeaderViewsCount() {
- return mTopPanel == null ? super.getHeaderViewsCount() : super.getHeaderViewsCount() + 1;
+ return mTopPanel == null ? super.getHeaderViewsCount()
+ : super.getHeaderViewsCount() + (mTopPanel.getVisibility() == GONE ? 0 : 1);
}
private void wrapAdapterIfNecessary() {
@@ -133,7 +134,7 @@ public class WatchHeaderListView extends ListView {
}
private int getTopPanelCount() {
- return mTopPanel == null ? 0 : 1;
+ return (mTopPanel == null || mTopPanel.getVisibility() == GONE) ? 0 : 1;
}
@Override
@@ -143,33 +144,19 @@ public class WatchHeaderListView extends ListView {
@Override
public boolean areAllItemsEnabled() {
- return mTopPanel == null && super.areAllItemsEnabled();
+ return getTopPanelCount() == 0 && super.areAllItemsEnabled();
}
@Override
public boolean isEnabled(int position) {
- if (mTopPanel != null) {
- if (position == 0) {
- return false;
- } else {
- return super.isEnabled(position - 1);
- }
- }
-
- return super.isEnabled(position);
+ int topPanelCount = getTopPanelCount();
+ return position < topPanelCount ? false : super.isEnabled(position - topPanelCount);
}
@Override
public Object getItem(int position) {
- if (mTopPanel != null) {
- if (position == 0) {
- return null;
- } else {
- return super.getItem(position - 1);
- }
- }
-
- return super.getItem(position);
+ int topPanelCount = getTopPanelCount();
+ return position < topPanelCount ? null : super.getItem(position - topPanelCount);
}
@Override
@@ -187,15 +174,9 @@ public class WatchHeaderListView extends ListView {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
- if (mTopPanel != null) {
- if (position == 0) {
- return mTopPanel;
- } else {
- return super.getView(position - 1, convertView, parent);
- }
- }
-
- return super.getView(position, convertView, parent);
+ int topPanelCount = getTopPanelCount();
+ return position < topPanelCount
+ ? mTopPanel : super.getView(position - topPanelCount, convertView, parent);
}
@Override
diff --git a/core/java/com/android/internal/widget/WatchListDecorLayout.java b/core/java/com/android/internal/widget/WatchListDecorLayout.java
index 538cecaec616..5b49611fa4b0 100644
--- a/core/java/com/android/internal/widget/WatchListDecorLayout.java
+++ b/core/java/com/android/internal/widget/WatchListDecorLayout.java
@@ -306,8 +306,9 @@ public class WatchListDecorLayout extends FrameLayout
if (mListView.getChildCount() > 0) {
if (mListView.getLastVisiblePosition() >= mListView.getCount() - 1) {
View lastChild = mListView.getChildAt(mListView.getChildCount() - 1);
- setScrolling(mBottomPanel,
- lastChild.getY() + lastChild.getHeight() - mBottomPanel.getTop());
+ setScrolling(mBottomPanel, Math.max(
+ 0,
+ lastChild.getY() + lastChild.getHeight() - mBottomPanel.getTop()));
} else {
// shift to hide the frame, last child is not the last position
setScrolling(mBottomPanel, mBottomPanel.getHeight());
diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp
index 3473d9dab732..77d03433134b 100644
--- a/core/jni/android_util_AssetManager.cpp
+++ b/core/jni/android_util_AssetManager.cpp
@@ -25,6 +25,7 @@
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/stat.h>
+#include <sys/system_properties.h>
#include <private/android_filesystem_config.h> // for AID_SYSTEM
@@ -41,6 +42,7 @@
#include "ScopedUtfChars.h"
#include "utils/Log.h"
#include "utils/misc.h"
+#include "utils/String8.h"
extern "C" int capget(cap_user_header_t hdrp, cap_user_data_t datap);
extern "C" int capset(cap_user_header_t hdrp, const cap_user_data_t datap);
@@ -184,11 +186,19 @@ static void verifySystemIdmaps()
argv[argc++] = AssetManager::TARGET_APK_PATH;
argv[argc++] = AssetManager::IDMAP_DIR;
- // Directories to scan for overlays
- // /vendor/overlay
- if (stat(AssetManager::OVERLAY_DIR, &st) == 0) {
+ // Directories to scan for overlays: if OVERLAY_SUBDIR_PROPERTY is defined,
+ // use OVERLAY_SUBDIR/<value of OVERLAY_SUBDIR_PROPERTY>/ if exists, otherwise
+ // use OVERLAY_DIR if exists.
+ char subdir[PROP_VALUE_MAX];
+ int len = __system_property_get(AssetManager::OVERLAY_SUBDIR_PROPERTY, subdir);
+ if (len > 0) {
+ String8 subdirPath = String8(AssetManager::OVERLAY_SUBDIR) + "/" + subdir;
+ if (stat(subdirPath.string(), &st) == 0) {
+ argv[argc++] = subdirPath.string();
+ }
+ } else if (stat(AssetManager::OVERLAY_DIR, &st) == 0) {
argv[argc++] = AssetManager::OVERLAY_DIR;
- }
+ }
// Finally, invoke idmap (if any overlay directory exists)
if (argc > 5) {
diff --git a/core/jni/fd_utils-inl.h b/core/jni/fd_utils-inl.h
index c67662bd8a88..5c17b23adacd 100644
--- a/core/jni/fd_utils-inl.h
+++ b/core/jni/fd_utils-inl.h
@@ -20,6 +20,7 @@
#include <vector>
#include <algorithm>
+#include <android-base/strings.h>
#include <dirent.h>
#include <fcntl.h>
#include <grp.h>
@@ -241,7 +242,8 @@ class FileDescriptorInfo {
// Returns true iff. a given path is whitelisted. A path is whitelisted
// if it belongs to the whitelist (see kPathWhitelist) or if it's a path
- // under /system/framework that ends with ".jar".
+ // under /system/framework that ends with ".jar" or if it is a system
+ // framework overlay.
static bool IsWhitelisted(const std::string& path) {
for (size_t i = 0; i < (sizeof(kPathWhitelist) / sizeof(kPathWhitelist[0])); ++i) {
if (kPathWhitelist[i] == path) {
@@ -249,12 +251,37 @@ class FileDescriptorInfo {
}
}
- static const std::string kFrameworksPrefix = "/system/framework/";
- static const std::string kJarSuffix = ".jar";
- if (path.compare(0, kFrameworksPrefix.size(), kFrameworksPrefix) == 0 &&
- path.compare(path.size() - kJarSuffix.size(), kJarSuffix.size(), kJarSuffix) == 0) {
+ static const char* kFrameworksPrefix = "/system/framework/";
+ static const char* kJarSuffix = ".jar";
+ if (android::base::StartsWith(path, kFrameworksPrefix)
+ && android::base::EndsWith(path, kJarSuffix)) {
return true;
}
+
+ // Whitelist files needed for Runtime Resource Overlay, like these:
+ // /system/vendor/overlay/framework-res.apk
+ // /system/vendor/overlay-subdir/pg/framework-res.apk
+ // /data/resource-cache/system@vendor@overlay@framework-res.apk@idmap
+ // /data/resource-cache/system@vendor@overlay-subdir@pg@framework-res.apk@idmap
+ // See AssetManager.cpp for more details on overlay-subdir.
+ static const char* kOverlayDir = "/system/vendor/overlay/";
+ static const char* kOverlaySubdir = "/system/vendor/overlay-subdir/";
+ static const char* kApkSuffix = ".apk";
+
+ if ((android::base::StartsWith(path, kOverlayDir)
+ || android::base::StartsWith(path, kOverlaySubdir))
+ && android::base::EndsWith(path, kApkSuffix)
+ && path.find("/../") == std::string::npos) {
+ return true;
+ }
+
+ static const char* kOverlayIdmapPrefix = "/data/resource-cache/";
+ static const char* kOverlayIdmapSuffix = ".apk@idmap";
+ if (android::base::StartsWith(path, kOverlayIdmapPrefix)
+ && android::base::EndsWith(path, kOverlayIdmapSuffix)) {
+ return true;
+ }
+
return false;
}
diff --git a/core/res/assets/images/android-logo-mask.png b/core/res/assets/images/android-logo-mask.png
index ad40645e8943..5512c0ad8a83 100644
--- a/core/res/assets/images/android-logo-mask.png
+++ b/core/res/assets/images/android-logo-mask.png
Binary files differ
diff --git a/core/res/assets/images/android-logo-shine.png b/core/res/assets/images/android-logo-shine.png
index cb65f229eb52..c5d126392eeb 100644
--- a/core/res/assets/images/android-logo-shine.png
+++ b/core/res/assets/images/android-logo-shine.png
Binary files differ
diff --git a/core/res/assets/images/clock64.png b/core/res/assets/images/clock64.png
deleted file mode 100644
index 493a1ea97717..000000000000
--- a/core/res/assets/images/clock64.png
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/images/clock_font.png b/core/res/assets/images/clock_font.png
new file mode 100644
index 000000000000..be927ae2612f
--- /dev/null
+++ b/core/res/assets/images/clock_font.png
Binary files differ
diff --git a/core/res/assets/sounds/bootanim0.raw b/core/res/assets/sounds/bootanim0.raw
deleted file mode 100644
index 46b8c0f9a8c4..000000000000
--- a/core/res/assets/sounds/bootanim0.raw
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/sounds/bootanim1.raw b/core/res/assets/sounds/bootanim1.raw
deleted file mode 100644
index ce69944f69b2..000000000000
--- a/core/res/assets/sounds/bootanim1.raw
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/webkit/hyph_en_US.dic b/core/res/assets/webkit/hyph_en_US.dic
deleted file mode 100644
index d91204b55418..000000000000
--- a/core/res/assets/webkit/hyph_en_US.dic
+++ /dev/null
@@ -1,9784 +0,0 @@
-ISO8859-1
-LEFTHYPHENMIN 2
-RIGHTHYPHENMIN 3
-.a2ch4
-.ad4der
-.a2d
-.ad1d4
-.a2f1t
-.a2f
-.a4l3t
-.am5at
-.4a1ma
-.an5c
-.a2n
-.2ang4
-.an1i5m
-.an1t4
-.an3te
-.anti5s
-.ant2i
-.a4r5s2
-.2a2r
-.ar4t2ie4
-.ar1ti
-.ar4ty
-.as3c
-.as1p
-.a2s1s
-.aster5
-.a2tom5
-.a1to
-.au1d
-.av4i
-.awn4
-.ba4g
-.ba5na
-.ba2n
-.bas4e
-.ber4
-.be5r1a
-.be3s1m
-.4bes4
-.b4e5s2to
-.bri2
-.but4ti
-.bu4t3t2
-.cam4pe
-.1ca
-.ca4m1p
-.can5c
-.ca2n
-.capa5b
-.ca1pa
-.car5ol
-.c2a2r
-.ca4t
-.ce4la
-.2ch4
-.chill5i
-.ch4il2
-.chil1l
-.1ci2
-.cit5r
-.2c1it
-.co3e2
-.1co
-.co4r
-.cor5n1er
-.corn2e
-.de4moi2
-.d4em
-.de1mo
-.de3o
-.de3r1a
-.de3r1i
-.de1s4c
-.des2
-.dic1t2io5
-.3di2c1t
-.do4t
-.1do
-.du4c
-.1du
-.du4m1b5
-.earth5
-.ear2t
-.e2a2r
-.eas3i
-.2e1b4
-.eer4
-.eg2
-.e2l5d
-.el3em
-.enam3
-.e1na
-.en3g
-.e2n3s2
-.eq5ui5t
-.e1q
-.equ2
-.eq2ui2
-.er4ri
-.er1r4
-.es3
-.4eu3
-.eye5
-.fes3
-.for5mer
-.1fo
-.fo2r
-.for1m
-.for2me
-.1ga2
-.ge2
-.gen3t4
-.1gen
-.ge5o2g
-.1geo
-.1g2i5a
-.gi4b
-.go4r
-.1go
-.hand5i
-.ha2n
-.h4and
-.ha4n5k2
-.he2
-.hero5i2
-.h2ero
-.h1es3
-.he4t3
-.hi3b
-.hi3er
-.h2ie4
-.hon5ey
-.ho2n
-.hon3o
-.hov5
-.id4l
-.2id
-.idol3
-.i1do
-.im3m
-.im5p1i2n
-.i4m1p
-.im2pi
-.in1
-.in3ci
-.2ine2
-.4i4n2k2
-.2i2n3s2
-.ir5r4
-.4ir
-.is4i
-.ju3r
-.la4cy
-.la4m
-.lat5er
-.l4ath5
-.le2
-.leg5e
-.len4
-.lep5
-.lev1
-.l2i4g
-.li1g5a
-.li2n
-.l2i3o
-.l1i4t
-.ma1g5a5
-.1ma
-.mal5o
-.ma1n5a
-.ma2n
-.mar5ti
-.m2a2r
-.me2
-.mer3c
-.me5ter
-.me1te
-.m2is1
-.mis4t5i
-.mon3e
-.1mo
-.mo2n
-.mo3ro
-.mo2r
-.mu5ta
-.1mu
-.mu2ta5b
-.ni4c
-.od2
-.od1d5
-.of5te
-.o2ft
-.or5a1to
-.o1ra
-.or3c
-.or1d
-.or3t
-.os3
-.os4tl
-.4oth3
-.out3
-.ou2
-.ped5al
-.2p2ed
-.p2e2d2a
-.pe5te
-.pe2t
-.pe5tit
-.p2i4e4
-.pio5n4
-.3p2i1o
-.pi2t
-.pre3m
-.pr2
-.ra4c
-.ran4t
-.ra2n
-.ratio5n1a
-.ratio2n4
-.ra1t2io
-.ree2
-.re5mit
-.res2
-.re5stat
-.res2t
-.res1ta
-.r2i4g
-.ri2t5u
-.ro4q
-.ros5t
-.row5d
-.ru4d
-.3s4c2i3e4
-.s1ci
-.5se2l2f5
-.sel1l5
-.se2n
-.se5r2ie4
-.ser1i
-.s2h2
-.si2
-.s3ing4
-.2s1in
-.st4
-.sta5b2l2
-.s1ta
-.s2tab
-.s4y2
-.1ta4
-.te4
-.3ten5a2n
-.te1na
-.th2
-.ti2
-.til4
-.ti1m5o5
-.1tim
-.ting4
-.2t1in
-.t4i4n5k2
-.to1n4a
-.1to
-.to2n
-.to4p
-.top5i
-.to2u5s
-.tou2
-.trib5ut
-.tr4ib
-.u1n1a
-.un3ce
-.under5
-.un1de
-.u2n1e
-.u4n5k2
-.un5o
-.un3u4
-.up3
-.ure3
-.us5a2
-.2us
-.ven4de
-.ve5r1a
-.wil5i
-.wi2
-.wil2
-.ye4
-4ab.
-a5bal
-a5ba2n
-abe2
-ab5erd
-ab2i5a
-ab5i2t5ab
-abi2t
-abi1ta
-ab5lat
-ab2l2
-ab5o5l1iz
-abol2i
-4abr
-ab5rog
-ab3ul
-a4c2a2r
-a1ca
-ac5ard
-ac5aro
-a5ceou2
-ac1er
-a5che4t
-a2ch
-ache2
-4a2ci
-a3c2ie4
-a2c1in
-a3c2io
-ac5rob
-act5if2
-a2c1t
-ac3ul
-ac4um
-a2d
-ad4d1in
-ad1d4
-ad5er.
-2adi
-a3d4i3a
-ad3i1ca
-adi4er
-ad2ie4
-a3d2io
-a3dit
-a5di1u
-ad4le
-ad3ow
-a1do
-ad5ra2n
-a1dr
-ad4su
-a2d1s2
-4a1du
-a3du2c
-ad5um
-ae4r
-aer2i4e4
-aer1i
-a2f
-a4f1f4
-a4gab
-a1ga
-aga4n
-ag5el1l
-a1ge4o
-4ag4eu
-ag1i
-4ag4l2
-ag1n
-a2go
-3a3g4o4g
-ag3o3ni
-ago2n2
-a5guer
-a2gue
-ag5ul
-a4gy
-a3ha
-a3he
-a4h4l4
-a3ho
-ai2
-a5i1a
-a3ic.
-ai5ly
-a4i4n
-ain5in
-a2ini
-a2i1n5o
-ait5en
-a2ite
-a1j
-ak1en
-al5ab
-al3a2d
-a4l2a2r
-4aldi4
-a2ld
-2ale
-al3end
-a4lent2i
-a1len1t
-a5le5o
-al1i
-al4ia.
-al2i1a
-al2i4e4
-al5lev
-al1l
-al2le
-4allic
-all2i
-4a2lm
-a5log.
-a4ly.
-a1ly
-4a2lys4
-5a5lys1t
-5alyt
-3alyz
-4a1ma
-a2m5ab
-am3ag
-ama5ra
-am2a2r
-am5asc
-a4ma3tis
-a4m5a1to
-am5er1a
-am3ic
-am5if
-am5i1ly
-am1in
-am2i4no
-a2mo
-a5mo2n
-amor5i
-amo2r
-amp5en
-a4m1p
-a2n
-an3age
-a1na
-3ana1ly
-a3n2a2r
-an3ar3c
-anar4i
-a3nati
-an2at
-4and
-ande4s2
-an1de
-an3dis1
-an1dl
-an4dow
-an1do
-a5nee
-a3nen
-an5e2st.
-a1nes
-a2nest
-a3n4eu
-2ang
-ang5ie4
-an1gl2
-a4n1ic
-a3nies
-an2ie4
-an3i3f
-an4ime
-an1im
-a5nim1i
-a5n2ine
-an1in
-an3i4o
-a3n2ip
-an3is2h
-an3it
-a3ni1u
-an4kli
-a4nk2
-an1k1l
-5anniz
-a4n1n2
-ano4
-an5ot
-an4oth5
-an2sa2
-a2n1s2
-an4s1co
-ans4c
-an4s1n4
-an2sp
-ans3po
-an4st
-an4su2r
-an1su
-anta2l4
-an1t
-an1ta
-an4t2ie4
-ant2i
-4an1to
-an2tr
-an4tw4
-an3u1a
-an3ul
-a5nur
-4ao
-ap2a2r4
-a1pa
-ap5at
-ap5er3o
-a3ph4er
-4aphi
-a4pilla
-apil1l
-ap5ill2a2r
-ap3i2n
-ap3i1ta
-a3pi2tu
-a2p2l2
-apo4c5
-ap5o1la
-apor5i
-a1p4or
-apos3t
-a1pos
-aps5e4s
-a2p1s2
-ap2se
-a3pu
-aque5
-aqu2
-2a2r
-ar3a2c1t
-a5rade
-ara2d
-ar5adis1
-ar2adi
-ar3al
-a5rame1te
-aram3et
-ar2an4g
-ara2n
-ara3p
-ar4at
-a5ra1t2io
-ar5a1t2iv
-a5rau
-ar5av4
-araw4
-arbal4
-ar1b
-ar4cha2n
-ar1c
-ar3cha
-ar2ch
-ar5d2ine
-ard2i
-ard1in4
-ar4dr
-ar5eas
-a3ree
-ar3en1t
-a5r2e2ss
-ar4fi
-ar1f
-ar4f4l2
-ar1i
-ar5i2al
-ar2i3a
-ar3i2a2n
-a3ri5et
-ar2ie4
-ar4im
-ar5in2at
-ar2i1na
-ar3i1o
-ar2iz
-ar2mi
-ar1m
-ar5o5d
-a5roni
-aro2n
-a3roo2
-ar2p
-ar3q
-arre4
-ar1r4
-ar4sa2
-a4rs2
-ar2s2h
-4as.
-a2s4ab
-asa2
-as3an1t
-asa2n
-ashi4
-as2h
-a5sia.
-as2i1a
-a3si1b
-a3sic
-5a5si4t
-ask3i
-ask2
-as4l2
-a4soc
-a1so
-as5ph
-as4s2h
-a2ss
-as3ten
-as1t4r
-asu1r5a
-a1su
-asu2r
-a2ta
-at3ab2l2
-a2tab
-at5ac
-at3alo
-ata2l
-at5ap
-ate5c
-at5e2ch
-at3e1go
-ateg4
-at3en.
-at3er1a
-ater5n
-a5ter1na
-at3est
-at5ev
-4ath
-ath5em
-ath2e
-a5the2n
-at4ho
-ath5om
-4ati.
-a5t2i1a
-a2t5i5b
-at1ic
-at3if2
-ation5a2r
-a1t2io
-atio2n
-atio1n1a
-at3i1tu
-a4tog
-a1to
-a2tom
-at5om2iz
-a4top
-a4tos2
-a1tr
-at5rop
-at4sk2
-a4t1s2
-at4tag
-a4t3t2
-at1ta
-at5te
-at4th
-a2tu
-at5u1a
-a4t5ue
-at3ul
-at3u1ra
-a2ty
-au4b
-augh3
-au3gu
-au4l2
-aun5d
-au3r
-au5si1b
-a2us
-a4ut5en
-au1th
-a2va
-av3ag4
-a5va2n
-av4e4no
-av3er1a
-av5ern
-av5ery
-av1i
-avi4er
-av2ie4
-av3ig
-av5oc
-a1vor
-3away
-aw3i2
-aw4ly
-aws4
-ax4i5c
-ax3i
-ax4id
-ay5al
-aye4
-ays4
-azi4er
-a2z1i
-az2ie4
-az2z5i
-a4z1z2
-5ba.
-bad5ger
-ba2d
-ba4ge
-bal1a
-ban5dag
-ba2n
-b4and
-ban1d2a
-ban4e
-ban3i
-barbi5
-b2a2r
-bar1b
-bar2i4a
-bar1i
-bas4si
-ba2ss
-1bat
-ba4z
-2b1b
-b2be
-b3ber
-bbi4na
-4b1d
-4be.
-beak4
-bea2t3
-4be2d
-b2e3d2a
-be3de
-b4e3di
-be3gi
-be5gu
-1bel
-be1l2i
-be3lo
-4be5m
-be5n2ig
-be5nu
-4bes4
-be3sp
-b2e5st4r
-3bet
-be1t5iz
-be5tr
-be3tw4
-be3w
-be5y1o4
-2bf
-4b3h
-bi2b
-b2i4d
-3b2ie4
-bi5en
-bi4er
-2b3if
-1bil
-bi3l2iz
-bil1i
-bin2a5r4
-bi1na
-b4in4d
-bi5net
-b2ine
-bi3o2gr
-b2io
-bi5ou2
-bi2t
-3b2i3t2io
-bi1ti
-bi3tr
-3bit5u1a
-bi1tu
-b5i4tz
-b1j
-bk4
-b2l2
-bl4ath5
-b4le.
-blen4
-5ble1sp
-bles2
-b3lis
-b4lo
-blun4t
-4b1m
-4b3n
-bne5g
-3bod
-bod3i
-bo4e
-bol3ic
-bol2i
-bom4bi
-bo4m1b
-bo1n4a
-bo2n
-bon5at
-3boo2
-5bor.
-4b1o1ra
-bor5d
-5bore
-5bori
-5bos4
-b5o1ta
-b4oth5
-bo4to
-boun2d3
-bou2
-4bp
-4brit
-br4oth3
-2b5s2
-bsor4
-b1so
-2bt
-b2t4l
-b4to
-b3tr
-buf4fer1
-bu4f1f
-bu4ga
-bu3l2i
-bu1mi4
-bu4n
-bunt4i
-bun1t
-bu3re
-bus5ie4
-b2us
-buss4e
-bu2ss
-5bust
-4bu1ta
-3bu1t2io
-b4u1t2i
-b5u1to
-b1v
-4b5w
-5by.
-bys4
-1ca
-cab3in
-ca1b2l2
-ca2ch4
-ca5den
-ca2d
-4cag4
-2c5ah
-ca3lat
-cal4la
-cal1l
-cal2l5in4
-call2i
-4calo
-c4an5d
-ca2n
-can4e
-ca4n4ic
-can5is
-can3iz
-can4ty
-can1t
-cany4
-ca5per
-car5om
-c2a2r
-cast5er
-cas5t2ig
-cast2i
-4cas4y
-c4a4th
-4ca1t2iv
-cav5al
-ca2va
-c3c
-ccha5
-c2ch
-c3c2i4a
-c1ci
-ccom1pa5
-c1co
-cco4m1p
-cco2n4
-ccou3t
-ccou2
-2ce.
-4ced.
-4ce1den
-3cei2
-5cel.
-3cel1l
-1cen
-3cenc
-2cen4e
-4ceni
-3cen1t
-3cep
-ce5ram
-cer1a
-4ce1s4a2
-3ces1si
-c2e2ss
-ces5si5b
-ces5t
-cet4
-c5e4ta
-cew4
-2ch
-4ch.
-4ch3ab
-5cha4n1ic
-cha2n
-ch5a5nis
-che2
-cheap3
-4ch4ed
-ch5e5lo
-3chemi
-ch5ene
-che2n
-ch3er.
-ch3e4r1s2
-4ch1in
-5chi2ne.
-ch2ine
-ch5i5n2e2ss
-chi1nes
-5ch2ini
-5ch2io
-3chit
-chi2z
-3cho2
-ch4ti
-1ci
-3c2i1a
-ci2a5b
-ci2a5r
-ci5c
-4cier
-c2ie4
-5c4i2f3ic.
-ci1fi
-4c4i5i4
-ci4la
-3cil1i
-2cim
-2cin
-c4i1na
-3cin2at
-cin3em
-c2ine
-c1ing
-c5ing.
-5c2i1no
-cio2n4
-c2io
-4cipe4
-c2ip
-ci3ph
-4cip4ic
-cip3i
-4cis1ta
-4cis1t2i
-2c1it
-ci1t3iz
-ci1ti
-5ciz
-ck1
-ck3i
-1c4l4
-4cl2a2r
-c5la5ra1t2io
-clar4at
-5clare
-cle4m
-4clic
-clim4
-c1ly4
-c5n
-1co
-co5ag
-c4oa
-coe2
-2cog
-co4gr
-coi4
-co3inc
-col5i
-5colo
-col3o4r
-com5er
-co2me
-co1n4a
-co2n
-c4one
-con3g
-con5t
-co3pa
-cop3ic
-co4p2l2
-4cor1b
-coro3n
-cos4e
-cov1
-cove4
-cow5a
-co2z5e
-co5z1i
-c1q
-cras5t
-cr2as
-5crat.
-5crat1ic
-cre3a2t
-5c2r2ed
-4c3re1ta
-cre4v2
-cri2
-cri5f
-c4rin
-cr2is4
-5cri1ti
-cro4p2l2
-crop5o
-cros4e
-cru4d
-4c3s2
-2c1t
-c2ta4b
-c1ta
-ct5ang
-cta2n
-c5tan1t
-c2te
-c3ter
-c4t4ic1u
-ctim3i
-c1tim
-ctu4r
-c1tu
-c4tw4
-cud5
-c4uf
-c4ui2
-cu5i1ty
-5cul2i
-cul4tis4
-cul1ti
-cu4lt
-3c4ul1tu2
-cu2ma
-c3ume
-cu4mi
-3cun
-cu3pi
-cu5py
-cu2r5a4b
-cu1ra
-cu5r2i3a
-1c2us
-cus1s4i
-cu2ss
-3c4ut
-cu4t2ie4
-c4u1t2i
-4c5u1t2iv
-4cutr
-1cy
-c2ze4
-1d2a
-5da.
-2d3a4b
-da2ch4
-4da2f
-2dag
-da2m2
-d2an3g
-da2n
-dard5
-d2a2r
-dark5
-4dary
-3dat
-4da1t2iv
-4da1to
-5dav4
-dav5e
-5day
-d1b
-d5c
-d1d4
-2de.
-dea2f5
-de4b5i2t
-d2e1b
-de4bo2n
-deca2n4
-de1ca
-de4cil
-de1c2i
-de5com
-de1co
-2d1ed
-4dee.
-de5if
-dei2
-del2i4e4
-del2i
-de4l5i5q
-de5lo
-d4em
-5dem.
-3demic
-dem5ic.
-de5mil
-de4mo2n3s2
-de1mo
-demo2n
-demo2r5
-1den
-de4n2a2r
-de1na
-d4e3no
-denti5f2
-den1t
-dent2i
-de3nu
-de1p
-de3pa
-depi4
-de2pu
-d3e1q
-d4er1h4
-5der3m4
-d5ern5iz
-de4r5s2
-des2
-d2es.
-de1s2c
-de2s5o
-des3t2i
-d2e3st4r
-de4su
-de1t
-de2to
-de1v
-de2v3i4l
-de1vi
-4dey
-4d1f
-d4ga
-d3ge4t
-dg1i
-d2gy
-d1h2
-5di.
-1d4i3a
-dia5b
-d4i4cam
-di1ca
-d4ice
-3di2c1t
-3d2id
-5di3en
-d2ie4
-d1if
-di3ge
-d2ig
-di4la1to
-di1la
-d1in
-1di1na
-3di2ne.
-d2ine
-5d2ini
-di5niz
-1d2io
-dio5g
-di4p2l2
-d2ip
-d4ir2
-di1re
-dir1t5i
-dis1
-5disi
-d4is3t
-d2i1ti
-1d2i1v
-d1j
-d5k2
-4d5la
-3dle.
-3dled
-3dles.
-dles2
-4d3l2e2ss
-2d3lo
-4d5lu
-2d1ly
-d1m
-4d1n4
-1do
-3do.
-do5de
-5doe
-2d5of
-d4og
-do4la
-dol2i4
-do5lo4r
-dom5iz
-do3n2at
-do2n
-do1n1a
-doni4
-doo3d
-doo2
-do4p4p
-d4or
-3dos
-4d5out
-dou2
-do4v
-3dox
-d1p
-1dr
-drag5o2n2
-dra2go
-4dr2ai2
-dre4
-dre2a5r
-5dren
-dr4i4b
-dril4
-dro4p
-4drow
-5drupli
-dru3p2l2
-4dry
-2d1s2
-ds4p
-d4sw2
-d4s4y
-d2th
-1du
-d1u1a
-du2c
-d1u3ca
-duc5er
-4duct.
-du2c1t
-4duc4t1s2
-du5el
-du4g
-d3ul4e
-dum4be
-du4m1b
-du4n
-4dup
-du4pe
-d1v
-d1w
-d2y
-5dyn
-dy4s2e
-dys5p
-e1a4b
-e3a2c1t
-ea2d1
-ead5ie4
-e2adi
-ea4ge
-ea5ger
-ea4l
-eal5er
-e2ale
-eal3ou2
-eam3er
-e5and
-ea2n
-ear3a
-e2a2r
-ear4c
-ear5es
-ear4ic
-ear1i
-ear4il
-ear5k
-ear2t
-eart3e
-ea5sp
-e3a2ss
-east3
-ea2t
-eat5en
-eath3i
-e4ath
-e5at3if2
-e4a3tu
-ea2v
-eav3en
-eav5i
-eav5o
-2e1b
-e4bel.
-e1bel
-e4be2l1s2
-e4ben
-e4bi2t
-e3br
-e4ca2d
-e1ca
-ecan5c
-eca2n
-ec1ca5
-ec3c
-e1ce
-ec5es1sa2
-ec2e2ss
-e1c2i
-e4cib
-ec5ificat
-eci1fi
-ecifi1ca
-ec5i3f2ie4
-ec5i1fy
-e2c3im
-e2c1i4t
-e5c2ite
-e4clam
-e1c4l4
-e4cl2us
-e2col
-e1co
-e4com1m
-e4compe
-eco4m1p
-e4con1c
-eco2n
-e2cor
-ec3o1ra
-eco5ro
-e1cr
-e4crem
-ec4ta2n
-e2c1t
-ec1ta
-ec4te
-e1cu
-e4cul
-ec3u1la
-2e2d2a
-4ed3d4
-e4d1er
-ede4s2
-4edi
-e3d4i3a
-ed3ib
-ed3i1ca
-ed3im
-ed1it
-edi5z
-4e1do
-e4dol
-edo2n2
-e4dri
-e1dr
-e4dul
-e1du
-ed5u1l4o
-ee2c
-e4ed3i
-ee2f
-eel3i
-ee4ly
-ee2m
-ee4na
-ee4p1
-ee2s4
-eest4
-ee4ty
-e5ex
-e1f
-e4f3ere
-efer1
-1e4f1f
-e4fic
-e1fi
-5ef2i1c4i
-efil4
-e3f2i2ne
-e2fin
-ef5i5n2ite
-ef2ini
-efin2it
-3efit
-efor5es
-e1fo
-efo2r
-e4fu4se.
-e3fu
-ef2us
-4egal
-e1ga
-eger4
-eg5ib
-eg4ic
-eg5ing
-e5git5
-eg5n
-e4go.
-e1go
-e4gos
-eg1ul
-e5gur
-5e1gy
-e1h4
-eher4
-ei2
-e5ic
-e2i5d
-e2ig2
-ei5g4l2
-e3i4m1b
-e3in3f
-e1ing
-e5inst
-e2i2n1s2
-eir4d
-e4ir
-e2it3e
-e2i3th
-e5i1ty
-e1j
-e4jud
-ej5udi
-eki4n
-ek1i
-ek4la
-ek1l
-e1la
-e4la.
-e4lac
-e3l4an4d
-ela2n
-e4l5a1t2iv
-e4law
-elax1a4
-e3le2a
-el5ebra
-el2e1b
-ele3br
-5elec
-e4led
-el3e1ga
-e5len
-e4l1er
-e1les2
-e2l2f
-el2i
-e3libe4
-e4l5ic.
-el3i1ca
-e3lier
-el2ie4
-el5i3gib
-el2ig
-el4igi
-e5lim
-e4l3ing
-e3l2io
-e2lis
-el5is2h
-e3l2iv3
-4ella
-el1l
-el4lab
-ell4o4
-e5loc
-el5og
-el3op.
-el2s2h
-e2l1s2
-el4ta
-e4lt
-e5lud
-el5ug
-e4mac
-e1ma
-e4mag
-e5ma2n
-em5a1na
-e4m5b
-e1me
-e2mel
-e4met
-em3i1ca
-em2i4e4
-em5igra
-em2ig4
-emi1gr
-em1in2
-em5ine
-em3i3ni
-e4m2is
-em5is2h
-e5m4i2s1s
-em3iz
-5emniz
-e4m1n
-emo4g
-e1mo
-emo3n2i5o
-emo2n
-em3pi
-e4m1p
-e4mul
-e1mu
-em5u1la
-emu3n2
-e3my
-en5a2mo
-e1na
-e4nan1t
-en2a2n
-ench4er
-en2ch
-enche2
-en3dic
-e5nea
-e5nee
-en3em
-en5ero
-en1er
-en5e1si
-e1nes
-e2n5est
-en3etr
-e3ne4w
-en5i4c3s2
-e5n2ie4
-e5nil
-e3n2i4o
-en3is2h
-en3it
-e5ni1u
-5eniz
-4e4n1n2
-4eno
-e4no4g
-e4nos
-en3ov
-en4sw2
-e2n1s2
-ent5age
-en1t
-en1ta
-4enth1es
-enth2e
-en3u1a
-en5uf
-e3ny.
-4e4n3z
-e5of
-eo2g
-e4oi4
-e3ol
-eop3a2r
-eo2pa
-e1or
-eo3re
-eo5rol
-eos4
-e4ot
-eo4to
-e5out
-eou2
-e5ow
-e2pa
-e3p4ai2
-ep5anc
-epa2n
-e5pel
-e3pen1t
-ep5e5t2i1t2io
-epe2t
-epeti1ti
-ephe4
-e4pli
-e1p2l2
-e1po
-e4prec
-epr2
-ep5re1ca
-e4p2r2ed
-ep3re1h4
-e3pro
-e4prob
-ep4s4h
-e2p1s2
-ep5ti5b
-e2p1t
-e4pu2t
-ep5u1ta
-e1q
-equi3l
-equ2
-eq2ui2
-e4q3ui3s
-er1a
-e2ra4b
-4er4and
-era2n
-er3a2r
-4er4ati.
-2er1b
-er4b2l2
-er3ch
-er1c
-er4che2
-2e2re.
-e3re1a4l
-ere5co
-ere3in
-erei2
-er5el.
-er3e1mo
-er5e1na
-er5ence
-4erene
-er3en1t
-ere4q
-er5e2ss
-er3es2t
-eret4
-er1h4
-er1i
-e1r2i3a4
-5erick1
-e3rien
-er2ie4
-eri4er
-er3in4e
-e1r2i1o
-4erit
-er4i1u
-er2i4v
-e4ri1va
-er3m4
-er4nis4
-4er3n2it
-5erniz
-er3no4
-2ero
-er5ob
-e5r2oc
-ero4r
-er1ou2
-e4r1s2
-er3set
-er2se
-ert3er
-4er2tl
-er3tw4
-4eru
-eru4t
-5erwau
-er1w
-e1s4a2
-e4sa2ge.
-e4sages
-es2c
-e2s1ca
-es5ca2n
-e3scr
-es5cu
-e1s2e
-e2sec
-es5e1cr
-e4s5enc
-e4sert.
-e4ser4t1s2
-e4ser1va
-4es2h
-e3sha
-esh5e2n
-e1si
-e2sic
-e2s2id
-es5i1den
-e4s5ig1n4a
-es2ig
-e2s5im
-e2s4i4n
-esis4te
-e1sis
-e5si4u
-e5skin
-esk2
-esk1i
-es4mi
-e2s1m
-e2sol
-e1so
-es3olu
-e2so2n
-es5o1n1a4
-e1sp
-e2s3per
-es5pi1ra
-esp4ir
-es4pre
-espr2
-2e2ss
-es4si4b
-es1si
-esta2n4
-es1ta
-es3t2ig
-est2i
-es5tim
-4es2to
-e3sto2n
-2est4r
-e5stro
-estruc5
-e2su2r
-e1su
-es5ur1r4
-es4w2
-e2ta4b
-e1ta
-e3ten4d
-e3teo
-ethod3
-et1ic
-e5tide
-et2id
-e2t1in4
-et2i4no
-e5t4ir
-e5t2i1t2io
-eti1ti
-et5i1t2iv
-4e2t1n2
-et5o1n1a
-e1to
-eto2n
-e3tra
-e3tre
-et3ric
-et5rif
-et3rog
-et5ros
-et3u1a
-e1tu
-et5ym
-e1ty
-e4t5z
-4eu
-e5un
-e3up
-eu3ro
-e2us4
-eute4
-euti5l
-e4u1t2i
-eu5tr
-eva2p5
-e1va
-e2vas
-ev5ast
-e5vea
-ev3el1l
-eve4l3o
-e5veng
-even4i
-ev1er
-e5v2er1b
-e1vi
-ev3id
-e2vi4l
-e4v1in
-e3v2i4v
-e5voc
-e5vu
-e1wa
-e4wag
-e5wee
-e3wh
-ewil5
-ewi2
-ew3in4g
-e3wit
-1ex3p
-5ey1c
-5eye.
-eys4
-1fa
-fa3b2l2
-f4ab3r
-fa4ce
-4fag
-fa4i4n4
-fai2
-fal2l5e
-fal1l
-4f4a4ma
-fam5is
-5f2a2r
-far5th
-fa3ta
-fa3th2e
-f4ath
-4fa1to
-fau4lt5
-fau4l2
-4f5b
-4fd
-4fe.
-feas4
-fe4ath3
-fea2t
-f2e4b
-4fe1ca
-5fe2c1t
-2fed
-fe3l2i
-fe4mo
-fen2d
-fen1d5e
-fer1
-5fer1r4
-fev4
-4f1f
-f4fes
-f4f2ie4
-f1fi
-f5f2in.
-f2fin
-f2f5is
-f4f2ly5
-ff4l2
-f2fy
-4fh
-1fi
-f2i3a
-2f3ic.
-4f3ical
-fi1ca
-f3ica2n
-4ficate
-f3i1cen
-fi3cer
-f2i1c4i
-5fi3c2i1a
-5fic2ie4
-4fi4c3s2
-fi3cu
-fi5del
-f2id
-fight5
-f2ig
-fil5i
-fil2l5in4
-fil1l
-fill2i
-4fi1ly
-2fin
-5fi1na
-f4in2d5
-f2i2ne
-f1in3g
-f2i4n4n2
-fis4t2i
-f4l2
-f5l2e2ss
-fles2
-flin4
-flo3re
-f2ly5
-4fm
-4fn
-1fo
-5fo2n
-fon4de
-f2ond
-fon4t
-fo2r
-fo5rat
-fo1ra
-for5ay
-fore5t
-for4i
-for1t5a
-fos5
-4f5p
-fra4t
-f5rea
-fres5c
-fri2
-fril4
-frol5
-2f3s
-2ft
-f4to
-f2ty
-3fu
-fu5el
-4fug
-fu4min
-fu1mi
-fu5ne
-fu3ri
-fusi4
-f2us
-fu2s4s
-4fu1ta
-1fy
-1ga
-ga2f4
-5gal.
-3gal1i
-ga3lo
-2gam
-ga5met
-g5a2mo
-gan5is
-ga2n
-ga3niz
-gani5za1
-4gano4
-gar5n4
-g2a2r
-ga2ss4
-g4ath3
-4ga1t2iv
-4gaz
-g3b
-gd4
-2ge.
-2ged
-geez4
-gel4in
-gel2i
-ge5lis
-ge5l1iz
-4ge1ly
-1gen
-ge4n2at
-ge1na
-g5e5niz
-4g4eno
-4geny
-1geo
-ge3om
-g4ery
-5ge1si
-geth5
-4ge1to
-ge4ty
-ge4v
-4g1g2
-g2ge
-g3ger
-gglu5
-ggl2
-g1go4
-gh3in
-gh5out
-ghou2
-gh4to
-5gi.
-1g2i4a
-gi2a5r
-g1ic
-5gi3c2i1a
-g2i1ci
-g4i1co
-gien5
-g2ie4
-5gies.
-gil4
-g3i1men
-3g4in.
-g4in5ge
-5g4i2n1s2
-5g2io
-3g4ir
-gir4l
-g3is1l2
-gi4u
-5g2iv
-3giz
-gl2
-gla4
-gl2ad5i
-gla2d
-5glas
-1gle
-gli4b
-g3l2ig
-3glo
-glo3r
-g1m
-g4my
-g1n4a
-g4na.
-gne4t4t2
-g1ni
-g2n1in
-g4n2i4o
-g1no
-g4no4n
-1go
-3go.
-gob5
-5goe
-3g4o4g
-go3is
-goi2
-go2n2
-4g3o3n1a
-gon5do5
-g2ond
-go3ni
-5goo2
-go5riz
-gor5ou2
-5gos.
-gov1
-g3p
-1gr
-4gra1d2a
-gra2d
-g4r2ai2
-gra2n2
-5gra4ph.
-g5ra3ph4er
-5graph1ic
-gr4aphi
-4g3ra1phy
-4gray
-gre4n
-4gress.
-gr2e2ss
-4grit
-g4ro
-gruf4
-gs2
-g5ste
-gth3
-gu4a
-3guar2d
-gu2a2r
-2gue
-5gui5t
-g2ui2
-3gun
-3g2us
-4gu4t
-g3w
-1gy
-2g5y3n
-gy5ra
-h3ab4l2
-ha2ch4
-hae4m
-hae4t
-h5agu
-ha3la
-hala3m
-ha4m
-han4ci
-ha2n
-han4cy
-5hand.
-h4and
-h2an4g
-hang5er
-han1g5o
-h5a5niz
-ha4n4k2
-han4te
-han1t
-ha2p3l2
-ha2p5t
-ha3ra2n
-h2a2r
-ha5r2as
-har2d
-hard3e
-har4le4
-har1l
-harp5en
-har2p
-har5ter
-ha2s5s
-haun4
-5haz
-haz3a1
-h1b
-1hea2d1
-3he2a2r
-he4ca2n
-he1ca
-h5ecat
-h4ed
-h4e5do5
-he3l4i
-hel4lis
-hel1l
-hell2i
-hel4ly
-h5elo
-he4m4p
-he2n
-he1na4
-hen5at
-he1o5r
-hep5
-h4er1a
-hera3p
-her4ba
-h2er1b
-here5a
-h3ern
-h5er1ou2
-h2ero
-h3ery
-h1es
-he2s5p
-he4t
-he2t4ed
-h4eu4
-h1f
-h1h
-hi5a2n
-h2i1a
-hi4co
-high5
-h2ig
-h4il2
-himer4
-h4i1na
-hion4e
-h2io
-hio2n
-h2i4p
-hir4l
-h4ir
-hi3ro
-hir4p
-hir4r4
-his3el
-h4ise
-h4i2s4s
-hith5er
-h2ith
-hith2e
-h2i2v
-4hk
-4h1l4
-hla2n4
-h2lo
-hlo3ri
-4h1m
-hmet4
-2h1n
-h5odiz
-h5o2d1s2
-ho4g
-ho1ge4
-hol5a2r
-ho1la
-3hol4e
-ho4ma
-ho2me3
-ho1n4a
-ho2n
-ho5ny
-3hood
-hoo2
-hoo2n4
-hor5at
-ho1ra
-ho5r2is
-hort3e
-ho5ru
-hos4e
-ho5sen
-hos1p
-1ho2us
-hou2
-house3
-hov5el
-4h5p
-4hr4
-hree5
-hro5niz
-hro2n
-hro3po
-4h1s2
-h4s2h
-h4t2a2r
-h1ta
-ht1en
-ht5es
-h4ty
-hu4g
-hu4min
-hu1mi
-hun5ke
-hu4nk2
-hun4t
-hus3t4
-h2us
-hu4t
-h1w
-h4war4t
-hw2a2r
-hy3pe
-hy3ph
-hy2s
-2i1a
-i2al
-iam4
-iam5e1te
-i2a2n
-4ianc
-ian3i
-4ian4t
-ia5pe
-ia2ss4
-i4a1t2iv
-ia4tric
-ia1tr
-i4a2tu
-ibe4
-ib3er1a
-ib5ert
-ib5i1a
-ib3in
-ib5it.
-ibi2t
-ib5ite
-i1b2l2
-ib3li
-i5bo
-i1br
-i2b5ri
-i5bu4n
-4icam
-i1ca
-5icap
-4ic2a2r
-i4car.
-i4cara
-icas5
-i4cay
-iccu4
-ic3c
-4iceo
-4i2ch
-2i1ci
-i5c2id
-ic5i1na
-i2cin
-i2c2ip
-ic3i1pa
-i4c1ly4
-i1c4l4
-i2c5oc
-i1co
-4i1cr
-5icra
-i4cry
-ic4te
-i2c1t
-ic1tu2
-ic4t3u1a
-ic3u1la
-ic4um
-ic5uo
-i3cur
-2id
-i4dai2
-i1d2a
-id5anc
-ida2n
-id5d4
-ide3a4l
-ide4s2
-i2di
-id5i2a2n
-i1d4i3a
-idi4a2r
-i5d2ie4
-i1d3io
-idi5ou2
-id1it
-id5i1u
-i3dle
-i4dom
-i1do
-id3ow
-i4dr
-i2du
-id5uo
-2ie4
-ied4e
-5ie5ga
-ie2ld3
-ie1n5a4
-ien4e
-i5e4n1n2
-i3ent2i
-ien1t
-i1er.
-i3es2c
-i1est
-i3et
-4if.
-if5ero
-ifer1
-iff5en
-i4f1f
-if4fr
-4i2f3ic.
-i1fi
-i3f2ie4
-i3f4l2
-4i2ft
-2ig
-iga5b
-i1ga
-ig3er1a
-ight3i
-4igi
-i3gib
-ig3il4
-ig3in
-ig3it
-i4g4l2
-i2go
-ig3or
-ig5ot
-i5gre
-i1gr
-ig2u5i2
-ig1ur
-i3h
-4i5i4
-i3j
-4ik
-i1la
-il3a4b
-i4l4ade
-ila2d
-i2l5am
-ila5ra
-il2a2r
-i3leg
-il1er
-ilev4
-i2l5f
-il1i
-il3i1a
-il2ib
-il3io
-il4ist
-2il1it
-il2iz
-ill5ab
-il1l
-4i2l1n2
-il3o1q
-il4ty
-i4lt
-il5ur
-il3v
-i4mag
-i1ma
-im3age
-ima5ry
-im2a2r
-iment2a5r
-i1men
-i3men1t
-imen1ta
-4imet
-im1i
-im5i1d4a
-im2id
-imi5le
-i5m2ini
-4imit
-im4ni
-i4m1n
-i3mo2n
-i1mo
-i2mu
-im3u1la
-2in.
-i4n3au
-i1na
-4inav
-incel4
-in3cer
-4ind
-in5dling
-2ine
-i3nee
-in4er4a2r
-in1er
-iner1a
-i5n2e2ss
-i1nes
-4in1ga
-4inge
-in5gen
-4ingi
-in5gling
-ingl2
-4in1go
-4in1gu
-2ini
-i5ni.
-i4n4i1a
-in3i4o
-in1is
-i5ni4te.
-in2it
-in2ite
-5i3n2i1t2io
-ini1ti
-in3i1ty
-4i4nk2
-4i4n1l
-2i4n1n2
-2i1no
-i4no4c
-ino4s
-i4not
-2i2n1s2
-in3se
-insu1r5a
-in1su
-insu2r
-2int.
-in1t
-2in4th
-in1u
-i5n2us
-4iny
-2io
-4io.
-io1ge4
-io2gr
-i1ol
-io4m
-ion3at
-io2n
-io1n1a
-ion4ery
-ion1er
-ion3i
-i2o5ph
-ior3i
-i4os
-i4o5th
-i5oti
-io4to
-i4our
-iou2
-2ip
-ipe4
-iphr2as4
-ip4hr4
-ip3i
-ip4ic
-ip4re4
-ipr2
-ip3ul
-i3qua
-iqu2
-iq5ue1f
-iq3u2id
-iq2ui2
-iq3ui3t
-4ir
-i1ra
-i2ra4b
-i4rac
-ird5e
-ire4de
-i2r2ed
-i4re1f
-i4rel4
-i4res
-ir5gi
-irg2
-ir1i
-iri5de
-ir2id
-ir4is
-iri3tu
-5i5r2iz
-ir4min
-ir1m
-iro4g
-5iron.
-iro2n
-ir5ul
-2is.
-is5ag
-isa2
-is3a2r
-isas5
-2is1c
-is3ch2
-4ise
-is3er
-3i4s3f
-is5ha2n
-is2h
-is3ho2n3
-isho4
-ish5op
-is3i1b
-is2i4d
-i5sis
-is5i1t2iv
-isi1ti
-4is4k2
-isla2n4
-is1l2
-4is4m1s2
-i2s1m
-i2so
-iso5mer
-i3som
-iso2me
-is1p
-is2pi
-is4py
-4i2s1s
-is4sal
-is1sa2
-issen4
-is4s1e4s
-is4ta.
-is1ta
-is1te
-is1t2i
-ist4ly
-is2tl
-4istral
-ist4r
-is1tra
-i2su
-is5us
-4i3ta.
-i1ta
-ita4bi
-i2tab
-i4tag
-4ita5m
-i3ta2n
-i3tat
-2ite
-it3er1a
-i5ter1i
-it4es
-2ith
-i1ti
-4i1t2i1a
-4i2tic
-it3i1ca
-5i5tick1
-i2t3ig
-it5il1l
-i2tim
-2i1t2io
-4itis
-i4ti2s4m
-i2t5o5m
-i1to
-4ito2n
-i4tram
-i1tra
-it5ry
-4i4t3t2
-it3u1at
-i1tu
-itu1a
-i5tud2
-it3ul
-4itz.
-i4tz
-i1u
-2iv
-iv3el1l
-iv3en.
-i4v3er.
-i4vers.
-ive4r1s2
-iv5il.
-i2vil
-iv5io
-iv1it
-i5vore
-iv3o3ro
-i4v3ot
-4i5w
-ix4o
-4iy
-4iz2a2r2
-iza1
-i2z1i4
-5izon1t
-i1zo
-izo2n
-5ja
-jac4q
-ja4p
-1je
-je4r5s2
-4jes4t2ie4
-jest2i
-4jes2ty
-jew3
-jo4p
-5judg
-3ka.
-k3ab
-k5ag
-kais4
-kai2
-kal4
-k1b
-k2ed
-1kee
-ke4g
-ke5l2i
-k3en4d
-k1er
-kes4
-k3e2st.
-ke4ty
-k3f
-kh4
-k1i
-5ki.
-5k2ic
-k4il1l
-kilo5
-k4im
-k4in.
-kin4de
-k4ind
-k5i5n2e2ss
-k2ine
-ki1nes
-kin4g
-k2i4p
-kis4
-k5is2h
-kk4
-k1l
-4k3ley
-4k1ly
-k1m
-k5nes
-1k2no
-ko5r
-kos2h4
-k3ou2
-kro5n
-4k1s2
-k4sc
-ks4l2
-k4s4y
-k5t
-k1w
-lab3ic
-l4abo
-l4a2ci4
-l4ade
-la2d
-la3d2y
-lag4n
-la2m3o
-3l4and
-la2n
-lan4dl
-lan5et
-lan4te
-lan1t
-lar4g2
-l2a2r
-lar3i
-las4e
-la5ta2n
-la2ta
-4latel2i4
-4la1t2iv
-4lav
-la4v4a
-2l1b
-lbin4
-4l1c2
-lce4
-l3ci
-2ld
-l2de
-ld4ere
-ld4er1i
-ldi4
-ld5is1
-l3dr
-l4dri
-le2a
-le4bi
-l2e1b
-le2ft5
-le1f
-5leg.
-5le4g1g2
-le4mat
-le1ma
-lem5at1ic
-4len.
-3lenc
-5le2ne.
-1len1t
-le3ph
-le4pr2
-le2ra5b
-ler1a
-ler4e
-3lerg2
-3l4er1i
-l4ero
-les2
-le5s1co
-les2c
-5lesq
-3l2e2ss
-5less.
-l3e1va
-lev4er.
-lev1er
-lev4er1a
-lev4e4r1s2
-3ley
-4leye
-2lf
-l5fr
-4l1g4
-l5ga
-lg2a2r3
-l4ges
-l1go3
-2l3h
-li4ag
-l2i1a
-li2am4
-liar5iz
-li2a2r
-liar1i
-li4as
-li4a1to
-li5bi
-5lic2io
-l2i1ci
-li4cor
-li1co
-4li4c3s2
-4lict.
-li2c1t
-l4icu
-l3i1cy
-l3i1d2a
-l2id
-lid5er
-3li2di
-lif3er1
-l4i4f1f
-li4f4l2
-5ligate
-l2ig
-li1ga
-3ligh
-li4gra
-li1gr
-3l4ik
-4l4i4l
-lim4b2l2
-li4m1b
-lim3i
-li4mo
-l4i4m4p
-l4i1na
-1l4ine
-lin3ea
-l2in3i
-link5er
-l4i4nk2
-li5og
-l2io
-4l4iq
-lis4p
-l1it
-l2it.
-5lit3i1ca
-li1ti
-l4i2tic
-l5i5ti4c3s2
-liv3er
-l2iv
-l1iz
-4lj
-lka3
-l3kal4
-lka4t
-l1l
-l4law
-l2le
-l5le2a
-l3lec
-l3leg
-l3lel
-l3le4n
-l3le4t
-ll2i
-l2lin4
-l5l4i1na
-ll4o
-lloq2ui5
-llo1q
-lloqu2
-l2l5out
-llou2
-l5low
-2lm
-l5met
-lm3ing
-l4mo2d1
-l1mo
-lmo2n4
-2l1n2
-3lo.
-lob5al
-lo4ci
-4lof
-3log1ic
-l5o1go
-3logu
-lom3er
-lo2me
-5long
-lo2n
-lon4i
-l3o3niz
-lood5
-loo2
-5lo4pe.
-lop3i
-l3o4p1m
-lo1ra4
-lo4ra1to
-lo5r2ie4
-lor5ou2
-5los.
-los5et
-5los5o3phiz
-lo2so
-los4op
-los2oph
-5los5o1phy
-los4t
-lo4ta
-loun5d
-lou2
-2lout
-4lov
-2lp
-lpa5b
-l1pa
-l3pha
-l5phi
-lp5ing
-lpi2n
-l3pit
-l4p2l2
-l5pr2
-4l1r
-2l1s2
-l4sc
-l2se
-l4s2ie4
-4lt
-lt5ag
-l1ta
-ltane5
-lta2n
-l1te
-lten4
-lter1a4
-lth3i
-l5ties.
-lt2ie4
-ltis4
-l1tr
-l1tu2
-ltu1r3a
-lu5a
-lu3br
-lu2ch4
-lu3ci
-lu3en
-luf4
-lu5id
-l2ui2
-lu4ma
-5lu1mi
-l5umn.
-lu4m1n
-5lum3n4i1a
-lu3o
-luo3r
-4lup
-lu2ss4
-l2us
-lus3te
-1lut
-l5ven
-l5vet4
-2l1w
-1ly
-4lya
-4ly1b
-ly5me4
-ly3no
-2lys4
-l5y3s2e
-1ma
-2mab
-ma2ca
-ma5ch2ine
-ma2ch
-ma4ch1in
-ma4c4l4
-mag5in
-mag1i
-5mag1n
-2mah
-ma2id5
-mai2
-4ma2ld
-ma3l2ig
-mal1i
-ma5lin
-mal4l2i
-mal1l
-mal4ty
-ma4lt
-5ma3n4i1a
-ma2n
-man5is
-man3iz
-4map
-ma5ri2ne.
-m2a2r
-mar1i
-mar2in4e
-ma5r2iz
-mar4ly
-mar1l
-mar3v
-ma5sce
-mas4e
-mas1t
-5mate
-m4ath3
-ma3tis
-4mati3za1
-ma1tiz
-4m1b
-m1ba4t5
-m5bil
-m4b3ing
-mb2i4v
-4m5c
-4me.
-2med
-4med.
-5me3d4i3a
-m4edi
-me3d2ie4
-m5e5d2y
-me2g
-mel5o2n
-me4l4t
-me2m
-me1m1o3
-1men
-me1n4a
-men5ac
-men4de
-4mene
-men4i
-me2n1s4
-men1su5
-3men1t
-men4te
-me5o2n
-m5er1sa2
-me4r1s2
-2mes
-3mest2i
-me4ta
-met3a2l
-me1te
-me5thi
-m4etr
-5met3ric
-me5tr2ie4
-me3try
-me4v
-4m1f
-2mh
-5mi.
-m2i3a
-mi1d4a
-m2id
-mid4g
-m2ig4
-3mil3i1a
-mil1i
-m5i5l2ie4
-m4il1l
-mi1n4a
-3m4ind
-m5i3nee
-m2ine
-m4ingl2
-min5gli
-m5ing1ly
-min4t
-m4in1u
-miot4
-m2io
-m2is
-mi4s4er.
-m4ise
-mis3er
-mis5l2
-mis4t2i
-m5i4stry
-mist4r
-4m2ith
-m2iz
-4mk
-4m1l
-m1m
-mma5ry
-m1ma
-mm2a2r
-4m1n
-m1n4a
-m4n1in
-mn4o
-1mo
-4mocr
-5moc5ra1tiz
-mo2d1
-mo4go
-mois2
-moi2
-mo4i5se
-4m2ok
-mo5lest
-moles2
-mo3me
-mon5et
-mo2n
-mon5ge
-mo3n4i3a
-mon4i2s1m
-mon1is
-mon4ist
-mo3niz
-monol4
-mo3ny.
-mo2r
-4mo5ra.
-mo1ra
-mos2
-mo5sey
-mo3sp
-m4oth3
-m5ouf
-mou2
-3mo2us
-mo2v
-4m1p
-mpara5
-m1pa
-mp2a2r
-mpa5rab
-mp4a4r5i
-m3pe2t
-mphas4
-m2pi
-mp2i4a
-mp5ies
-mp2ie4
-m4p1i2n
-m5p4ir
-mp5is
-mpo3ri
-m1p4or
-mpos5ite
-m1pos
-m4po2us
-mpou2
-mpov5
-mp4tr
-m2p1t
-m2py
-4m3r
-4m1s2
-m4s2h
-m5si
-4mt
-1mu
-mul2a5r4
-mu1la
-5mu4lt
-mul1ti3
-3mum
-mun2
-4mup
-mu4u
-4mw
-1na
-2n1a2b
-n4abu
-4nac.
-na4ca
-n5a2c1t
-nag5er.
-nak4
-na4l1i
-na5l2i1a
-4na4lt
-na5mit
-n2a2n
-nan1ci4
-nan4it
-na4nk4
-nar3c
-n2a2r
-4nare
-nar3i
-nar4l
-n5ar1m
-n4as
-nas4c
-nas5t2i
-n2at
-na3ta2l
-na2ta
-nat5o5m2iz
-na2tom
-na1to
-n2au
-nau3se
-na2us
-3naut
-nav4e
-4n1b4
-nc2a2r5
-n1ca
-n4ces.
-n3cha
-n2ch
-n5cheo
-nche2
-n5ch4il2
-n3chis
-n2c1in
-n1ci
-n2c4it
-ncou1r5a
-n1co
-ncou2
-n1cr
-n1cu
-n4dai2
-n1d2a
-n5da2n
-n1de
-nd5e2st.
-ndes2
-ndi4b
-n5d2if
-n1dit
-n3diz
-n5du2c
-n1du
-ndu4r
-nd2we
-nd1w
-2ne.
-n3e2a2r
-n2e2b
-neb3u
-ne2c
-5neck1
-2ned
-ne4gat
-ne1ga
-ne4g5a1t2iv
-5nege
-ne4la
-nel5iz
-nel2i
-ne5mi
-ne4mo
-1nen
-4nene
-3neo
-ne4po
-ne2q
-n1er
-ne2ra5b
-ner1a
-n4er3a2r
-n2ere
-n4er5i
-ner4r4
-1nes
-2nes.
-4ne1sp
-2nest
-4nes4w2
-3net1ic
-ne4v
-n5eve
-ne4w
-n3f
-n4gab
-n1ga
-n3gel
-nge4n4e
-n1gen
-n5gere
-n3ger1i
-ng5ha
-n3gib
-ng1in
-n5git
-n4gla4
-ngl2
-ngov4
-n1go
-ng5s2h
-ngs2
-n1gu
-n4gum
-n2gy
-4n1h4
-nha4
-nhab3
-nhe4
-3n4i1a
-ni3a2n
-ni4ap
-ni3ba
-ni4b2l2
-n2i4d
-ni5di
-ni4er
-n2ie4
-ni2fi
-ni5ficat
-nifi1ca
-n5i1gr
-n2ig
-n4ik4
-n1im
-ni3m2iz
-nim1i
-n1in
-5ni2ne.
-n2ine
-nin4g
-n2i4o
-5n2is.
-nis4ta
-n2it
-n4ith
-3n2i1t2io
-ni1ti
-n3itor
-ni1to
-ni3tr
-n1j
-4nk2
-n5k2ero
-nk1er
-n3ket
-nk3in
-nk1i
-n1k1l
-4n1l
-n5m
-nme4
-nmet4
-4n1n2
-nne4
-nni3al
-n3n4i1a
-nn2i4v
-nob4l2
-no3ble
-n5o1c4l4
-4n3o2d
-3noe
-4nog
-no1ge4
-nois5i
-noi2
-no5l4i
-5nol1o1gis
-3nomic
-n5o5m2iz
-no4mo
-no3my
-no4n
-non4ag
-no1n1a
-non5i
-n5oniz
-4nop
-5nop5o5l2i
-no2r5ab
-no1ra
-no4rary
-nor2a2r
-4nos2c
-nos4e
-nos5t
-no5ta
-1nou2
-3noun
-nov3el3
-nowl3
-n1p4
-npi4
-npre4c
-npr2
-n1q
-n1r
-nru4
-2n1s2
-n2s5ab
-nsa2
-nsati4
-ns4c
-n2se
-n4s3e4s
-ns2id1
-ns2ig4
-n2s1l2
-n2s3m
-n4soc
-n1so
-ns4pe
-n5spi
-nsta5b2l2
-ns1ta
-ns2tab
-n1t
-n2ta4b
-n1ta
-nte4r3s2
-nt2i
-n5ti2b
-nti4er
-nt2ie4
-nti2f2
-n3t2ine
-n2t1in
-n4t3ing
-nt2i4p
-ntrol5l2i
-ntrol1l
-n4t4s2
-ntu3me
-n1tu
-n3tum
-nu1a
-nu4d
-nu5en
-nuf4fe
-nu4f1f
-n3ui4n
-n2ui2
-3nu3it
-n4um
-nu1me
-n5u1mi
-3nu4n
-n3uo
-nu3tr
-n1v2
-n1w4
-nym4
-nyp4
-4nz
-n3za1
-4oa
-oa2d3
-o5a5les2
-o2ale
-oard3
-o2a2r
-oas4e
-oast5e
-oat5i
-ob3a3b
-o5b2a2r
-o1be4l
-o1bi
-o2bin
-ob5ing
-o3br
-ob3ul
-o1ce
-o2ch4
-o3che4t
-oche2
-ocif3
-o1ci
-o4cil
-o4clam
-o1c4l4
-o4cod
-o1co
-oc3rac
-oc5ra1tiz
-ocre3
-5ocrit
-ocri2
-octo2r5a
-o2c1t
-oc1to
-oc3u1la
-o5cure
-od5d1ed
-od1d4
-od3ic
-o1d2i3o
-o2do4
-od4or3
-o4d5uct.
-o1du
-odu2c
-odu2c1t
-o4d5uc4t1s2
-o4el
-o5eng
-o3er
-oe4ta
-o3ev
-o2fi
-of5ite
-of4i4t4t2
-o2g5a5r
-o1ga
-o4g5a1t2iv
-o4ga1to
-o1ge
-o5gene
-o1gen
-o5geo
-o4ger
-o3g2ie4
-1o1gis
-og3it
-o4gl2
-o5g2ly
-3ogniz
-og1ni
-o4g4ro
-o1gr
-og2u5i2
-1o1gy
-2o2g5y3n
-o1h2
-ohab5
-oi2
-oic3es
-oi3der
-o2id
-oi4f1f4
-o2ig4
-oi5let
-o3ing
-oint5er
-oin1t
-o5i2s1m
-oi5so2n
-oi2so
-oist5en
-ois1te
-oi3ter
-o2ite
-o5j
-2ok
-o3ken
-ok5ie4
-ok1i
-o1la
-o4la2n
-ola2ss4
-o2l2d
-ol2d1e
-ol3er
-o3les2c
-oles2
-o3let
-ol4fi
-o2lf
-ol2i
-o3l2i1a
-o3lice
-ol5id.
-ol2id
-o3li4f
-o5l4i4l
-ol3ing
-o5l2io
-o5l2is.
-ol3is2h
-o5l2ite
-ol1it
-o5l2i1t2io
-oli1ti
-o5l2iv
-oll2i4e4
-ol1l
-oll2i
-ol5o3giz
-olo4r
-ol5p2l2
-o2lp
-o4l2t
-ol3ub
-ol3ume
-ol3un
-o5l2us
-ol2v
-o2ly
-o2m5ah
-o1ma
-oma5l
-om5a1tiz
-om2be
-o4m1b
-om4b2l2
-o2me
-om3e1n4a
-o1men
-om5er2se
-ome4r1s2
-o4met
-om5e3try
-om4etr
-o3m2i3a
-om3ic.
-om3i1ca
-o5m2id
-om1in
-o5m2ini
-5ommend
-om1m
-om1men
-omo4ge
-o1mo
-o4mo2n
-om3pi
-o4m1p
-ompro5
-ompr2
-o2n
-o1n1a
-on4ac
-o3n2a2n
-on1c
-3oncil
-on1ci
-2ond
-on5do
-o3nen
-o2n5est
-o1nes
-on4gu
-on1ic
-o3n2i4o
-on1is
-o5ni1u
-on3key
-o4nk2
-on4odi
-o4n3o2d
-on3o3my
-o2n3s2
-on5spi4
-onspi1r5a
-onsp4ir
-on1su4
-onten4
-on1t
-on3t4i
-onti2f5
-on5um
-on1va5
-on1v2
-oo2
-ood5e
-ood5i
-o2o4k
-oop3i
-o3ord
-oost5
-o2pa
-o2p2e5d
-op1er
-3oper1a
-4op4erag
-2oph
-o5pha2n
-o5ph4er
-op3ing
-opi2n
-o3pit
-o5po2n
-o4posi
-o1pos
-o1pr2
-op1u
-opy5
-o1q
-o1ra
-o5ra.
-o4r3ag
-or5al1iz
-oral1i
-or5an4ge
-ora2n
-or2ang
-ore5a
-o5re1a4l
-or3ei2
-or4e5s2h
-or5e2st.
-ores2t
-orew4
-or4gu
-org2
-4o5r2i3a
-or3i1ca
-o5ril
-or1in
-o1r2i1o
-or3i1ty
-o3ri1u
-or2mi
-or1m
-orn2e
-o5rof
-or3oug
-orou2
-or5pe
-or1p
-3orrh4
-or1r4
-or4se
-o4rs2
-ors5en
-orst4
-or3thi
-or3thy
-or4ty
-o5rum
-o1ry
-os3al
-osa2
-os2c
-os4ce
-o3scop
-os1co
-4oscopi
-o5scr
-os4i4e4
-os5i1t2iv
-osi1ti
-os3i1to
-os3i1ty
-o5si4u
-os4l2
-o2so
-o2s4pa
-os4po
-os2ta
-o5stati
-os5til
-ost2i
-os5tit
-o4ta2n
-o1ta
-otele4g
-ot3er.
-ot5e4r1s2
-o4tes
-4oth
-oth5e1si
-oth2e
-oth1es
-oth3i4
-ot3ic.
-ot5i1ca
-o3tice
-o3tif2
-o3tis
-oto5s2
-o1to
-ou2
-ou3b2l2
-ouch5i
-ou2ch
-ou5et
-ou4l
-ounc5er
-oun2d
-ou5v2
-ov4en
-over4ne
-ove4r3s2
-ov4ert
-o3vis
-o4vi1ti4
-o5v4ol
-ow3der
-ow3el
-ow5est3
-ow1i2
-own5i
-o4wo2
-oy1a
-1pa
-pa4ca
-pa4ce
-pa2c4t
-p4a2d
-5paga4n
-pa1ga
-p3agat
-p4ai2
-pa4i4n4
-p4al
-pa1n4a
-pa2n
-pan3el
-pan4ty
-pan1t
-pa3ny
-pa1p
-pa4pu
-para5b2l2
-p2a2r
-pa2rab
-par5age
-par5d2i
-3pare
-par5el
-p4a4r1i
-par4is
-pa2te
-pa5ter
-5pathic
-p4ath
-pa5thy
-pa4tric
-pa1tr
-pav4
-3pay
-4p1b
-pd4
-4pe.
-3pe4a
-pear4l
-pe2a2r
-pe2c
-2p2ed
-3pede
-3p4edi
-pe3d4i3a4
-ped4ic
-p4ee
-pee4d
-pek4
-pe4la
-pel2i4e4
-pel2i
-pe4n2a2n
-pe1na
-p4enc
-pen4th
-pen1t
-pe5o2n
-p4era.
-per1a
-pera5b2l2
-pe2ra4b
-p4erag
-p4er1i
-peri5st
-per2is
-per4mal
-per3m4
-per1ma
-per2me5
-p4ern
-p2er3o
-per3ti
-p4e5ru
-per1v
-pe2t
-pe5ten
-pe5tiz
-4pf
-4pg
-4ph.
-phar5i
-ph2a2r
-ph4e3no
-phe2n
-ph4er
-ph4es.
-ph1es
-ph1ic
-5ph2ie4
-ph5ing
-5phis1t2i
-3phiz
-p4h2l4
-3phob
-3phone
-pho2n
-5phoni
-pho4r
-4p4h1s2
-ph3t
-5phu
-1phy
-p2i3a
-pi2a2n4
-pi4c2ie4
-p2i1ci
-pi4cy
-p4id
-p5i1d2a
-pi3de
-5pi2di
-3piec
-p2ie4
-pi3en
-pi4grap
-p2ig
-pi1gr
-pi3lo
-pi2n
-p4in.
-p4ind4
-p4i1no
-3p2i1o
-pio2n4
-p3ith
-pi5tha
-pi2tu
-2p3k2
-1p2l2
-3pla2n
-plas5t
-pl2i3a
-pli5er
-pl2ie4
-4pl2ig
-pli4n
-ploi4
-plu4m
-plu4m4b
-4p1m
-2p3n
-po4c
-5pod.
-po5em
-po3et5
-5po4g
-poin2
-poi2
-5poin1t
-poly5t
-po2ly
-po4ni
-po2n
-po4p
-1p4or
-po4ry
-1pos
-po2s1s
-p4ot
-po4ta
-5poun
-pou2
-4p1p
-ppa5ra
-p1pa
-pp2a2r
-p2pe
-p4p2ed
-p5pel
-p3pen
-p3per
-p3pe2t
-ppo5s2ite
-p1pos
-pr2
-pray4e4
-5pre1c2i
-pre5co
-pre3e2m
-pre4f5ac
-pre1f
-pre1fa
-pre4la
-pr1e3r4
-p3re1s2e
-3pr2e2ss
-pre5ten
-pre3v2
-5pr2i4e4
-prin4t3
-pr2i4s
-pri2s3o
-p3ro1ca
-pr2oc
-prof5it
-pro2fi
-pro3l
-pros3e
-pro1t
-2p1s2
-p2se
-ps4h
-p4si1b
-2p1t
-p2t5a4b
-p1ta
-p2te
-p2th
-p1ti3m
-ptu4r
-p1tu
-p4tw4
-pub3
-pue4
-puf4
-pu4l3c2
-pu4m
-pu2n
-pur4r4
-5p2us
-pu2t
-5pute
-put3er
-pu3tr
-put4t1ed
-pu4t3t2
-put4t1in
-p3w
-qu2
-qua5v4
-2que.
-3quer
-3quet
-2rab
-ra3bi
-rach4e2
-ra2ch
-r5a1c4l4
-raf5fi
-ra2f
-ra4f1f4
-ra2f4t
-r2ai2
-ra4lo
-ram3et
-r2ami
-ra3ne5o
-ra2n
-ran4ge
-r2ang
-r4ani
-ra5no4
-rap3er
-3ra1phy
-rar5c
-r2a2r
-rare4
-rar5e1f
-4raril
-rar1i
-r2as
-ratio2n4
-ra1t2io
-rau4t
-ra5vai2
-ra2va
-rav3el
-ra5z2ie4
-ra2z1i
-r1b
-r4bab
-r4bag
-rbi2
-r2b3i4f
-r2bin
-r5b2ine
-rb5ing.
-rb4o
-r1c
-r2ce
-r1cen4
-r3cha
-r2ch
-rch4er
-rche2
-r4ci4b
-r1ci
-r2c4it
-rcum3
-r4dal
-r1d2a
-rd2i
-r1d4i4a
-rdi4er
-rd2ie4
-rd1in4
-rd3ing
-2re.
-re1a4l
-re3a2n
-re5ar1r4
-re2a2r
-5rea2v
-re4aw
-r5ebrat
-r2e1b
-re3br
-rec5ol1l
-re2col
-re1co
-re4c5ompe
-reco4m1p
-re4cre
-re1cr
-2r2ed
-re1de
-re3dis1
-r4edi
-red5it
-re4fac
-re1f
-re1fa
-re2fe
-re5fer.
-refer1
-re3fi
-re4fy
-reg3is
-re5it
-rei2
-re1l2i
-re5lu
-r4en4ta
-ren1t
-ren4te
-re1o
-re5pi2n
-re4posi
-re1po
-re1pos
-re1pu
-r1er4
-r4er1i
-r2ero4
-r4e5ru
-r4es.
-re4spi
-re1sp
-res4s5i4b
-r2e2ss
-res1si
-res2t
-re5s2ta2l
-res1ta
-r2e3st4r
-re4ter
-re4ti4z
-re3tri
-r4eu2
-re5u1t2i
-rev2
-re4val
-re1va
-rev3el
-r5ev5er.
-rev1er
-re5ve4r1s2
-re5vert
-re5vi4l
-re1vi
-rev5olu
-re4wh
-r1f
-r3fu4
-r4fy
-rg2
-rg3er
-r3get
-r3g1ic
-rgi4n
-rg3ing
-r5gis
-r5git
-r1gl2
-rgo4n2
-r1go
-r3gu
-rh4
-4rh.
-4rhal
-r2i3a
-ria4b
-ri4ag
-r4ib
-rib3a
-ric5as5
-ri1ca
-r4ice
-4r2i1ci
-5ri5c2id
-ri4c2ie4
-r4i1co
-rid5er
-r2id
-ri3enc
-r2ie4
-ri3en1t
-ri1er
-ri5et
-rig5a2n
-r2ig
-ri1ga
-5r4igi
-ril3iz
-ril1i
-5rima2n
-ri1ma
-rim5i
-3ri1mo
-rim4pe
-ri4m1p
-r2i1na
-5rina.
-r4in4d
-r2in4e
-rin4g
-r2i1o
-5riph
-r2ip
-riph5e
-ri2p2l2
-rip5lic
-r4iq
-r2is
-r4is.
-r2is4c
-r3is2h
-ris4p
-ri3ta3b
-ri1ta
-r5ited.
-r2ite
-ri2t1ed
-rit5er.
-rit5e4r1s2
-r4i2t3ic
-ri1ti
-ri2tu
-rit5ur
-riv5el
-r2iv
-riv3et
-riv3i
-r3j
-r3ket
-rk4le
-rk1l
-rk4lin
-r1l
-rle4
-r2led
-r4l2ig
-r4lis
-rl5is2h
-r3lo4
-r1m
-rma5c
-r1ma
-r2me
-r3men
-rm5e4r1s2
-rm3ing
-r4ming.
-r4m2io
-r3mit
-r4my
-r4n2a2r
-r1na
-r3nel
-r4n1er
-r5net
-r3ney
-r5nic
-r1nis4
-r3n2it
-r3n2iv
-rno4
-r4nou2
-r3nu
-rob3l2
-r2oc
-ro3cr
-ro4e
-ro1fe
-ro5fil
-ro2fi
-r2ok2
-ro5k1er
-5role.
-rom5e1te
-ro2me
-ro4met
-rom4i
-ro4m4p
-ron4al
-ro2n
-ro1n1a
-ron4e
-ro5n4is
-ron4ta
-ron1t
-1room
-roo2
-5root
-ro3pel
-rop3ic
-ror3i
-ro5ro
-ro2s5per
-ro2s4s
-ro4th2e
-r4oth
-ro4ty
-ro4va
-rov5el
-rox5
-r1p
-r4pe4a
-r5pen1t
-rp5er.
-r3pe2t
-rp4h4
-rp3ing
-rpi2n
-r3po
-r1r4
-rre4c
-rre4f
-r4re1o
-rre4s2t
-rr2i4o
-rr2i4v
-rro2n4
-rros4
-rrys4
-4rs2
-r1sa2
-rsa5ti
-rs4c
-r2se
-r3sec
-rse4cr
-r4s5er.
-rs3e4s
-r5se5v2
-r1s2h
-r5sha
-r1si
-r4si4b
-rso2n3
-r1so
-r1sp
-r5sw2
-rta2ch4
-r1ta
-r4tag
-r3t2e1b
-r3ten4d
-r1te5o
-r1ti
-r2t5i2b
-rt2i4d
-r4tier
-rt2ie4
-r3t2ig
-rtil3i
-rtil4l
-r4ti1ly
-r4tist
-r4t2iv
-r3tri
-rtr2oph4
-rt4s2h4
-r4t1s2
-ru3a
-ru3e4l
-ru3en
-ru4gl2
-ru3i4n
-r2ui2
-rum3p2l2
-ru4m2p
-ru2n
-ru4nk5
-run4ty
-run1t
-r5usc2
-r2us
-ru2t1i5n
-r4u1t2i
-rv4e
-rvel4i
-r3ven
-rv5er.
-r5vest
-rv4e2s
-r3vey
-r3vic
-r3v2i4v
-r3vo
-r1w
-ry4c
-5rynge
-ryn5g
-ry3t
-sa2
-2s1ab
-5sack1
-sac3ri2
-s3a2c1t
-5sai2
-sa4l2a2r4
-s4a2l4m
-sa5lo
-sa4l4t
-3sanc
-sa2n
-san4de
-s4and
-s1ap
-sa5ta
-5sa3t2io
-sa2t3u
-sau4
-sa5vor
-5saw
-4s5b
-scan4t5
-s1ca
-sca2n
-sca4p
-scav5
-s4ced
-4s3cei2
-s4ces
-s2ch2
-s4cho2
-3s4c2ie4
-s1ci
-5sc4in4d
-s2cin
-scle5
-s1c4l4
-s4cli
-scof4
-s1co
-4scopy5
-scou1r5a
-scou2
-s1cu
-4s5d
-4se.
-se4a
-seas4
-sea5w
-se2c3o
-3se2c1t
-4s4ed
-se4d4e
-s5edl
-se2g
-se1g3r
-5sei2
-se1le
-5se2l2f
-5selv
-4se1me
-se4mol
-se1mo
-sen5at
-se1na
-4senc
-sen4d
-s5e2ned
-sen5g
-s5en1in
-4sen4t1d
-sen1t
-4sen2tl
-se2p3a3
-4s1er.
-s4er1l
-s2er4o
-4ser3vo
-s1e4s
-s4e5s2h
-ses5t
-5se5um
-s4eu
-5sev
-sev3en
-sew4i2
-5sex
-4s3f
-2s3g
-s2h
-2sh.
-sh1er
-5shev
-sh1in
-sh3io
-3sh2i4p
-sh2i2v5
-sho4
-sh5o2l2d
-sho2n3
-shor4
-short5
-4sh1w
-si1b
-s5ic3c
-3si2de.
-s2id
-5side4s2
-5si2di
-si5diz
-4sig1n4a
-s2ig
-sil4e
-4si1ly
-2s1in
-s2i1na
-5si2ne.
-s2ine
-s3ing
-1s2io
-5sio2n
-sio1n5a
-s4i2r
-si1r5a
-1sis
-3s2i1t2io
-si1ti
-5si1u
-1s2iv
-5siz
-sk2
-4ske
-s3ket
-sk5ine
-sk1i
-sk5in4g
-s1l2
-s3lat
-s2le
-sl2ith5
-sl1it
-2s1m
-s3ma
-smal1l3
-sma2n3
-smel4
-s5men
-5s4m2ith
-smo2l5d4
-s1mo
-s1n4
-1so
-so4ce
-so2ft3
-so4lab
-so1la
-so2l3d2
-so3lic
-sol2i
-5sol2v
-3som
-3s4on.
-so2n
-so1n1a4
-son4g
-s4op
-5soph1ic
-s2oph
-s5o3phiz
-s5o1phy
-sor5c
-sor5d
-4sov
-so5vi
-2s1pa
-5sp4ai2
-spa4n
-spen4d
-2s5peo
-2sper
-s2phe
-3sph4er
-spho5
-spil4
-sp5ing
-spi2n
-4s3p2i1o
-s4p1ly
-s1p2l2
-s4po2n
-s1p4or4
-4sp4ot
-squal4l
-squ2
-s1r
-2ss
-s1sa2
-ssas3
-s2s5c
-s3sel
-s5sen5g
-s4ses.
-ss1e4s
-s5set
-s1si
-s4s2ie4
-ssi4er
-s4s5i1ly
-s4s1l2
-ss4li
-s4s1n4
-sspen4d4
-ss2t
-ssu1r5a
-s1su
-ssu2r
-ss5w2
-2st.
-s2tag
-s1ta
-s2ta2l
-stam4i
-5st4and
-sta2n
-s4ta4p
-5stat.
-s4t1ed
-stern5i
-s5t2ero
-ste2w
-ste1w5a
-s3th2e
-st2i
-s4ti.
-s5t2i1a
-s1tic
-5s4tick1
-s4t2ie4
-s3tif2
-st3ing
-s2t1in
-5st4ir
-s1tle
-s2tl
-5stock1
-s1to
-sto2m3a
-5stone
-sto2n
-s4top
-3store
-st4r
-s4tra2d
-s1tra
-5stra2tu
-s4tray
-s4tr2id
-4stry
-4st3w4
-s2ty
-1su
-su1al
-su4b3
-su2g3
-su5is
-s2ui2
-suit3
-s4ul
-su2m
-su1m3i
-su2n
-su2r
-4sv
-sw2
-4s1wo2
-s4y
-4sy1c
-3syl
-syn5o
-sy5rin
-1ta
-3ta.
-2tab
-ta5bles2
-tab2l2
-5tab5o5l1iz
-tabol2i
-4t4a2ci
-ta5do
-ta2d
-4ta2f4
-tai5lo
-tai2
-ta2l
-ta5la
-tal5en
-t2ale
-tal3i
-4talk
-tal4lis
-tal1l
-tall2i
-ta5log
-ta5mo
-tan4de
-ta2n
-t4and
-1tan1ta3
-tan1t
-ta5per
-ta5p2l2
-tar4a
-t2a2r
-4tar1c
-4tare
-ta3r2iz
-tar1i
-tas4e
-ta5s4y
-4tat1ic
-ta4tur
-ta2tu
-taun4
-tav4
-2taw
-tax4is
-tax3i
-2t1b
-4tc
-t4ch
-tch5e4t
-tche2
-4t1d
-4te.
-te2ad4i
-tea2d1
-4tea2t
-te1ce4
-5te2c1t
-2t1ed
-t4e5di
-1tee
-teg4
-te5ger4
-te5gi
-3tel.
-tel2i4
-5te2l1s2
-te2ma2
-tem3at
-3ten2a2n
-te1na
-3tenc
-3tend
-4te1nes
-1ten1t
-ten4tag
-ten1ta
-1teo
-te4p
-te5pe
-ter3c
-5ter3d
-1ter1i
-ter5ies
-ter2ie4
-ter3is
-teri5za1
-5t4er3n2it
-ter5v
-4tes.
-4t2e2ss
-t3ess.
-teth5e
-3t4eu
-3tex
-4tey
-2t1f
-4t1g
-2th.
-tha2n4
-th2e
-4thea
-th3eas
-the5a2t
-the3is
-thei2
-3the4t
-th5ic.
-th5i1ca
-4th4il2
-5th4i4nk2
-4t4h1l4
-th5ode
-5thod3ic
-4thoo2
-thor5it
-tho5riz
-2t4h1s2
-1t2i1a
-ti4ab
-ti4a1to
-2ti2b
-4tick1
-t4i1co
-t4ic1u
-5ti2di
-t2id
-3tien
-t2ie4
-tif2
-ti5fy
-2t2ig
-5tigu
-til2l5in4
-til1l
-till2i
-1tim
-4ti4m1p
-tim5ul
-ti2mu
-2t1in
-t2i1na
-3ti2ne.
-t2ine
-3t2ini
-1t2io
-ti5oc
-tion5ee
-tio2n
-5tiq
-ti3sa2
-3t4ise
-ti2s4m
-ti5so
-tis4p
-5tisti1ca
-tis1t2i
-tis1tic
-ti3tl
-ti4u
-1t2iv
-ti1v4a
-1tiz
-ti3za1
-ti3ze4n
-ti2ze
-2tl
-t5la
-tla2n4
-3tle.
-3tled
-3tles.
-tles2
-t5let.
-t5lo
-4t1m
-tme4
-2t1n2
-1to
-to3b
-to5crat
-4to2do4
-2tof
-to2gr
-to5ic
-toi2
-to2ma
-to4m4b
-to3my
-ton4a4l1i
-to2n
-to1n1a
-to3n2at
-4tono
-4tony
-to2ra
-to3r2ie4
-tor5iz
-tos2
-5tour
-tou2
-4tout
-to3w2a2r
-4t1p
-1tra
-t2ra3b
-tra5ch
-tr4a2ci4
-tra2c4it
-trac4te
-tra2c1t
-tr2as4
-tra5ven
-trav5e2s5
-tre5f
-tre4m
-trem5i
-5tr2i3a
-tri5ces
-tr4ice
-5tri3c2i1a
-t4r2i1ci
-4tri4c3s2
-2trim
-tr2i4v
-tro5m4i
-tron5i
-tro2n
-4trony
-tro5phe
-tr2oph
-tro3sp
-tro3v
-tr2u5i2
-tr2us4
-4t1s2
-t4sc
-ts2h4
-t4sw2
-4t3t2
-t4tes
-t5to
-t1tu4
-1tu
-tu1a
-tu3a2r
-tu4b4i
-tud2
-4tue
-4tuf4
-5t2u3i2
-3tum
-tu4nis
-tu1ni
-2t3up.
-3ture
-5turi
-tur3is
-tur5o
-tu5ry
-3t2us
-4tv
-tw4
-4t1wa
-twis4
-twi2
-4t1wo2
-1ty
-4tya
-2tyl
-type3
-ty5ph
-4tz
-t2z4e
-4uab
-uac4
-ua5na
-ua2n
-uan4i
-uar5an1t
-u2a2r
-uara2n
-uar2d
-uar3i
-uar3t
-u1at
-uav4
-ub4e
-u4bel
-u3ber
-u4b2ero
-u1b4i
-u4b5ing
-u3b4le.
-ub2l2
-u3ca
-uci4b
-u1ci
-u2c4it
-ucle3
-u1c4l4
-u3cr
-u3cu
-u4cy
-ud5d4
-ud3er
-ud5est
-udes2
-ude1v4
-u1dic
-ud3ied
-ud2ie4
-ud3ies
-ud5is1
-u5dit
-u4do2n
-u1do
-ud4si
-u2d1s2
-u4du
-u4ene
-ue2n1s4
-uen4te
-uen1t
-uer4il
-uer1i
-3u1fa
-u3f4l2
-ugh3e2n
-ug5in
-2ui2
-uil5iz
-uil1i
-ui4n
-u1ing
-uir4m
-u4ir
-ui1ta4
-u2iv3
-ui4v4er.
-u5j
-4uk
-u1la
-ula5b
-u5lati
-ul2ch4
-u4l1c2
-5ulche2
-ul3der
-u2ld
-ul2de
-ul4e
-u1len
-ul4gi
-u4l1g4
-ul2i
-u5l2i1a
-ul3ing
-ul5is2h
-ul4l2a2r
-ul1l
-ul4li4b
-ull2i
-ul4lis
-4u2l3m
-u1l4o
-4u2l1s2
-uls5e4s
-ul2se
-ul1ti
-u4lt
-ul1tra3
-ul1tr
-4ul1tu2
-u3lu
-ul5ul
-ul5v
-u2m5ab
-u1ma
-um4bi
-u4m1b
-um4b1ly
-umb2l2
-u1mi
-u4m3ing
-umor5o
-u1mo
-umo2r
-u4m2p
-un2at4
-u1na
-u2ne
-un4er
-u1ni
-un4im
-u2n1in
-un5is2h
-un2i3v
-u2n3s4
-un4sw2
-un2t3a4b
-un1t
-un1ta
-un4ter.
-un4tes
-unu4
-un5y
-u4n5z
-u4o4rs2
-u5os
-u1ou2
-u1pe
-upe4r5s2
-u5p2i3a
-up3ing
-upi2n
-u3p2l2
-u4p3p
-upport5
-up1p4or
-up2t5i2b
-u2p1t
-up1tu4
-u1ra
-4ura.
-u4rag
-u4r2as
-ur4be
-ur1b
-ur1c4
-ur1d
-ure5a2t
-ur4fer1
-ur1f
-ur4fr
-u3rif
-uri4fic
-uri1fi
-ur1in
-u3r2i1o
-u1rit
-ur3iz
-ur2l
-url5ing.
-ur4no4
-uros4
-ur4pe
-ur1p
-ur4pi
-urs5er
-u4rs2
-ur2se
-ur5tes
-ur3th2e
-ur1ti4
-ur4t2ie4
-u3ru
-2us
-u5sa2d
-usa2
-u5sa2n
-us4ap
-usc2
-us3ci
-use5a
-u5s2i1a
-u3sic
-us4lin
-us1l2
-us1p
-us5s1l2
-u2ss
-us5tere
-us1t4r
-u2su
-usu2r4
-u2ta4b
-u1ta
-u3tat
-4u4te.
-4utel
-4uten
-uten4i
-4u1t2i
-uti5l2iz
-util1i
-u3t2ine
-u2t1in
-ut3ing
-utio1n5a
-u1t2io
-utio2n
-u4tis
-5u5tiz
-u4t1l
-u2t5of
-u1to
-uto5g
-uto5mat1ic
-uto2ma
-u5to2n
-u4tou2
-u4t1s4
-u3u
-uu4m
-u1v2
-ux1u3
-u2z4e
-1va
-5va.
-2v1a4b
-vac5il
-v4a2ci
-vac3u
-vag4
-va4ge
-va5l2i4e4
-val1i
-val5o
-val1u
-va5mo
-va5niz
-va2n
-va5pi
-var5ied
-v2a2r
-var1i
-var2ie4
-3vat
-4ve.
-4ved
-veg3
-v3el.
-vel3l2i
-vel1l
-ve4lo
-v4e1ly
-ven3om
-v4eno
-v5enue
-v4erd
-5v2e2re.
-v4erel
-v3eren
-ver5enc
-v4eres
-ver3ie4
-ver1i
-vermi4n
-ver3m4
-3ver2se
-ve4r1s2
-ver3th
-v4e2s
-4ves.
-ves4te
-ve4te
-vet3er
-ve4ty
-vi5al1i
-v2i1a
-vi2al
-5vi2a2n
-5vi2de.
-v2id
-5vi2d1ed
-4v3i1den
-5vide4s2
-5vi2di
-v3if
-vi5gn
-v2ig
-v4ik4
-2vil
-5v2il1it
-vil1i
-v3i3l2iz
-v1in
-4vi4na
-v2inc
-v4in5d
-4ving
-vi1o3l
-v2io
-v3io4r
-vi1ou2
-v2i4p
-vi5ro
-v4ir
-vis3it
-vi3so
-vi3su
-4vi1ti
-vit3r
-4vi1ty
-3v2iv
-5vo.
-voi4
-3v2ok
-vo4la
-v5ole
-5vo4l2t
-3vol2v
-vom5i
-vo2r5ab
-vo1ra
-vori4
-vo4ry
-vo4ta
-4vo1tee
-4vv4
-v4y
-w5ab2l2
-2wac
-wa5ger
-wa2g5o
-wait5
-wai2
-w5al.
-wam4
-war4t
-w2a2r
-was4t
-wa1te
-wa5ver
-w1b
-wea5r2ie4
-we2a2r
-wear1i
-we4ath3
-wea2t
-we4d4n4
-weet3
-wee5v
-wel4l
-w1er
-west3
-w3ev
-whi4
-wi2
-wil2
-wil2l5in4
-wil1l
-will2i
-win4de
-w4ind
-win4g
-w4ir4
-3w4ise
-w2ith3
-wiz5
-w4k
-wl4es2
-wl3in
-w4no
-1wo2
-wom1
-wo5v4en
-w5p
-wra4
-wri4
-wri1ta4
-w3s2h
-ws4l2
-ws4pe
-w5s4t
-4wt
-wy4
-x1a
-xac5e
-x4a2go
-xam3
-x4ap
-xas5
-x3c2
-x1e
-xe4cu1to
-xe1cu
-xe3c4ut
-x2ed
-xer4i
-x2e5ro
-x1h
-xhi2
-xh4il5
-xhu4
-x3i
-x2i5a
-xi5c
-xi5di
-x2id
-x4ime
-xi5m2iz
-xim1i
-x3o
-x4ob
-x3p
-xp4an4d
-x1pa
-xpa2n
-xpec1to5
-xpe2c
-xpe2c1t
-x2p2e3d
-x1t2
-x3ti
-x1u
-xu3a
-xx4
-y5ac
-3y2a2r4
-y5at
-y1b
-y1c
-y2ce
-yc5er
-y3ch
-ych4e2
-ycom4
-y1co
-ycot4
-y1d
-y5ee
-y1er
-y4er1f
-yes4
-ye4t
-y5gi
-4y3h
-y1i
-y3la
-ylla5b2l2
-yl1l
-y3lo
-y5lu
-ymbol5
-y4m1b
-yme4
-ym1pa3
-y4m1p
-yn3c4hr4
-yn2ch
-yn5d
-yn5g
-yn5ic
-5ynx
-y1o4
-yo5d
-y4o5g
-yom4
-yo5net
-yo2n
-y4o2n3s2
-y4os
-y4p2ed
-yper5
-yp3i
-y3po
-y4po4c
-yp2ta
-y2p1t
-y5pu
-yra5m
-yr5i3a
-y3ro
-yr4r4
-ys4c
-y3s2e
-ys3i1ca
-y1s3io
-3y1sis
-y4so
-y2ss4
-ys1t
-ys3ta
-ysu2r4
-y1su
-y3thin
-yt3ic
-y1w
-za1
-z5a2b
-z2a2r2
-4zb
-2ze
-ze4n
-ze4p
-z1er
-z2e3ro
-zet4
-2z1i
-z4il
-z4is
-5zl
-4zm
-1zo
-zo4m
-zo5ol
-zoo2
-zte4
-4z1z2
-z4zy
-.as9s8o9c8i8a8te.
-.as1so
-.asso1ci
-.asso3c2i1a
-.as9s8o9c8i8a8t8es.
-.de8c9l8i9n8a9t8i8on.
-.de1c4l4
-.decl4i1na
-.declin2at
-.declina1t2io
-.declinatio2n
-.ob8l8i8g9a9t8o8ry.
-.ob2l2
-.obl2ig
-.obli1ga
-.obliga1to
-.obligato1ry
-.ph8i8l9a8n9t8h8r8o8p8ic.
-.ph4il2
-.phi1la
-.phila2n
-.philan1t
-.philant4hr4
-.philanthrop3ic
-.pr8e8s8e8nt.
-.p3re1s2e
-.presen1t
-.pr8e8s8e8n8ts.
-.presen4t4s2
-.pr8o8j8e8ct.
-.pro5j
-.pro1je
-.proje2c1t
-.pr8o8j8e8c8ts.
-.projec4t1s2
-.re8c9i9p8r8o8c9i9t8y.
-.re1c2i
-.rec2ip
-.recipr2
-.recipr2oc
-.re1cipro1ci
-.recipro2c1it
-.reciproci1ty
-.re9c8o8g9n8i9z8a8n8ce.
-.re1co
-.re2cog
-.rec3ogniz
-.recog1ni
-.recogniza1
-.recogniza2n
-.re8f9o8r9m8a9t8i8on.
-.re1f
-.re1fo
-.refo2r
-.refor1m
-.refor1ma
-.reforma1t2io
-.reformatio2n
-.re8t9r8i9b8u9t8i8on.
-.re3tri
-.retr4ib
-.retri3bu1t2io
-.retrib4u1t2i
-.retributio2n
-.ta9b8le.
-.2tab
-.tab2l2
-.ac8a8d9e9m8y.
-.a1ca
-.aca2d
-.acad4em
-.acade3my
-.ac8a8d9e9m8i8e8s.
-.academ2i4e4
-.ac9c8u9s8a9t8i8v8e.
-.ac3c
-.ac1c2us
-.accusa2
-.accusa1t2iv
-.ac8r8o9n8y8m.
-.acro2n
-.acronym4
-.ac8r8y8l9a8m8i8d8e.
-.acry3la
-.acrylam2id
-.ac8r8y8l9a8m8i8d8e8s.
-.acrylamide4s2
-.ac8r8y8l9a8l8d8e9h8y8d8e.
-.acryla2ld
-.acrylal2de
-.acrylalde1h4
-.acrylaldehy1d
-.ad8d9a9b8l8e.
-.ad1d2a
-.ad2d3a4b
-.addab2l2
-.ad8d9i9b8l8e.
-.addi1b2l2
-.ad8r8e8n9a9l8i8n8e.
-.a1dr
-.adre4
-.a5dren
-.adre1na
-.adrena4l1i
-.adrena1l4ine
-.ae8r8o9s8p8a8c8e.
-.ae4r
-.a2ero
-.aero2s4pa
-.aerospa4ce
-.af9t8e8r9t8h8o8u8g8h8t.
-.afterthou2
-.af9t8e8r9t8h8o8u8g8h8t8s.
-.afterthough4t1s2
-.ag8r8o8n9o9m8i8s8t.
-.a1gr
-.ag4ro
-.agro2n
-.agronom2is
-.ag8r8o8n9o9m8i8s8t8s.
-.agronomis4t1s2
-.al9g8e9b8r8a9i9c8a8l9l8y.
-.a4l1g4
-.alg2e1b
-.alge3br
-.algebr2ai2
-.algebrai1ca
-.algebraical1l
-.algebraical1ly
-.am9p8h8e8t9a9m8i8n8e.
-.a4m1p
-.amphe4t
-.amphe1ta
-.amphetam1in
-.amphetam2ine
-.am9p8h8e8t9a9m8i8n8e8s.
-.amphetami1nes
-.an9a9l8y8s8e.
-.3ana1ly
-.a1na
-.an4a2lys4
-.anal5y3s2e
-.an9a9l8y8s8e8d.
-.analy4s4ed
-.an8a8l8y9s8e8s.
-.analys1e4s
-.an9i8s8o9t8r8o8p9i8c.
-.ani2so
-.anisotrop3ic
-.an9i8s8o9t8r8o8p9i9c8a8l9l8y.
-.anisotropi1ca
-.anisotropical1l
-.anisotropical1ly
-.an9i8s8o8t9r8o9p8i8s8m.
-.anisotropi2s1m
-.an9i8s8o8t9r8o8p8y.
-.anisotropy5
-.an8o8m9a8l8y.
-.ano4
-.anoma5l
-.ano1ma
-.anoma1ly
-.an8o8m9a8l8i8e8s.
-.anomal1i
-.anomal2i4e4
-.an8t8i9d8e8r8i8v9a9t8i8v8e.
-.ant2id
-.antider1i
-.antider2i4v
-.antide4ri1va
-.antideri3vat
-.antider2iva1t2iv
-.an8t8i9d8e8r8i8v9a9t8i8v8e8s.
-.antiderivativ4e2s
-.an8t8i9h8o8l8o9m8o8r9p8h8i8c.
-.anti3h
-.antiholo1mo
-.antiholomo2r
-.antiholomor1p
-.antiholomorp4h4
-.antiholomorph1ic
-.an9t8i8n9o9m8y.
-.an2t1in
-.ant2i1no
-.antino3my
-.an9t8i8n9o9m8i8e8s.
-.antinom2ie4
-.an9t8i9n8u9c8l8e8a8r.
-.antin1u
-.antinucle3
-.antinu1c4l4
-.antinucle2a
-.antinucle2a2r
-.an9t8i9n8u9c8l8e9o8n.
-.antinucleo2n
-.an9t8i9r8e8v9o9l8u9t8i8o8n9a8r8y.
-.ant4ir
-.antirev2
-.antirev5olu
-.antirevo1lut
-.antirevol4u1t2i
-.antirevolutio1n5a
-.antirevolu1t2io
-.antirevolutio2n
-.antirevolution2a2r
-.ap8o8t8h9e9o9s8e8s.
-.ap4ot
-.ap4oth
-.apoth2e
-.apotheos4
-.apotheos1e4s
-.ap8o8t8h9e9o9s8i8s.
-.apotheo1sis
-.ap9p8e8n9d8i8x.
-.a4p1p
-.ap2pe
-.ap3pen
-.ar9c8h8i9m8e9d8e8a8n.
-.ar1c
-.ar2ch
-.archi2med
-.archimedea2n
-.ar9c8h8i9p8e8l9a8g8o.
-.arch2i4p
-.archipe4
-.archipe4la
-.archipela2go
-.ar9c8h8i9p8e8l9a9g8o8s.
-.ar9c8h8i8v8e.
-.arch2i2v
-.ar9c8h8i8v8e8s.
-.archiv4e2s
-.ar9c8h8i8v9i8n8g.
-.archiv1in
-.archi4ving
-.ar9c8h8i8v9i8s8t.
-.ar9c8h8i8v9i8s8t8s.
-.archivis4t1s2
-.ar9c8h8e9t8y8p9a8l.
-.arche2
-.arche4t
-.arche1ty
-.archety1pa
-.archetyp4al
-.ar9c8h8e9t8y8p9i9c8a8l.
-.archetyp3i
-.archetypi1ca
-.ar8c9t8a8n9g8e8n8t.
-.ar2c1t
-.arct5ang
-.arc1ta
-.arcta2n
-.arctan1gen
-.arctangen1t
-.ar8c9t8a8n9g8e8n8t8s.
-.arctangen4t4s2
-.as9s8i8g8n9a9b8l8e.
-.as1si
-.as4sig1n4a
-.ass2ig
-.assig2n1a2b
-.assignab2l2
-.as9s8i8g8n9o8r.
-.assig1no
-.as9s8i8g8n9o8r8s.
-.assigno4rs2
-.as9s8i8s8t9a8n8t9s8h8i8p.
-.as1sis
-.assis1ta
-.assista2n
-.assistan1t
-.assistan4t4s2
-.assistants2h4
-.assistant3sh2i4p
-.as9s8i8s8t9a8n8t9s8h8i8p8s.
-.assistantshi2p1s2
-.as8y8m8p9t8o9m8a8t8i8c.
-.as4y
-.asy4m1p
-.asym2p1t
-.asymp1to
-.asympto2ma
-.asymptomat1ic
-.as9y8m8p9t8o8t9i8c.
-.as8y8n9c8h8r8o9n8o8u8s.
-.asyn3c4hr4
-.asyn2ch
-.asynchro2n
-.asynchro1nou2
-.asynchrono2us
-.at8h9e8r9o9s8c8l8e9r8o9s8i8s.
-.4ath
-.ath2e
-.ath2ero
-.atheros2c
-.atheroscle5
-.atheros1c4l4
-.ath2eroscl4ero
-.atherosclero1sis
-.at9m8o8s9p8h8e8r8e.
-.a4t1m
-.at1mo
-.atmos2
-.atmo3sp
-.atmos2phe
-.atmo3sph4er
-.at9m8o8s9p8h8e8r8e8s.
-.at9t8r8i8b9u8t8e8d.
-.a4t3t2
-.attr4ib
-.attribu2t1ed
-.at9t8r8i8b9u8t9a8b8l8e.
-.attri4bu1ta
-.attribu2ta4b
-.attributab2l2
-.au9t8o9m8a9t8i8o8n.
-.au1to
-.auto2ma
-.automa1t2io
-.automatio2n
-.au9t8o8m9a9t8o8n.
-.automa1to
-.automato2n
-.au9t8o8m9a9t8a.
-.automa2ta
-.au9t8o9n8u8m9b8e8r9i8n8g.
-.au5to2n
-.auton5um
-.autonu4m1b
-.autonumber1i
-.autonumberin4g
-.au9t8o8n9o9m8o8u8s.
-.au4tono
-.autono4mo
-.autono3mo2us
-.autonomou2
-.au8t8o9r8o8u8n8d9i8n8g.
-.autorou2
-.autoroun2d
-.autoround1in
-.av9o8i8r9d8u9p8o8i8s.
-.avoi4
-.avo4ir
-.avoir1du
-.avoir4dup
-.avoirdupoi2
-.ba8n8d9l8e8a8d8e8r.
-.b4and
-.ban1dl
-.bandle2a
-.bandlea2d1
-.ba8n8d9l8e8a8d8e8r8s.
-.bandleade4r5s2
-.ba8n8k9r8u8p8t.
-.ba4nk2
-.bankru2p1t
-.ba8n8k9r8u8p8t9c8y.
-.bankrup4tc
-.bankrupt1cy
-.ba8n8k9r8u8p8t9c8i8e8s.
-.bankrupt1ci
-.bankruptc2ie4
-.ba8r9o8n8i8e8s.
-.b2a2r
-.ba5roni
-.baro2n
-.baron2ie4
-.ba8s8e9l8i8n8e9s8k8i8p.
-.basel2i
-.base1l4ine
-.baseli1nes
-.baselinesk2
-.baselinesk1i
-.baselinesk2i4p
-.ba9t8h8y8m9e9t8r8y.
-.1bat
-.b4ath
-.bathyme4
-.bathym4etr
-.bathyme3try
-.ba8t8h8y9s8c8a8p8h8e.
-.bathy2s
-.bathys4c
-.bathysca4p
-.bathys1ca
-.be8a8n9i8e8s.
-.bea2n
-.bea3nies
-.bean2ie4
-.be9h8a8v9i8o8u8r.
-.be1h4
-.behav1i
-.behavi1ou2
-.behav2io
-.behavi4our
-.be9h8a8v9i8o8u8r8s.
-.behaviou4rs2
-.be8v8i8e8s.
-.be1vi
-.bev2ie4
-.bi8b9l8i9o8g9r8a9p8h8y9s8t8y8l8e.
-.bi2b
-.bi1b2l2
-.bib3li
-.bibli5og
-.bibl2io
-.biblio2gr
-.biblio4g3ra1phy
-.bibliography2s
-.bibliographys1t
-.bibliographys2ty
-.bibliographys2tyl
-.bi9d8i8f9f8e8r9e8n9t8i8a8l.
-.b2i4d
-.bi2di
-.bid1if
-.bidi4f1f
-.bidiffer1
-.bidiffer3en1t
-.bidifferent2i
-.bidifferen1t2i1a
-.bidifferenti2al
-.bi8g9g8e8s8t.
-.b2ig
-.bi4g1g2
-.big2ge
-.bi8l8l9a8b8l8e.
-.1bil
-.bill5ab
-.bil1l
-.billab2l2
-.bi8o9m8a8t8h9e9m8a8t9i8c8s.
-.b2io
-.bio4m
-.bio1ma
-.biom4ath3
-.biomath5em
-.biomath2e
-.biomathe1ma
-.biomathemat1ic
-.biomathemati4c3s2
-.bi8o9m8e8d9i9c8a8l.
-.bio2me
-.bio2med
-.biom4edi
-.biomed3i1ca
-.bi8o9m8e8d9i9c8i8n8e.
-.biomed2i1ci
-.biomedi2cin
-.biomedic2ine
-.bi8o9r8h8y8t8h8m8s.
-.biorh4
-.biorhyt4h1m
-.biorhyth4m1s2
-.bi8t9m8a8p.
-.bi2t
-.bi4t1m
-.bit1ma
-.bit4map
-.bi8t9m8a8p8s.
-.bitma2p1s2
-.bl8a8n8d9e8r.
-.b2l2
-.b3l4and
-.bla2n
-.blan1de
-.bl8a8n8d9e8s8t.
-.blande4s2
-.bl8i8n8d9e8r.
-.bl4ind
-.blin1de
-.bl8o8n8d8e8s.
-.b4lo
-.blo2n
-.bl2ond
-.blon1de
-.blondes2
-.bl8u8e9p8r8i8n8t.
-.bluepr2
-.blueprin4t3
-.bl8u8e9p8r8i8n8t8s.
-.blueprin4t4s2
-.bo9l8o8m9e9t8e8r.
-.bolo2me
-.bolo4met
-.bolome1te
-.bo8o8k9s8e8l8l9e8r.
-.3boo2
-.bo2o4k
-.boo4k1s2
-.booksel1l
-.booksel2le
-.bo8o8k9s8e8l8l9e8r8s.
-.bookselle4r1s2
-.bo8o8l9e8a8n.
-.boole2a
-.boolea2n
-.bo8o8l9e8a8n8s.
-.boolea2n1s2
-.bo8r9n8o9l8o8g9i9c8a8l.
-.borno4
-.borno3log1ic
-.bornologi1ca
-.bo8t9u9l8i8s8m.
-.bo1tu
-.botul2i
-.botuli2s1m
-.br8u8s8q8u8e8r.
-.br2us
-.brusqu2
-.brus3quer
-.bu8f9f8e8r.
-.buf4fer1
-.bu4f1f
-.bu8f9f8e8r8s.
-.buffe4r1s2
-.bu8s8i8e8r.
-.bus5ie4
-.b2us
-.bu8s8i8e8s8t.
-.busi1est
-.bu8s8s8i8n8g.
-.bu2ss
-.bus1si
-.bus2s1in
-.buss3ing
-.bu8t8t8e8d.
-.but2t1ed
-.bu8z8z9w8o8r8d.
-.bu4z1z2
-.buzz1wo2
-.bu8z8z9w8o8r8d8s.
-.buzzwor2d1s2
-.ca9c8o8p8h9o9n8y.
-.ca1co
-.cac2oph
-.cacopho5ny
-.cacopho2n
-.ca9c8o8p8h9o9n8i8e8s.
-.caco5phoni
-.cacophon2ie4
-.ca8l8l9e8r.
-.cal1l
-.cal2le
-.ca8l8l9e8r8s.
-.calle4r1s2
-.ca8m9e8r8a9m8e8n.
-.cam5er1a
-.camera1men
-.ca8r8t9w8h8e8e8l.
-.cartw4
-.ca8r8t9w8h8e8e8l8s.
-.cartwhee2l1s2
-.ca9t8a8r8r8h8s.
-.ca2ta
-.cat2a2r
-.catar1r4
-.catarrh4
-.catarr4h1s2
-.ca8t9a9s8t8r8o8p8h9i8c.
-.catas1t4r
-.catastr2oph
-.catastroph1ic
-.ca8t9a9s8t8r8o8p8h9i9c8a8l8l8y.
-.catastrophi1ca
-.catastrophical1l
-.catastrophical1ly
-.ca8t9e9n8o8i8d.
-.cat4eno
-.catenoi2
-.cateno2id
-.ca8t9e9n8o8i8d8s.
-.catenoi2d1s2
-.ca8u9l8i9f8l8o8w9e8r.
-.cau4l2
-.caul2i
-.cauli4f4l2
-.cauliflow1er
-.ch8a8p9a8r9r8a8l.
-.chap2a2r4
-.cha1pa
-.chapar1r4
-.ch8a8r9t8r8e8u8s8e.
-.ch2a2r
-.chartr4eu2
-.chartre2us4
-.ch8e8m8o9t8h8e8r9a8p8y.
-.che2
-.che1mo
-.chem4oth3
-.chemoth2e
-.chemoth4er1a
-.chemothera3p
-.ch8e8m8o9t8h8e8r9a9p8i8e8s.
-.chemotherap2ie4
-.ch8l8o8r8o9m8e8t8h9a8n8e.
-.c4h1l4
-.ch2lo
-.chloro2me
-.chloro4met
-.chlorometha2n4
-.ch8l8o8r8o9m8e8t8h9a8n8e8s.
-.chlorometha1nes
-.ch8o9l8e8s9t8e8r8i8c.
-.3cho2
-.c3hol4e
-.choles2
-.choles1ter1i
-.ci8g9a9r8e8t8t8e.
-.c2ig
-.ci1ga
-.cig2a2r
-.cigare4t3t2
-.ci8g9a9r8e8t8t8e8s.
-.cigaret4tes
-.ci8n8q8u8e9f8o8i8l.
-.2cin
-.cin1q
-.cinqu2
-.cinque1f
-.cinque1fo
-.cinquefoi2
-.co9a8s8s8o9c8i8a9t8i8v8e.
-.c4oa
-.coa2ss
-.coas1so
-.coasso1ci
-.coasso3c2i1a
-.coassoci4a1t2iv
-.co9g8n8a8c.
-.2cog
-.cog1n4a
-.co9g8n8a8c8s.
-.cogna4c3s2
-.co9k8e8r9n8e8l.
-.c2ok
-.cok1er
-.coker3nel
-.co9k8e8r9n8e8l8s.
-.cokerne2l1s2
-.co8l9l8i8n9e8a9t8i8o8n.
-.col1l
-.coll2i
-.col2lin4
-.col1l4ine
-.collin3ea
-.collinea2t
-.collinea1t2io
-.collineatio2n
-.co8l9u8m8n8s.
-.colu4m1n
-.colum2n1s2
-.co8m9p8a8r9a8n8d.
-.co4m1p
-.compara5
-.com1pa
-.comp2a2r
-.compara2n
-.compar4and
-.co8m9p8a8r9a8n8d8s.
-.comparan2d1s2
-.co8m9p8e8n9d8i8u8m.
-.compendi1u
-.co8m9p8o9n8e8n8t9w8i8s8e.
-.compo2n
-.compo3nen
-.componen1t
-.componentw4
-.componentwis4
-.componentwi2
-.component3w4ise
-.co8m8p9t8r8o8l9l8e8r.
-.comp4tr
-.com2p1t
-.comptrol1l
-.comptrol2le
-.co8m8p9t8r8o8l9l8e8r8s.
-.comptrolle4r1s2
-.co8n9f8o8r8m9a8b8l8e.
-.co2n
-.con3f
-.con1fo
-.confo2r
-.confor1m
-.confor1ma
-.confor2mab
-.conformab2l2
-.co8n9f8o8r8m9i8s8t.
-.confor2mi
-.conform2is
-.co8n9f8o8r8m9i8s8t8s.
-.conformis4t1s2
-.co8n9f8o8r8m9i8t8y.
-.confor3mit
-.conformi1ty
-.co8n9g8r8e8s8s.
-.con3g
-.con1gr
-.congr2e2ss
-.co8n9g8r8e8s8s8e8s.
-.congress1e4s
-.co8n9t8r8i8b9u8t8e.
-.con5t
-.contr4ib
-.co8n9t8r8i8b9u8t8e8s.
-.co8n9t8r8i8b9u8t8e8d.
-.contribu2t1ed
-.co9r8e9l8a9t8i8o8n.
-.core1la
-.corela1t2io
-.corelatio2n
-.co9r8e9l8a9t8i8o8n8s.
-.corelatio2n3s2
-.co9r8e9l8i9g8i8o8n9i8s8t.
-.core1l2i
-.corel2ig
-.corel4igi
-.coreli5g2io
-.coreligion3i
-.coreligio2n
-.coreligion1is
-.co9r8e9l8i9g8i8o8n9i8s8t8s.
-.coreligionis4t1s2
-.co9r8e9o8p9s8i8s.
-.core1o
-.coreo2p1s2
-.coreop1sis
-.co9r8e9s8p8o8n9d8e8n8t.
-.core1sp
-.cores4po2n
-.coresp2ond
-.corespon1de
-.corespon1den
-.coresponden1t
-.co9r8e9s8p8o8n9d8e8n8t8s.
-.coresponden4t4s2
-.co9s8e9c8a8n8t.
-.cos4e
-.cose1ca
-.coseca2n
-.cosecan1t
-.co9t8a8n9g8e8n8t.
-.co4ta2n
-.co1ta
-.cot2ang
-.cotan1gen
-.cotangen1t
-.co8u8r9s8e8s.
-.cou2
-.cou4rs2
-.cour2se
-.cours3e4s
-.co9w8o8r8k9e8r.
-.co4wo2
-.cowork1er
-.co9w8o8r8k9e8r8s.
-.coworke4r1s2
-.cr8a8n8k9c8a8s8e.
-.cra2n
-.cra4nk2
-.crank1ca
-.cr8a8n8k9s8h8a8f8t.
-.cran4k1s2
-.cranks2h
-.cranksha2f
-.cranksha2ft
-.cr8o8c9o9d8i8l8e.
-.cr2oc
-.cro4cod
-.cro1co
-.cr8o8c9o9d8i8l8e8s.
-.crocodiles2
-.cr8o8s8s9h8a8t8c8h.
-.cro2s4s
-.cross2h
-.crossha4tc
-.crosshat4ch
-.cr8o8s8s9h8a8t8c8h8e8d.
-.crosshatche2
-.crosshat4ch4ed
-.cr8o8s8s9o8v8e8r.
-.cros1so
-.cros4sov
-.cr8y8p9t8o9g8r8a8m.
-.cry2p1t
-.cryp1to
-.crypto2gr
-.cr8y8p9t8o9g8r8a8m8s.
-.cryptogra4m1s2
-.cu8f8f9l8i8n8k.
-.c4uf
-.cu4f1f
-.cuff4l2
-.cufflin4
-.cuffl4i4nk2
-.cu8f8f9l8i8n8k8s.
-.cufflin4k1s2
-.cu9n8e8i9f8o8r8m.
-.3cun
-.cu2ne
-.cunei2
-.cunei1fo
-.cuneifo2r
-.cuneifor1m
-.cu8s9t8o8m9i8z9a9b8l8e.
-.1c2us
-.cus1to
-.custom2iz
-.customiza1
-.customiz5a2b
-.customizab2l2
-.cu8s9t8o8m9i8z8e.
-.customi2ze
-.cu8s9t8o8m9i8z8e8s.
-.cu8s9t8o8m9i8z8e8d.
-.da8c8h8s9h8u8n8d.
-.1d2a
-.da2ch4
-.dac4h1s2
-.dach4s2h
-.da8m9s8e8l9f8l8y.
-.da2m2
-.da4m1s2
-.dam5se2l2f
-.damself4l2
-.damself2ly5
-.da8m9s8e8l9f8l8i8e8s.
-.damselfl2ie4
-.da8c8t8y8l9o9g8r8a8m.
-.da2c1t
-.dac1ty
-.dac2tyl
-.dacty3lo
-.dactylo1gr
-.da8c8t8y8l9o9g8r8a8p8h.
-.da8t8a9b8a8s8e.
-.3dat
-.da2ta
-.da2tab
-.da8t8a9b8a8s8e8s.
-.databas1e4s
-.da8t8a9p8a8t8h.
-.dat5ap
-.datap5at
-.data1pa
-.datap4ath
-.da8t8a9p8a8t8h8s.
-.datapa2t4h1s2
-.da8t8e9s8t8a8m8p.
-.dat3est
-.dates1ta
-.datesta4m1p
-.da8t8e9s8t8a8m8p8s.
-.datestam2p1s2
-.de9c8l8a8r9a8b8l8e.
-.de4cl2a2r
-.decla2rab
-.declarab2l2
-.de9f8i8n9i9t8i8v8e.
-.de1f
-.de1fi
-.de2fin
-.def2ini
-.defin2it
-.defini1ti
-.defini1t2iv
-.de9l8e8c9t8a9b8l8e.
-.d5elec
-.dele2c1t
-.delec2ta4b
-.delec1ta
-.delectab2l2
-.de8m8i9s8e8m8i9q8u8a9v8e8r.
-.de4m2is
-.dem4ise
-.demisemi3qua
-.demisemiqu2
-.demisemiqua5v4
-.de8m8i9s8e8m8i9q8u8a9v8e8r8s.
-.demisemiquave4r1s2
-.de9m8o8c9r8a9t8i8s8m.
-.de4mocr
-.democrati2s4m
-.de8m8o8s.
-.demos2
-.de9r8i8v9a9t8i8v8e.
-.der2i4v
-.de4ri1va
-.deri3vat
-.der2iva1t2iv
-.de9r8i8v9a9t8i8v8e8s.
-.derivativ4e2s
-.di8a9l8e8c9t8i8c.
-.1d4i3a
-.di2al
-.di2ale
-.diale2c1t
-.di8a9l8e8c9t8i8c8s.
-.dialecti4c3s2
-.di8a9l8e8c9t8i9c8i8a8n.
-.dialect2i1ci
-.d2i1alecti3c2i1a
-.dialectici2a2n
-.di8a9l8e8c9t8i9c8i8a8n8s.
-.dialecticia2n1s2
-.di9c8h8l8o8r8o9m8e8t8h9a8n8e.
-.d4i2ch
-.dic4h1l4
-.dich2lo
-.dichloro2me
-.dichloro4met
-.dichlorometha2n4
-.di8f9f8r8a8c8t.
-.d1if
-.dif4fr
-.di4f1f
-.diffra2c1t
-.di8f9f8r8a8c8t8s.
-.diffrac4t1s2
-.di8f9f8r8a8c9t8i8o8n.
-.diffrac1t2io
-.diffractio2n
-.di8f9f8r8a8c9t8i8o8n8s.
-.diffractio2n3s2
-.di8r8e8r.
-.d4ir2
-.di1re
-.dir1er4
-.di8r8e9n8e8s8s.
-.dire1nes
-.diren2e2ss
-.di8s9p8a8r9a8n8d.
-.dis1
-.dis1p
-.di2s1pa
-.disp2a2r
-.dispara2n
-.dispar4and
-.di8s9p8a8r9a8n8d8s.
-.disparan2d1s2
-.di8s9t8r8a8u8g8h8t9l8y.
-.d4is3t
-.dist4r
-.dis1tra
-.distraugh3
-.distraugh2tl
-.distraught1ly
-.di8s9t8r8i8b9u8t8e.
-.distr4ib
-.di8s9t8r8i8b9u8t8e8s.
-.di8s9t8r8i8b9u8t8e8d.
-.distribu2t1ed
-.do8u9b8l8e9s8p8a8c8e.
-.dou2
-.dou3b2l2
-.dou5ble1sp
-.doubles2
-.double2s1pa
-.doublespa4ce
-.do8u9b8l8e9s8p8a8c9i8n8g.
-.doublesp4a2ci
-.doublespa2c1in
-.doublespac1ing
-.do8l8l9i8s8h.
-.dol1l
-.doll2i
-.dollis2h
-.dr8i8f8t9a8g8e.
-.1dr
-.dr4i2ft
-.drif1ta
-.dr8i8v9e8r8s.
-.dr2iv
-.drive4r1s2
-.dr8o8m9e9d8a8r8y.
-.dro2me
-.dro2med
-.drom2e2d2a
-.drome4dary
-.dromed2a2r
-.dr8o8m9e9d8a8r8i8e8s.
-.dromedar1i
-.dromedar2ie4
-.du9o8p9o9l8i8s8t.
-.duopol2i
-.du9o8p9o9l8i8s8t8s.
-.duopolis4t1s2
-.du9o8p9o8l8y.
-.duopo2ly
-.dy8s9l8e8x8i8a.
-.d2y
-.dys1l2
-.dys2le
-.dyslex3i
-.dyslex2i5a
-.dy8s9l8e8c9t8i8c.
-.dysle2c1t
-.ea8s8t9e8n8d9e8r8s.
-.east3
-.eas3ten
-.eas3tend
-.easten1de
-.eastende4r5s2
-.ec8o9n8o8m9i8c8s.
-.e1co
-.eco2n
-.eco3nomic
-.economi4c3s2
-.ec8o8n9o9m8i8s8t.
-.econom2is
-.ec8o8n9o9m8i8s8t8s.
-.economis4t1s2
-.ei9g8e8n9c8l8a8s8s.
-.ei2
-.e2ig2
-.ei1gen
-.eigen1c4l4
-.eigencla2ss
-.ei9g8e8n9c8l8a8s8s8e8s.
-.eigenclass1e4s
-.ei9g8e8n9v8a8l9u8e.
-.eigen1v2
-.eigen1va
-.eigenval1u
-.ei9g8e8n9v8a8l9u8e8s.
-.el8e8c8t8r8o9m8e8c8h8a8n9i9c8a8l.
-.5elec
-.ele2c1t
-.electro2me
-.electrome2ch
-.electrome5cha4n1ic
-.electromecha2n
-.electromechani1ca
-.el8e8c8t8r8o9m8e8c8h8a8n8o9a8c8o8u8s8t8i8c.
-.electromechano4
-.electromechan4oa
-.electromechanoa1co
-.electromechanoacou2
-.electromechanoaco2us
-.electromechanoacoust2i
-.electromechanoacous1tic
-.el8i8t9i8s8t.
-.el2i
-.el1it
-.eli1ti
-.el4itis
-.el8i8t9i8s8t8s.
-.elitis4t1s2
-.en9t8r8e9p8r8e9n8e8u8r.
-.en1t
-.entrepr2
-.entrepren4eu
-.en9t8r8e9p8r8e9n8e8u8r9i8a8l.
-.entrepreneur2i3a
-.entrepreneuri2al
-.ep9i9n8e8p8h9r8i8n8e.
-.epi2n
-.ep2ine
-.epinep4hr4
-.ep2inephr2in4e
-.eq8u8i9v8a8r8i9a8n8t.
-.equ2iv3
-.equi1va
-.equiv2a2r
-.equivar1i
-.equivar3i2a2n
-.equivar2i3a
-.equivar4ian4t
-.eq8u8i9v8a8r8i9a8n8c8e.
-.equivar4ianc
-.et8h9a8n8e.
-.etha2n4
-.et8h9y8l9e8n8e.
-.ev8e8r9s8i9b8l8e.
-.ev1er
-.eve4r1s2
-.ever1si
-.ever4si4b
-.eversi1b2l2
-.ev8e8r8t.
-.ev8e8r8t8s.
-.ever4t1s2
-.ev8e8r8t9e8d.
-.ever2t1ed
-.ev8e8r8t9i8n8g.
-.ever1ti
-.ever2t1in
-.ex9q8u8i8s9i8t8e.
-.exqu2
-.exq2ui2
-.exquis2ite
-.ex9t8r8a9o8r9d8i9n8a8r8y.
-.ex1t2
-.ex1tra
-.extr4ao
-.extraord2i
-.extraord1in4
-.extraor1di1na
-.extraordin2a2r
-.fa8l8l9i8n8g.
-.1fa
-.fal1l
-.fall2i
-.fal2lin4
-.fe8r8m8i9o8n8s.
-.fer1
-.fer3m4
-.fer4m2io
-.fermio2n
-.fermio2n3s2
-.fi9n8i8t8e9l8y.
-.1fi
-.2fin
-.f2ini
-.fin2it
-.fin2ite
-.finite1ly
-.fl8a9g8e8l9l8u8m.
-.f4l2
-.flag5el1l
-.fl8a9g8e8l9l8a.
-.flag4ella
-.fl8a8m9m8a9b8l8e8s.
-.flam1m
-.flam1ma
-.flam2mab
-.flammab2l2
-.flammables2
-.fl8e8d8g9l8i8n8g.
-.fledgl2
-.fl8o8w9c8h8a8r8t.
-.flow2ch
-.flowch2a2r
-.fl8o8w9c8h8a8r8t8s.
-.flowchar4t1s2
-.fl8u8o8r8o9c8a8r9b8o8n.
-.flu3o
-.fluo3r
-.fluor2oc
-.fluoro1ca
-.fluoroc2a2r
-.fluorocar1b
-.fluorocarb4o
-.fluorocarbo2n
-.fo8r9m8i9d8a9b8l8e.
-.for2mi
-.formi1d4a
-.form2id
-.formi2d3a4b
-.formidab2l2
-.fo8r9m8i9d8a9b8l8y.
-.formidab1ly
-.fo8r9s8y8t8h9i8a.
-.fo4rs2
-.fors4y
-.forsyth2i1a
-.fo8r8t8h9r8i8g8h8t.
-.fort4hr4
-.forthr2ig
-.fr8e8e9l8o8a8d8e8r.
-.freel4oa
-.freeloa2d3
-.fr8e8e9l8o8a8d8e8r8s.
-.freeloade4r5s2
-.fr8i8e8n8d9l8i8e8r.
-.fri2
-.fr2ie4
-.friendl2ie4
-.fr8i9v8o8l9i8t8y.
-.fr2iv
-.frivol2i
-.frivol1it
-.frivoli1ty
-.fr8i9v8o8l9i9t8i8e8s.
-.frivoli1ti
-.frivolit2ie4
-.fr8i8v9o9l8o8u8s.
-.frivolou2
-.frivolo2us
-.ga9l8a8c9t8i8c.
-.gala2c1t
-.ga8l9a8x8y.
-.ga8l9a8x9i8e8s.
-.galax3i
-.galax2ie4
-.ga8s9o8m9e9t8e8r.
-.ga1so
-.ga3som
-.gaso2me
-.gaso4met
-.gasome1te
-.ge9o9d8e8s9i8c.
-.geodes2
-.geode1si
-.geode2sic
-.ge9o9d8e8t9i8c.
-.geode1t
-.geodet1ic
-.ge8o9m8e8t9r8i8c.
-.ge3om
-.geo2me
-.geo4met
-.geom4etr
-.geo5met3ric
-.ge8o9m8e8t9r8i8c8s.
-.geome4tri4c3s2
-.ge9o9s8t8r8o8p8h8i8c.
-.geos4
-.geost4r
-.geostr2oph
-.geostroph1ic
-.ge8o9t8h8e8r9m8a8l.
-.ge4ot
-.ge4oth
-.geoth2e
-.geother3m4
-.geother1ma
-.ge9o8t9r8o9p8i8s8m.
-.geotropi2s1m
-.gn8o9m8o8n.
-.g1no
-.gno4mo
-.gno4mo2n
-.gn8o9m8o8n8s.
-.gnomo2n3s2
-.gr8a8n8d9u8n8c8l8e.
-.1gr
-.gra2n2
-.gr4and
-.gran1du
-.grandu4n
-.grandun1c4l4
-.gr8a8n8d9u8n8c8l8e8s.
-.granduncles2
-.gr8i8e8v9a8n8c8e.
-.gr2ie4
-.grie1va
-.grieva2n
-.gr8i8e8v9a8n8c8e8s.
-.gr8i8e8v9o8u8s.
-.grievou2
-.grievo2us
-.gr8i8e8v9o8u8s9l8y.
-.grievous1l2
-.grievous1ly
-.ha8i8r9s8t8y8l8e.
-.hai2
-.ha4ir
-.hai4rs2
-.hairs2ty
-.hairs2tyl
-.ha8i8r9s8t8y8l8e8s.
-.hairstyles2
-.ha8i8r9s8t8y8l9i8s8t.
-.ha8i8r9s8t8y8l9i8s8t8s.
-.hairstylis4t1s2
-.ha8l8f9s8p8a8c8e.
-.ha2lf
-.hal2f3s
-.half2s1pa
-.halfspa4ce
-.ha8l8f9s8p8a8c8e8s.
-.ha8l8f9w8a8y.
-.ha8r9b8i8n9g8e8r.
-.h2a2r
-.har1b
-.harbi2
-.har2bin
-.harb4inge
-.ha8r9b8i8n9g8e8r8s.
-.harbinge4r1s2
-.ha8r9l8e9q8u8i8n.
-.har4le4
-.har1l
-.harle1q
-.harlequ2
-.harleq2ui2
-.harlequi4n
-.ha8r9l8e9q8u8i8n8s.
-.harlequ2i2n1s2
-.ha8t8c8h9e8r8i8e8s.
-.ha4tc
-.hat4ch
-.hatche2
-.hatcher1i
-.hatcher2ie4
-.he8m8i9d8e8m8i9s8e8m8i9q8u8a9v8e8r.
-.hem2id
-.hemid4em
-.hemide4m2is
-.hemidem4ise
-.hemidemisemi3qua
-.hemidemisemiqu2
-.hemidemisemiqua5v4
-.he8m8i9d8e8m8i9s8e8m8i9q8u8a9v8e8r8s.
-.hemidemisemiquave4r1s2
-.he9m8o9g8l8o9b8i8n.
-.hemo4g
-.he1mo
-.hemo4gl2
-.hemo3glo
-.hemoglo1bi
-.hemoglo2bin
-.he9m8o9p8h8i8l9i8a.
-.hem2oph
-.hemoph4il2
-.hemophil1i
-.hemophil3i1a
-.he9m8o9p8h8i8l9i8a8c.
-.he9m8o9p8h8i8l9i8a8c8s.
-.hemophilia4c3s2
-.he8m8o9r8h8e9o8l9o8g8y.
-.hemo2r
-.hemorh4
-.hemorhe3ol
-.hemorheol1o1gy
-.he9p8a8t9i8c.
-.hep5
-.he2pa
-.hepat1ic
-.he8r9m8a8p8h9r8o9d8i8t8e.
-.her3m4
-.her1ma
-.her4map
-.hermap4hr4
-.hermaphrod2ite
-.he8r9m8a8p8h9r8o9d8i8t9i8c.
-.hermaphrod2i1ti
-.hermaphrod4i2tic
-.he9r8o8e8s.
-.hero4e
-.he8x8a9d8e8c9i9m8a8l.
-.hex1a
-.hexa2d
-.hexade1c2i
-.hexade2c3im
-.hexadeci1ma
-.ho9l8o9n8o9m8y.
-.holo2n
-.holon3o3my
-.ho9m8e8o9m8o8r9p8h8i8c.
-.ho2me3
-.homeo1mo
-.homeomo2r
-.homeomor1p
-.homeomorp4h4
-.homeomorph1ic
-.ho9m8e8o9m8o8r9p8h8i8s8m.
-.homeomorphi2s1m
-.ho9m8o9t8h8e8t8i8c.
-.ho1mo
-.hom4oth3
-.homoth2e
-.homo3the4t
-.homothet1ic
-.ho8r8s8e9r8a8d9i8s8h.
-.hor4se
-.ho4rs2
-.horser1a
-.horsera2d
-.horser2adi
-.horseradis1
-.horseradis2h
-.ho8t9b8e8d.
-.ho2t1b
-.hot4be2d
-.ho8t9b8e8d8s.
-.hotbe2d1s2
-.hy9d8r8o9t8h8e8r9m8a8l.
-.hy1d
-.hy1dr
-.hydro4th2e
-.hydr4oth
-.hydrother3m4
-.hydrother1ma
-.hy9p8o9t8h8a8l9a9m8u8s.
-.hy3po
-.hyp4ot
-.hyp4oth
-.hypotha3la
-.hypothala3m
-.hypothala1mu
-.hypothalam2us
-.id8e8a8l8s.
-.ide3a4l
-.idea2l1s2
-.id8e8o9g8r8a8p8h8s.
-.ideo2g
-.ideo1gr
-.ideogra4p4h1s2
-.id8i8o9s8y8n9c8r8a8s8y.
-.i2di
-.i1d3io
-.idi4os
-.idios4y
-.idiosyn1cr
-.idiosyncr2as
-.idiosyncras4y
-.id8i8o9s8y8n9c8r8a9s8i8e8s.
-.idiosyncras2ie4
-.id8i8o9s8y8n9c8r8a8t8i8c.
-.idiosyn5crat1ic
-.id8i8o9s8y8n9c8r8a8t9i9c8a8l9l8y.
-.idiosyncrati1ca
-.idiosyncratical1l
-.idiosyncratical1ly
-.ig9n8i8t9e8r.
-.2ig
-.ig1ni
-.ign2it
-.ign2ite
-.ig9n8i8t9e8r8s.
-.ignite4r1s2
-.ig9n8i9t8o8r.
-.ign3itor
-.igni1to
-.ig8n8o8r8e9s8p8a8c8e8s.
-.ig1no
-.ignore1sp
-.ignore2s1pa
-.ignorespa4ce
-.im9p8e8d9a8n8c8e.
-.im2p2ed
-.imp2e2d2a
-.impeda2n
-.im9p8e8d9a8n8c8e8s.
-.in9d8u9b8i9t8a9b8l8e.
-.4ind
-.in1du
-.indu1b4i
-.indubi2t
-.indubi1ta
-.indubi2tab
-.indubitab2l2
-.in9f8i8n9i8t8e9l8y.
-.in3f
-.in1fi
-.in2fin
-.inf2ini
-.infin2it
-.infin2ite
-.infinite1ly
-.in9f8i8n9i9t8e8s9i9m8a8l.
-.infinit4es
-.infinite1si
-.infinite2s5im
-.infinitesi1ma
-.in9f8r8a9s8t8r8u8c9t8u8r8e.
-.infr2as
-.infras1t4r
-.infrastru2c1t
-.infrastructu4r
-.infrastruc1tu
-.infrastruc3ture
-.in9f8r8a9s8t8r8u8c9t8u8r8e8s.
-.in9s8t8a8l8l9e8r.
-.ins2ta2l
-.ins1ta
-.instal1l
-.instal2le
-.in9s8t8a8l8l9e8r8s.
-.installe4r1s2
-.in9t8e8r9d8i8s9c8i9p8l8i9n8a8r8y.
-.in1t
-.in5ter3d
-.interd2i
-.interdis1
-.interd2is1c
-.interdis1ci
-.interdisc2ip
-.interdisci1p2l2
-.interdiscipli4n
-.interdiscipl4i1na
-.interdisciplin2a2r
-.in9t8e8r9g8a9l8a8c9t8i8c.
-.interg2
-.inter1ga
-.intergala2c1t
-.in9u8t8i8l8e.
-.in1u
-.in4u1t2i
-.in9u8t8i8l9i9t8y.
-.inutil1i
-.inut2il1it
-.inutili1ty
-.ir9r8e9d8u8c9i8b8l8e.
-.ir2r2ed
-.irre1du
-.irredu2c
-.irreduci4b
-.irredu1ci
-.irreduci1b2l2
-.ir9r8e9d8u8c9i8b8l8y.
-.irreducib1ly
-.ir9r8e8v9o9c8a9b8l8e.
-.irrev2
-.irre5voc
-.irrevo1ca
-.irrevoca1b2l2
-.is8o8t9r8o8p8y.
-.i2so
-.isotropy5
-.is8o9t8r8o8p9i8c.
-.isotrop3ic
-.it8i8n9e8r9a8r8y.
-.i1ti
-.i2t1in
-.it2ine
-.itin4er4a2r
-.itin1er
-.itiner1a
-.it8i8n9e8r9a8r9i8e8s.
-.itinerar1i
-.itinerar2ie4
-.je9r8e9m8i9a8d8s.
-.1je
-.jerem2i3a
-.jeremia2d
-.jeremia2d1s2
-.ke8y9n8o8t8e.
-.ke8y9n8o8t8e8s.
-.keyno4tes
-.ke8y9s8t8r8o8k8e.
-.keys4
-.keys1t
-.keyst4r
-.keystr2ok2
-.ke8y9s8t8r8o8k8e8s.
-.keystrokes4
-.ki8l8n9i8n8g.
-.k1i
-.k4i2l1n2
-.kiln1in
-.kilnin4g
-.la8c9i9e8s8t.
-.l4a2ci4
-.la3c2ie4
-.laci1est
-.la8m9e8n9t8a9b8l8e.
-.la1men
-.la3men1t
-.lamen2ta4b
-.lamen1ta
-.lamentab2l2
-.la8n8d9s8c8a8p9e8r.
-.3l4and
-.la2n
-.lan2d1s2
-.landsca4p
-.lands1ca
-.landsca5per
-.la8n8d9s8c8a8p9e8r8s.
-.landscape4r1s2
-.la8r9c8e9n8y.
-.l2a2r
-.lar1c
-.lar2ce
-.lar1cen4
-.la8r9c8e9n9i8s8t.
-.lar4ceni
-.le8a8f9h8o8p9p8e8r.
-.le2a
-.lea2f
-.lea4fh
-.leafho4p1p
-.leafhop2pe
-.leafhop3per
-.le8a8f9h8o8p9p8e8r8s.
-.leafhoppe4r1s2
-.le8t9t8e8r9s8p8a8c9i8n8g.
-.le4t3t2
-.lette4r1s2
-.letter1sp
-.letter2s1pa
-.lettersp4a2ci
-.letterspa2c1in
-.letterspac1ing
-.li8f8e9s8p8a8n.
-.life1sp
-.life2s1pa
-.lifespa4n
-.li8f8e9s8p8a8n8s.
-.lifespa2n1s2
-.li8f8e9s8t8y8l8e.
-.lifes2ty
-.lifes2tyl
-.li8f8e9s8t8y8l8e8s.
-.lifestyles2
-.li8g8h8t9w8e8i8g8h8t.
-.3ligh
-.lightw4
-.lightwei2
-.l2ightwe2ig2
-.li8m9o8u9s8i8n8e8s.
-.li4mo
-.li3mo2us
-.limou2
-.limou2s1in
-.limous2ine
-.limousi1nes
-.li8n8e9b8a8c8k8e8r.
-.1l4ine
-.lin2e2b
-.lineback1
-.lineback1er
-.li8n8e9s8p8a8c8i8n8g.
-.li1nes
-.li4ne1sp
-.line2s1pa
-.linesp4a2ci
-.linespa2c1in
-.linespac1ing
-.li9o8n9e8s8s.
-.lio2n
-.lio1nes
-.lion2e2ss
-.li8t8h9o9g8r8a8p8h8e8d.
-.l2ith
-.litho4g
-.litho1gr
-.lithograph4ed
-.li8t8h9o9g8r8a8p8h8s.
-.lithogra4p4h1s2
-.lo9b8o8t9o8m8y.
-.lobo4to
-.loboto3my
-.lo9b8o8t9o8m9i8z8e.
-.lobotom2iz
-.lobotomi2ze
-.lo8g8e8s.
-.lo1ge
-.lo8n8g9e8s8t.
-.5long
-.lo2n
-.lo9q8u8a8c9i8t8y.
-.lo1q
-.loqu2
-.loquac4
-.loqu4a2ci
-.loqua2c1it
-.loquaci1ty
-.lo8v8e9s8t8r8u8c8k.
-.4lov
-.lov4e2s
-.lov2est4r
-.lovestruc5
-.lovestruck1
-.ma8c8r8o9e8c8o9n8o8m8i8c8s.
-.macro4e
-.macroe1co
-.macroeco2n
-.macroeco3nomic
-.macroeconomi4c3s2
-.ma8l9a9p8r8o8p9i8s8m.
-.malapr2
-.malapropi2s1m
-.ma8l9a9p8r8o8p9i8s8m8s.
-.malaprop4is4m1s2
-.ma8n9s8l8a8u8g8h9t8e8r.
-.ma2n1s2
-.man2s1l2
-.manslaugh3
-.ma8n9u9s8c8r8i8p8t.
-.man2us
-.manusc2
-.manuscri2
-.manuscr2ip
-.manuscri2p1t
-.ma8r9g8i8n9a8l.
-.marg2
-.margi4n
-.margi1na
-.ma8t8h9e9m8a9t8i9c8i8a8n.
-.m4ath3
-.math5em
-.math2e
-.1mathe1ma
-.mathemat1ic
-.mathemat2i1ci
-.mathemati3c2i1a
-.mathematici2a2n
-.ma8t8h9e9m8a9t8i9c8i8a8n8s.
-.mathematicia2n1s2
-.ma8t8t8e8s.
-.mat5te
-.ma4t3t2
-.mat4tes
-.me8d9i8c9a8i8d.
-.2med
-.m4edi
-.med3i1ca
-.medicai2
-.medica2id
-.me8d8i9o8c8r8e.
-.me1d2io
-.mediocre3
-.me8d8i9o8c9r8i9t8i8e8s.
-.medi5ocrit
-.mediocri2
-.medio5cri1ti
-.mediocrit2ie4
-.me8g8a9l8i8t8h.
-.me2g
-.m4egal
-.me1ga
-.me3gal1i
-.megal1it
-.megal2ith
-.me8g8a9l8i8t8h8s.
-.megali2t4h1s2
-.me8t8a9b8o8l9i8c.
-.me4ta
-.me2ta4b
-.metabol3ic
-.metabol2i
-.me9t8a8b9o9l8i8s8m.
-.metaboli2s1m
-.me9t8a8b9o9l8i8s8m8s.
-.metabol4is4m1s2
-.me9t8a8b9o9l8i8t8e.
-.metabo5l2ite
-.metabol1it
-.me9t8a8b9o9l8i8t8e8s.
-.metabolit4es
-.me8t8a9l8a8n9g8u8a8g8e.
-.met3a2l
-.meta5la
-.metala2n
-.metal2ang
-.metalan1gu
-.metalangu4a
-.me8t8a9l8a8n9g8u8a8g8e8s.
-.me8t8a9p8h8o8r9i8c.
-.metapho4r
-.me8t8h9a8n8e.
-.metha2n4
-.me9t8r8o8p9o9l8i8s.
-.m4etr
-.metropol2i
-.me9t8r8o8p9o9l8i8s8e8s.
-.metropol4ise
-.metropolis1e4s
-.me8t9r8o9p8o8l9i9t8a8n.
-.metropol1it
-.metropoli3ta2n
-.metropoli1ta
-.me8t9r8o9p8o8l9i9t8a8n8s.
-.metropolita2n1s2
-.mi8c8r8o9e8c8o9n8o8m8i8c8s.
-.m4i1cr
-.micro4e
-.microe1co
-.microeco2n
-.microeco3nomic
-.microeconomi4c3s2
-.mi9c8r8o9f8i8c8h8e.
-.micro2fi
-.microf4i2ch
-.microfiche2
-.mi9c8r8o9f8i8c8h8e8s.
-.microfich1es
-.mi8c8r8o9o8r8g8a8n9i8s8m.
-.microo2
-.microorg2
-.microor1ga
-.microorgan5is
-.microorga2n
-.microorgani2s1m
-.mi8c8r8o9o8r8g8a8n9i8s8m8s.
-.microorgan4is4m1s2
-.mi8l8l9a8g8e.
-.m4il1l
-.mi8l9l8i9l8i8t8e8r.
-.mill2i
-.mil4l4i4l
-.millil1i
-.mill2il1it
-.millil2ite
-.mi8m8e8o9g8r8a8p8h8e8d.
-.mimeo2g
-.mimeo1gr
-.mimeograph4ed
-.mi8m8e8o9g8r8a8p8h8s.
-.mimeogra4p4h1s2
-.mi8m9i8c9r8i8e8s.
-.mim1i
-.mim4i1cr
-.mimicri2
-.mimicr2ie4
-.mi8n9i8s.
-.m2ini
-.min1is
-.mi8n8i9s8y8m9p8o9s8i8u8m.
-.minis4y
-.minisy4m1p
-.minisym1pos
-.minisympo5si4u
-.mi8n8i9s8y8m9p8o9s8i8a.
-.minisympos2i1a
-.mi9n8u8t9e8r.
-.m4in1u
-.mi9n8u8t9e8s8t.
-.mi8s9c8h8i8e9v8o8u8s9l8y.
-.m2is1c
-.mis3ch2
-.misch2ie4
-.mischievou2
-.mischievo2us
-.mischievous1l2
-.mischievous1ly
-.mi9s8e8r8s.
-.m4ise
-.mis3er
-.mise4r1s2
-.mi9s8o8g9a9m8y.
-.mi2so
-.miso1ga
-.miso2gam
-.mo8d9e8l9l8i8n8g.
-.mo2d1
-.model1l
-.modell2i
-.model2lin4
-.mo8l9e9c8u8l8e.
-.mole1cu
-.mole4cul
-.molecul4e
-.mo8l9e9c8u8l8e8s.
-.molecules2
-.mo8n9a8r8c8h8s.
-.mo1n1a
-.monar3c
-.mon2a2r
-.monar2ch
-.monarc4h1s2
-.mo8n8e8y9l8e8n9d8e8r.
-.moneylen1de
-.mo8n8e8y9l8e8n9d8e8r8s.
-.moneylende4r5s2
-.mo8n8o9c8h8r8o8m8e.
-.mono2ch4
-.monoc4hr4
-.monochro2me
-.mo8n8o9e8n9e8r9g8e8t8i8c.
-.mo3noe
-.monoen1er
-.monoenerg2
-.monoener3get
-.monoenerget1ic
-.mo8n9o8i8d.
-.monoi2
-.mono2id
-.mo8n8o9p8o8l8e.
-.mo4nop
-.mo8n8o9p8o8l8e8s.
-.monopoles2
-.mo9n8o8p9o8l8y.
-.monopo2ly
-.mo8n8o9s8p8l8i8n8e.
-.monos1p2l2
-.monospli4n
-.monosp1l4ine
-.mo8n8o9s8p8l8i8n8e8s.
-.monospli1nes
-.mo8n8o9s8t8r8o8f8i8c.
-.monos5t
-.monost4r
-.monostro2fi
-.mo9n8o8t9o9n8i8e8s.
-.mono1to
-.mo2noto2n
-.monoton2ie4
-.mo9n8o8t9o9n8o8u8s.
-.mono4tono
-.monoto1nou2
-.monotono2us
-.mo9r8o8n9i8s8m.
-.moro5n4is
-.moro2n
-.moroni2s1m
-.mo8s9q8u8i9t8o.
-.mos2
-.mosqu2
-.mosq2ui2
-.mosqui1to
-.mo8s9q8u8i9t8o8s.
-.mosquitos2
-.mo8s9q8u8i9t8o8e8s.
-.mu8d9r8o8o8m.
-.mu1dr
-.mud1room
-.mudroo2
-.mu8d9r8o8o8m8s.
-.mudroo4m1s2
-.mu8l9t8i9f8a8c9e8t8e8d.
-.5mu4lt
-.mul1ti3
-.multif2
-.multi1fa
-.multifa4ce
-.multifacet4
-.multiface2t1ed
-.mu8l9t8i9p8l8i8c9a8b8l8e.
-.mult2ip
-.multi1p2l2
-.multipli1ca
-.multiplica1b2l2
-.mu8l8t8i9u8s8e8r.
-.multi4u
-.multi2us
-.ne8o9f8i8e8l8d8s.
-.3neo
-.ne5of
-.neo2fi
-.neof2ie4
-.neofie2ld3
-.neofiel2d1s2
-.ne8o9n8a8z8i.
-.neo2n
-.neo1n1a
-.neona2z1i
-.ne8o9n8a8z8i8s.
-.neonaz4is
-.ne8p8h9e8w8s.
-.nephe4
-.ne8p8h9r8i8t8e.
-.nep4hr4
-.nephr2ite
-.ne8p8h9r8i8t8i8c.
-.nephr4i2t3ic
-.nephri1ti
-.ne8w9e8s8t.
-.ne4w
-.newest3
-.ne8w8s9l8e8t9t8e8r.
-.news4l2
-.news2le
-.newsle4t3t2
-.ne8w8s9l8e8t9t8e8r8s.
-.newslette4r1s2
-.ni8t8r8o9m8e8t8h9a8n8e.
-.n2it
-.ni3tr
-.nitro2me
-.nitro4met
-.nitrometha2n4
-.no9n8a8m8e.
-.no4n
-.no1n1a
-.no8n9a8r9i8t8h9m8e8t9i8c.
-.nonar3i
-.non2a2r
-.nonar2ith
-.nonarit4h1m
-.nonarithmet4
-.nonarithmet1ic
-.no8n9e8m8e8r9g8e8n8c8y.
-.none1me
-.nonemerg2
-.nonemer1gen
-.nonemergen1cy
-.no8n9e8q8u8i9v8a8r8i9a8n8c8e.
-.none2q
-.nonequ2
-.noneq2ui2
-.nonequ2iv3
-.nonequi1va
-.nonequiv2a2r
-.nonequivar1i
-.nonequivar3i2a2n
-.nonequivar2i3a
-.nonequivar4ianc
-.no8n8e9t8h8e9l8e8s8s.
-.noneth2e
-.nonethe1les2
-.nonethe3l2e2ss
-.no8n9e8u8c8l8i8d9e8a8n.
-.non4eu
-.noneu1c4l4
-.noneucl2id
-.noneuclidea2n
-.no8n9i8s8o9m8o8r9p8h8i8c.
-.non5i
-.non1is
-.noni2so
-.noni3som
-.noniso1mo
-.nonisomo2r
-.nonisomor1p
-.nonisomorp4h4
-.nonisomorph1ic
-.no8n9p8s8e8u8d8o9c8o8m9p8a8c8t.
-.non1p4
-.non2p1s2
-.nonp2se
-.nonps4eu
-.nonpseu1do
-.nonpseudo1co
-.nonpseudoco4m1p
-.nonpseudocom1pa
-.nonpseudocompa2c4t
-.no8n9s8m8o8o8t8h.
-.no2n3s2
-.non2s3m
-.nons1mo
-.nonsmoo2
-.nonsmo4oth
-.no8n9u8n8i9f8o8r8m.
-.no3nu4n
-.nonu1ni
-.nonuni1fo
-.nonunifo2r
-.nonunifor1m
-.no8n9u8n8i9f8o8r8m9l8y.
-.nonunifor4m1l
-.nonuniform1ly
-.no8r9e8p9i9n8e8p8h9r8i8n8e.
-.nore5pi2n
-.norep2ine
-.norepinep4hr4
-.norep2inephr2in4e
-.no8t9w8i8t8h9s8t8a8n8d9i8n8g.
-.notw4
-.notwi2
-.notw2ith3
-.notwi2t4h1s2
-.notwith5st4and
-.notwiths1ta
-.notwithsta2n
-.notwithstand1in
-.nu9c8l8e8o9t8i8d8e.
-.nucle3
-.nu1c4l4
-.nucle4ot
-.nucleot2id
-.nu9c8l8e8o9t8i8d8e8s.
-.nucleotide4s2
-.nu8t9c8r8a8c8k9e8r.
-.nu4tc
-.nutcrack1
-.nutcrack1er
-.nu8t9c8r8a8c8k9e8r8s.
-.nutcracke4r1s2
-.oe8r9s8t8e8d8s.
-.o3er
-.oe4r1s2
-.oers4t1ed
-.oerste2d1s2
-.of8f9l8i8n8e.
-.o4f1f
-.off4l2
-.offlin4
-.off1l4ine
-.of8f9l8o8a8d.
-.offl4oa
-.offloa2d3
-.of8f9l8o8a8d8s.
-.offloa2d1s2
-.of8f9l8o8a8d8e8d.
-.offloa2d1ed
-.ol8i9g8o8p9o9l8i8s8t.
-.ol2i
-.ol2ig
-.oli2go
-.ol2igopol2i
-.ol8i9g8o8p9o9l8i8s8t8s.
-.oligopolis4t1s2
-.ol8i9g8o8p9o8l8y.
-.oligopo2ly
-.ol8i9g8o8p9o8l9i8e8s.
-.oligopol2ie4
-.op9e8r9a8n8d.
-.op1er
-.3oper1a
-.op4er4and
-.opera2n
-.op9e8r9a8n8d8s.
-.operan2d1s2
-.or8a8n8g9u8t8a8n.
-.ora2n
-.or2ang
-.oran1gu
-.oran4gu4t
-.orangu1ta
-.ora2nguta2n
-.or8a8n8g9u8t8a8n8s.
-.oranguta2n1s2
-.or9t8h8o9d8o8n9t8i8s8t.
-.ortho2do4
-.orthodo2n
-.orthodon3t4i
-.orthodon1t
-.or9t8h8o9d8o8n9t8i8s8t8s.
-.orthodontis4t1s2
-.or9t8h8o9k8e8r9a9t8o8l9o8g8y.
-.orth2ok
-.orthok1er
-.orthoker1a
-.orthokera1to
-.orthokeratol1o1gy
-.or8t8h8o9n8i8t8r8o9t8o8l8u8e8n8e.
-.ortho2n
-.orthon2it
-.orthoni3tr
-.orthonitro1to
-.orthonitrotolu3en
-.orthonitrotolu4ene
-.ov8e8r9v8i8e8w.
-.overv2ie4
-.ov8e8r9v8i8e8w8s.
-.ox9i8d9i8c.
-.ox3i
-.oxi5di
-.ox2id
-.pa8d9d8i8n8g.
-.1pa
-.p4a2d
-.pad4d1in
-.pad1d4
-.pa8i8n9l8e8s8s9l8y.
-.p4ai2
-.pa4i4n4
-.pa4i4n1l
-.painles2
-.pain3l2e2ss
-.painles4s1l2
-.painless1ly
-.pa8l9e8t8t8e.
-.p4al
-.p2ale
-.pale4t3t2
-.pa8l9e8t8t8e8s.
-.palet4tes
-.pa8r9a9b8o8l8a.
-.p2a2r
-.pa2rab
-.parabo1la
-.pa8r9a9b8o8l9i8c.
-.parabol3ic
-.parabol2i
-.pa9r8a8b9o9l8o8i8d.
-.paraboloi2
-.parabolo2id
-.pa8r9a9d8i8g8m.
-.para2d
-.par2adi
-.parad2ig
-.paradig1m
-.pa8r9a9d8i8g8m8s.
-.paradig4m1s2
-.pa8r8a9c8h8u8t8e.
-.para2ch
-.parachu4t
-.pa8r8a9c8h8u8t8e8s.
-.pa8r8a9d8i9m8e8t8h8y8l9b8e8n8z8e8n8e.
-.parad4imet
-.paradimethy2l1b
-.paradimethylb4e4n3z
-.paradimethylben2ze
-.paradimethylbenze4n
-.pa8r8a9f8l8u8o8r8o9t8o8l8u8e8n8e.
-.para2f
-.paraf4l2
-.paraflu3o
-.parafluo3r
-.parafluoro1to
-.parafluorotolu3en
-.parafluorotolu4ene
-.pa8r8a9g8r8a8p8h9e8r.
-.para1gr
-.parag5ra3ph4er
-.pa8r8a9l8e9g8a8l.
-.par3al
-.par2ale
-.paral4egal
-.parale1ga
-.pa8r9a8l9l8e8l9i8s8m.
-.paral1l
-.paral2le
-.paral3lel
-.parallel2i
-.paralle2lis
-.paralleli2s1m
-.pa8r8a9m8a8g9n8e8t9i8s8m.
-.par4a1ma
-.param3ag
-.para5mag1n
-.paramagneti2s4m
-.pa8r8a9m8e8d8i8c.
-.para2med
-.param4edi
-.pa8r8a9m8e8t8h8y8l9a8n8i8s8o8l8e.
-.param3et
-.paramethy3la
-.paramethyla2n
-.paramethylani2so
-.pa9r8a8m9e9t8r8i8z8e.
-.param4etr
-.parametri2ze
-.pa8r8a9m8i8l9i9t8a8r8y.
-.par2ami
-.paramil1i
-.param2il1it
-.paramili1ta
-.paramilit2a2r
-.pa8r8a9m8o8u8n8t.
-.para2mo
-.paramou2
-.paramoun1t
-.pa8t8h9o9g8e8n9i8c.
-.p4ath
-.pat4ho
-.patho4g
-.patho1ge4
-.patho1gen
-.pe8e8v9i8s8h.
-.p4ee
-.pee1vi
-.peevis2h
-.pe8e8v9i8s8h9n8e8s8s.
-.peevis2h1n
-.peevish1nes
-.peevishn2e2ss
-.pe8n9t8a9g8o8n.
-.pen1t
-.pen1ta
-.penta2go
-.pentago2n2
-.pe8n9t8a9g8o8n8s.
-.pentago2n3s2
-.pe9t8r8o9l8e9u8m.
-.petrol4eu
-.ph8e9n8o8m9e9n8o8n.
-.ph4e3no
-.phe2n
-.pheno2me
-.pheno1men
-.phenom4eno
-.phenomeno4n
-.ph8e8n8y8l9a8l8a9n8i8n8e.
-.pheny3la
-.phenylala2n
-.phenylala5n2ine
-.phenylalan1in
-.ph8i9l8a8t9e9l8i8s8t.
-.phi4latel2i4
-.philate2lis
-.ph8i9l8a8t9e9l8i8s8t8s.
-.philatelis4t1s2
-.ph8o9n8e8m8e.
-.3phone
-.pho2n
-.phone1me
-.ph8o9n8e8m8e8s.
-.phone2mes
-.ph8o9n8e9m8i8c.
-.phone5mi
-.ph8o8s9p8h8o8r9i8c.
-.phos1p
-.phospho5
-.phospho4r
-.ph8o9t8o9g8r8a8p8h8s.
-.pho1to
-.photo2gr
-.photogra4p4h1s2
-.ph8o9t8o9o8f8f9s8e8t.
-.photoo2
-.photoo4f1f
-.photoof2f3s
-.pi8c9a9d8o8r.
-.pi1ca
-.pica2d
-.pica1do
-.picad4or
-.pi8c9a9d8o8r8s.
-.picado4rs2
-.pi8p8e9l8i8n8e.
-.p2ip
-.pipe4
-.pipel2i
-.pipe1l4ine
-.pi8p8e9l8i8n8e8s.
-.pipeli1nes
-.pi8p8e9l8i8n9i8n8g.
-.pipel2in3i
-.pipelin1in
-.pipelinin4g
-.pi9r8a9n8h8a8s.
-.p4ir
-.pi1ra
-.pira2n
-.pira4n1h4
-.piranha4
-.pl8a8c8a9b8l8e.
-.1p2l2
-.pla1ca
-.placa1b2l2
-.pl8a8n8t9h8o8p9p8e8r.
-.3pla2n
-.plan1t
-.plantho4p1p
-.planthop2pe
-.planthop3per
-.pl8a8n8t9h8o8p9p8e8r8s.
-.planthoppe4r1s2
-.pl8e8a8s9a8n8c8e.
-.ple2a
-.pleasa2
-.plea3sanc
-.pleasa2n
-.pl8u8g9i8n.
-.plug5in
-.pl8u8g9i8n8s.
-.plu5g4i2n1s2
-.po8l9t8e8r9g8e8i8s8t.
-.po4l2t
-.pol1te
-.polterg2
-.poltergei2
-.po8l8y9e8n8e.
-.po2ly
-.po8l8y9e8t8h9y8l9e8n8e.
-.polye4t
-.po9l8y8g9a9m8i8s8t.
-.poly1ga
-.poly2gam
-.polygam2is
-.po9l8y8g9a9m8i8s8t8s.
-.polygamis4t1s2
-.po8l8y8g9o8n9i9z8a9t8i8o8n.
-.poly1go
-.polygo2n2
-.polygo3ni
-.polygoniza1
-.polygoniza1t2io
-.polygonizatio2n
-.po9l8y8p8h9o9n8o8u8s.
-.polypho2n
-.polypho1nou2
-.polyphono2us
-.po8l8y9s8t8y8r8e8n8e.
-.po2lys4
-.polys1t
-.polys2ty
-.po8m8e9g8r8a8n9a8t8e.
-.po2me
-.pome2g
-.pome1gr
-.pomegra2n2
-.pomegra1na
-.pomegran2at
-.po8r8o9e8l8a8s9t8i8c.
-.1p4or
-.poro4e
-.poro4el
-.poroe1la
-.poroelast2i
-.poroelas1tic
-.po8r9o8u8s.
-.porou2
-.poro2us
-.po8r9t8a9b8l8e.
-.por1ta
-.por2tab
-.portab2l2
-.po8s8t9a8m9b8l8e.
-.1pos
-.pos2ta
-.posta4m1b
-.postamb2l2
-.po8s8t9a8m9b8l8e8s.
-.postambles2
-.po8s8t9h8u9m8o8u8s.
-.posthu1mo
-.posthu3mo2us
-.posthumou2
-.po8s8t9s8c8r8i8p8t.
-.pos4t1s2
-.post4sc
-.postscri2
-.postscr2ip
-.postscri2p1t
-.po8s8t9s8c8r8i8p8t8s.
-.postscrip4t1s2
-.po8s9t8u8r9a8l.
-.pos1tu
-.postu1ra
-.pr8e9a8m9b8l8e.
-.prea4m1b
-.preamb2l2
-.pr8e9a8m9b8l8e8s.
-.preambles2
-.pr8e9l8o8a8d8e8d.
-.prel4oa
-.preloa2d3
-.preloa2d1ed
-.pr8e9p8a8r9i8n8g.
-.pre2pa
-.prep4a4r1i
-.prep2a2r
-.preparin4g
-.pr8e9p8r8i8n8t.
-.pr2epr2
-.preprin4t3
-.pr8e9p8r8i8n8t8s.
-.preprin4t4s2
-.pr8e9p8r8o8c8e8s9s8o8r.
-.pre3pro
-.prepr2oc
-.prepro1ce
-.preproc2e2ss
-.preproces1so
-.pr8e9p8r8o8c8e8s9s8o8r8s.
-.preprocesso4rs2
-.pr8e9s8p8l8i8t9t8i8n8g.
-.pre1sp
-.pres1p2l2
-.prespl1it
-.prespl4i4t3t2
-.presplit2t1in
-.pr8e9w8r8a8p.
-.prewra4
-.pr8e9w8r8a8p8p8e8d.
-.prewra4p1p
-.prewrap2pe
-.prewrap4p2ed
-.pr8i8e8s8t9e8s8s8e8s.
-.5pr2i4e4
-.pri1est
-.pries4t2e2ss
-.priestess1e4s
-.pr8e8t9t8y9p8r8i8n9t8e8r.
-.pre4t3t2
-.pret1ty
-.pr2ettypr2
-.prettyprin4t3
-.pr8e8t9t8y9p8r8i8n9t8i8n8g.
-.prettyprint2i
-.prettyprin4t3ing
-.prettyprin2t1in
-.pr8o9c8e9d8u8r9a8l.
-.pr2oc
-.pro1ce
-.proce1du
-.procedu1ra
-.pr8o8c8e8s8s.
-.proc2e2ss
-.pr8o9c8u8r9a8n8c8e.
-.procu1ra
-.procura2n
-.pr8o8g9e9n8i8e8s.
-.pro1ge
-.pro1gen
-.proge5n2ie4
-.pr8o8g9e9n8y.
-.pro4geny
-.pr8o9g8r8a8m9m8a8b8l8e.
-.pro1gr
-.program1m
-.program1ma
-.program2mab
-.programmab2l2
-.pr8o8m9i9n8e8n8t.
-.prom4i
-.prom1in
-.prom2ine
-.promi1nen
-.prominen1t
-.pr8o9m8i8s9c8u9o8u8s.
-.prom2is
-.prom2is1c
-.promis1cu
-.promiscu1ou2
-.promiscuo2us
-.pr8o8m9i8s9s8o8r8y.
-.prom4i2s1s
-.promis1so
-.promisso1ry
-.pr8o8m9i8s8e.
-.prom4ise
-.pr8o8m9i8s8e8s.
-.promis1e4s
-.pr8o9p8e8l9l8e8r.
-.pro3pel
-.propel1l
-.propel2le
-.pr8o9p8e8l9l8e8r8s.
-.propelle4r1s2
-.pr8o9p8e8l9l8i8n8g.
-.propell2i
-.propel2lin4
-.pr8o9h8i8b9i9t8i8v8e.
-.pro1h2
-.prohibi2t
-.prohibi1ti
-.prohibi1t2iv
-.pr8o9h8i8b9i9t8i8v8e9l8y.
-.prohibitiv4e1ly
-.pr8o9s8c8i8u8t9t8o.
-.pros2c
-.pros1ci
-.prosci1u
-.prosciu4t3t2
-.prosciut5to
-.pr8o9t8e8s8t9e8r.
-.pro1t
-.pro4tes
-.pr8o9t8e8s8t9e8r8s.
-.proteste4r1s2
-.pr8o9t8e8s9t8o8r.
-.prot4es2to
-.pr8o9t8e8s9t8o8r8s.
-.protesto4rs2
-.pr8o9t8o9l8a8n9g8u8a8g8e.
-.pro1to
-.proto1la
-.proto4la2n
-.protol2ang
-.protolan1gu
-.protolangu4a
-.pr8o9t8o9t8y8p9a8l.
-.proto1ty
-.prototy1pa
-.prototyp4al
-.pr8o8v9i8n8c8e.
-.prov1in
-.prov2inc
-.pr8o8v9i8n8c8e8s.
-.pr8o9v8i8n9c8i8a8l.
-.provin1ci
-.provin3c2i1a
-.provinci2al
-.pr8o8w9e8s8s.
-.prow2e2ss
-.ps8e8u9d8o9d8i8f9f8e8r9e8n9t8i8a8l.
-.2p1s2
-.p2se
-.ps4eu
-.pseu1do
-.pseudod1if
-.pseudodi4f1f
-.pseudodiffer1
-.pseudodiffer3en1t
-.pseudodifferent2i
-.pseudodifferen1t2i1a
-.pseudodifferenti2al
-.ps8e8u9d8o9f8i9n8i8t8e.
-.pseu2d5of
-.pseudo2fi
-.pseudo2fin
-.pseudof2ini
-.pseudofin2it
-.pseudofin2ite
-.ps8e8u9d8o9f8i9n8i8t8e9l8y.
-.pseudofinite1ly
-.ps8e8u9d8o9f8o8r8c8e8s.
-.pseudo1fo
-.pseudofo2r
-.pseudofor1c
-.pseudofor2ce
-.ps8e8u9d8o8g9r8a9p8h8e8r.
-.pseud4og
-.pseudo1gr
-.pseudog5ra3ph4er
-.ps8e8u9d8o9g8r8o8u8p.
-.pseudo4g4ro
-.pseudogrou2
-.ps8e8u9d8o9g8r8o8u8p8s.
-.pseudogrou2p1s2
-.ps8e8u9d8o9n8y8m.
-.pseu4do2n
-.pseudonym4
-.ps8e8u9d8o9n8y8m8s.
-.pseudony4m1s2
-.ps8e8u9d8o9w8o8r8d.
-.pseudo4wo2
-.ps8e8u9d8o9w8o8r8d8s.
-.pseudowor2d1s2
-.ps8y9c8h8e9d8e8l9i8c.
-.ps4y
-.p4sy1c
-.psy3ch
-.psych4e2
-.psy4ch4ed
-.psychedel2i
-.ps8y8c8h8s.
-.psyc4h1s2
-.pu9b8e8s9c8e8n8c8e.
-.pub3
-.pub4e
-.pu4bes4
-.pubes2c
-.pubes1cen
-.pubes3cenc
-.qu8a8d9d8i8n8g.
-.qu2
-.qua2d
-.quad4d1in
-.quad1d4
-.qu8a9d8r8a8t9i8c.
-.qua1dr
-.quadrat1ic
-.qu8a9d8r8a8t9i8c8s.
-.quadrati4c3s2
-.qu8a8d9r8a9t8u8r8e.
-.quadra2tu
-.quadra3ture
-.qu8a8d9r8i9p8l8e8g9i8c.
-.quadri2p2l2
-.quadr2ip
-.quadripleg4ic
-.qu8a8i8n8t9e8r.
-.quai2
-.qua4i4n
-.quain1t
-.qu8a8i8n8t9e8s8t.
-.qu8a9s8i9e8q8u8i8v9a9l8e8n8c8e.
-.quas2ie4
-.quasie1q
-.qu2asiequ2
-.quasieq2ui2
-.quasiequ2iv3
-.quasiequi1va
-.quasiequiv2ale
-.quasiequiva3lenc
-.qu8a9s8i9e8q8u8i8v9a9l8e8n8c8e8s.
-.qu8a9s8i9e8q8u8i8v9a9l8e8n8t.
-.quasiequiva1len1t
-.qu8a9s8i9h8y9p8o9n8o8r9m8a8l.
-.quasi3h
-.quasihy3po
-.quasihypo2n
-.quasihyponor1m
-.quasihyponor1ma
-.qu8a9s8i9r8a8d9i9c8a8l.
-.quas4i2r
-.quasi1r5a
-.quasira2d
-.quasir2adi
-.quasirad3i1ca
-.qu8a9s8i9r8e8s8i8d9u8a8l.
-.quasi4res
-.quasire1si
-.quasire2s2id
-.quasiresi2du
-.quasiresid1u1a
-.qu8a9s8i9s8m8o8o8t8h.
-.qua1sis
-.quasi2s1m
-.quasis1mo
-.quasismoo2
-.quasismo4oth
-.qu8a9s8i9s8t8a9t8i8o8n9a8r8y.
-.quasis1ta
-.quasistation5a2r
-.quasista1t2io
-.quasistatio2n
-.quasistatio1n1a
-.qu8a9s8i9t8o8p8o8s.
-.qu5a5si4t
-.quasi1to
-.quasito1pos
-.qu8a9s8i9t8r8i9a8n9g8u9l8a8r.
-.quasi5tr2i3a
-.quasitri2a2n
-.quasitri2ang
-.quasitrian1gu
-.quasitriangu1la
-.quasitriangul2a2r
-.qu8a9s8i9t8r8i8v9i8a8l.
-.quasitr2i4v
-.quasitriv3i
-.quasitriv2i1a
-.quasitrivi2al
-.qu8i8n9t8e8s9s8e8n8c8e.
-.q2ui2
-.qui4n
-.quin1t
-.quin4t2e2ss
-.quintes4senc
-.qu8i8n9t8e8s9s8e8n8c8e8s.
-.qu8i8n9t8e8s9s8e8n9t8i8a8l.
-.quintessen1t
-.quintessent2i
-.quintessen1t2i1a
-.quintessenti2al
-.ra8b9b8i8t9r8y.
-.2rab
-.ra2b1b
-.rabbi2t
-.rabbi3tr
-.rabbit5ry
-.ra9d8i9o8g9r8a9p8h8y.
-.ra2d
-.r2adi
-.ra3d2io
-.radio5g
-.radio2gr
-.radio4g3ra1phy
-.ra8f8f9i8s8h.
-.raf5fi
-.ra2f
-.ra4f1f4
-.raf2f5is
-.raffis2h
-.ra8f8f9i8s8h9l8y.
-.raffis4h1l4
-.raffish1ly
-.ra8m9s8h8a8c8k8l8e.
-.ra4m1s2
-.ram4s2h
-.ramshack1
-.ramshack1l
-.ra8v9e8n9o8u8s.
-.rav4e4no
-.rave1nou2
-.raveno2us
-.re9a8r8r8a8n8g8e9m8e8n8t.
-.re5ar1r4
-.re2a2r
-.rearran4ge
-.rearra2n
-.rearr2ang
-.rearrange1me
-.rearrange1men
-.rearrange3men1t
-.re9a8r8r8a8n8g8e9m8e8n8t8s.
-.rearrangemen4t4s2
-.re8c9i9p8r8o8c9i9t8i8e8s.
-.reciproci1ti
-.reciprocit2ie4
-.re8c9t8a8n9g8l8e.
-.rec4ta2n
-.re2c1t
-.rect5ang
-.rec1ta
-.rectan1gl2
-.rectan1gle
-.re8c9t8a8n9g8l8e8s.
-.rectangles2
-.re8c9t8a8n9g8u9l8a8r.
-.rectan1gu
-.rectangu1la
-.rectangul2a2r
-.re9d8i9r8e8c8t.
-.2r2ed
-.r4edi
-.red4ir2
-.redi1re
-.redire2c1t
-.re9d8i9r8e8c8t9i8o8n.
-.redirec1t2io
-.redirectio2n
-.re9d8u8c9i8b8l8e.
-.re1du
-.redu2c
-.reduci4b
-.redu1ci
-.reduci1b2l2
-.re9e8c8h8o.
-.ree2c
-.ree2ch
-.ree3cho2
-.re9p8h8r8a8s8e.
-.rep4hr4
-.rephr2as
-.re9p8h8r8a8s8e8s.
-.rephras1e4s
-.re9p8h8r8a8s8e8d.
-.rephra4s4ed
-.re9p8o9s8i9t8i8o8n.
-.re4posi
-.re1po
-.re1pos
-.repo3s2i1t2io
-.reposi1ti
-.repositio2n
-.re9p8o9s8i9t8i8o8n8s.
-.repositio2n3s2
-.re9p8r8i8n8t.
-.repr2
-.reprin4t3
-.re9p8r8i8n8t8s.
-.reprin4t4s2
-.re9s8t8o8r9a8b8l8e.
-.r4es2to
-.resto2ra
-.resto2rab
-.restorab2l2
-.re8t8r8o9f8i8t.
-.retro2fi
-.re8t8r8o9f8i8t9t8e8d.
-.retrof4i4t4t2
-.retrofit2t1ed
-.re9u8s9a8b8l8e.
-.r4eu2
-.re2us4
-.reusa2
-.reu2s1ab
-.reusab2l2
-.re9u8s8e.
-.re9w8i8r8e.
-.rewi2
-.rew4ir4
-.re9w8r8a8p.
-.rewra4
-.re9w8r8a8p8p8e8d.
-.rewra4p1p
-.rewrap2pe
-.rewrap4p2ed
-.re9w8r8i8t8e.
-.rewri4
-.rewr2ite
-.rh8i9n8o8c9e8r9o8s.
-.rh4
-.rh2i1no
-.rhi4no4c
-.rhino1ce
-.rhinoc2ero
-.ri8g8h8t9e8o8u8s.
-.righ1teo
-.righteou2
-.righteo2us
-.ri8g8h8t9e8o8u8s9n8e8s8s.
-.righteous1n4
-.righteous1nes
-.righteousn2e2ss
-.ri8n8g9l8e8a8d8e8r.
-.rin4g
-.ringl2
-.rin1gle
-.ringle2a
-.ringlea2d1
-.ri8n8g9l8e8a8d8e8r8s.
-.ringleade4r5s2
-.ro9b8o8t.
-.ro9b8o8t8s.
-.robo4t1s2
-.ro9b8o8t8i8c.
-.ro9b8o8t9i8c8s.
-.roboti4c3s2
-.ro8u8n8d9t8a8b8l8e.
-.rou2
-.roun2d
-.round1ta
-.round2tab
-.roundtab2l2
-.ro8u8n8d9t8a8b8l8e8s.
-.roundta5bles2
-.sa8l8e8s9c8l8e8r8k.
-.sa2
-.s2ale
-.sales2
-.sales2c
-.salescle5
-.sales1c4l4
-.sa8l8e8s9c8l8e8r8k8s.
-.salescler4k1s2
-.sa8l8e8s9w8o8m8a8n.
-.sales4w2
-.sale4s1wo2
-.saleswom1
-.saleswo1ma
-.saleswoma2n
-.sa8l8e8s9w8o8m8e8n.
-.saleswo2me
-.saleswo1men
-.sa8l9m8o9n8e8l9l8a.
-.s4a2l4m
-.salmo2n4
-.sal1mo
-.salmon4ella
-.salmonel1l
-.sa8l9t8a9t8i8o8n.
-.sa4l4t
-.sal1ta
-.salta1t2io
-.saltatio2n
-.sa8r9s8a9p8a8r9i8l9l8a.
-.s2a2r
-.sa2r4sa2
-.sa4rs2
-.sars1ap
-.s2a2rsap2a2r4
-.sarsa1pa
-.sarsap4a4r1i
-.sarsaparil1l
-.sa8u8e8r9k8r8a8u8t.
-.sau4
-.sauerkrau4t
-.sc8a8t9o9l8o8g9i9c8a8l.
-.s1ca
-.sca1to
-.scato3log1ic
-.scatologi1ca
-.sc8h8e8d9u8l9i8n8g.
-.s2ch2
-.sche2
-.s4ch4ed
-.sche4dul
-.sche1du
-.schedul2i
-.schedul3ing
-.sc8h8i8z9o9p8h8r8e8n8i8c.
-.schi2z
-.schi1zo
-.schiz2oph
-.schizop4hr4
-.sc8h8n8a8u9z8e8r.
-.sc2h1n
-.sch1na
-.schn2au
-.schnau2z4e
-.schnauz1er
-.sc8h8o8o8l9c8h8i8l8d.
-.s4cho2
-.schoo2
-.schoo4l1c2
-.s2chool2ch
-.schoolch4il2
-.schoolchi2ld
-.sc8h8o8o8l9c8h8i8l8d9r8e8n.
-.schoolchil3dr
-.schoolchildre4
-.schoolchil5dren
-.sc8h8o8o8l9t8e8a8c8h8e8r.
-.schoo4l2t
-.school1te
-.s2chooltea2ch
-.schoolteache2
-.sc8h8o8o8l9t8e8a8c8h9e8r8s.
-.schoolteach3e4r1s2
-.sc8r8u9t8i9n8y.
-.scru2t1i5n
-.scr4u1t2i
-.scrut4iny
-.sc8y8t8h9i8n8g.
-.s1cy
-.scy3thin
-.se8l8l9e8r.
-.sel2le
-.se8l8l9e8r8s.
-.selle4r1s2
-.se8c9r8e9t8a8r9i8a8t.
-.se1cr
-.se4c3re1ta
-.secret2a2r
-.secretar1i
-.secretar2i3a
-.se8c9r8e9t8a8r9i8a8t8s.
-.secretaria4t1s2
-.se8m9a9p8h8o8r8e.
-.se1ma
-.se4map
-.semapho4r
-.se8m9a9p8h8o8r8e8s.
-.se9m8e8s9t8e8r.
-.4se1me
-.se2mes
-.se8m8i9d8e8f9i9n8i8t8e.
-.sem2id
-.semide1f
-.semidef5i5n2ite
-.semide1fi
-.semide2fin
-.semidef2ini
-.semidefin2it
-.se8m8i9d8i9r8e8c8t.
-.semi2di
-.semid4ir2
-.semidi1re
-.semidire2c1t
-.se8m8i9h8o9m8o9t8h8e8t9i8c.
-.semi3h
-.semiho1mo
-.semihom4oth3
-.semihomoth2e
-.semihomo3the4t
-.semihomothet1ic
-.se8m8i9r8i8n8g.
-.sem4ir
-.semir1i
-.semirin4g
-.se8m8i9r8i8n8g8s.
-.semirings2
-.se8m8i9s8i8m9p8l8e.
-.se4m2is
-.semisi4m1p
-.semisim1p2l2
-.se8m8i9s8k8i8l8l8e8d.
-.sem4is4k2
-.semisk1i
-.semisk4il1l
-.semiskil2le
-.se8r8o9e8p8i9d8e9m8i9o9l8o8g9i9c8a8l.
-.s2er4o
-.sero4e
-.seroep4id
-.seroepi3de
-.seroepid4em
-.seroepidem2io
-.seroepidemi1ol
-.seroepidemio3log1ic
-.seroepidemiologi1ca
-.se8r9v8o9m8e8c8h9a8n8i8s8m.
-.4ser3vo
-.servo2me
-.servome2ch
-.servomech5a5nis
-.servomecha2n
-.servomechani2s1m
-.se8r9v8o9m8e8c8h9a8n8i8s8m8s.
-.servomechan4is4m1s2
-.se8s9q8u8i9p8e9d8a9l8i8a8n.
-.s1e4s
-.sesqu2
-.sesq2ui2
-.sesqu2ip
-.sesquipe4
-.sesqui2p2ed
-.sesquip2e2d2a
-.sesquipedal1i
-.sesquipedal2i1a
-.sesquipedali2a2n
-.se8t9u8p.
-.se1tu
-.se8t9u8p8s.
-.setu2p1s2
-.se9v8e8r8e9l8y.
-.5sev
-.sev1er
-.sev4erel
-.severe1ly
-.sh8a8p8e9a8b8l8e.
-.sha3pe4a
-.shape1a4b
-.shapeab2l2
-.sh8o8e9s8t8r8i8n8g.
-.sho4
-.sho2est4r
-.shoestrin4g
-.sh8o8e9s8t8r8i8n8g8s.
-.shoestrings2
-.si8d8e9s8t8e8p.
-.5side4s2
-.s2id
-.sideste4p
-.si8d8e9s8t8e8p8s.
-.sideste2p1s2
-.si8d8e9s8w8i8p8e.
-.sides4w2
-.sideswi2
-.sidesw2ip
-.sideswipe4
-.sk8y9s8c8r8a8p8e8r.
-.sk2
-.skys4c
-.skyscrap3er
-.sk8y9s8c8r8a8p8e8r8s.
-.skyscrape4r1s2
-.sm8o8k8e9s8t8a8c8k.
-.2s1m
-.s1mo
-.s4m2ok
-.smokes4
-.smokes1ta
-.smokestack1
-.sm8o8k8e9s8t8a8c8k8s.
-.smokestac4k1s2
-.sn8o8r9k8e8l9i8n8g.
-.s1n4
-.snorke5l2i
-.snorke4l3ing
-.so9l8e9n8o8i8d.
-.1so
-.sol4eno
-.solenoi2
-.soleno2id
-.so9l8e9n8o8i8d8s.
-.solenoi2d1s2
-.so8l8u8t8e.
-.so1lut
-.so8l8u8t8e8s.
-.so8v9e8r9e8i8g8n.
-.4sov
-.soverei2
-.sovere2ig2
-.so8v9e8r9e8i8g8n8s.
-.sovereig2n1s2
-.sp8a9c8e8s.
-.2s1pa
-.spa4ce
-.sp8e9c8i8o8u8s.
-.spe2c
-.spe1c2i
-.spec2io
-.speciou2
-.specio2us
-.sp8e8l8l9e8r.
-.spel1l
-.spel2le
-.sp8e8l8l9e8r8s.
-.spelle4r1s2
-.sp8e8l8l9i8n8g.
-.spell2i
-.spel2lin4
-.sp8e9l8u8n8k9e8r.
-.spelu4nk2
-.spelunk1er
-.sp8e8n8d9t8h8r8i8f8t.
-.spen4d
-.spend2th
-.spendt4hr4
-.spendthr4i2ft
-.sp8h8e8r9o8i8d.
-.s2phe
-.3sph4er
-.sph2ero
-.spheroi2
-.sphero2id
-.sp8h8e8r9o8i8d9a8l.
-.spheroi1d2a
-.sp8h8i8n9g8e8s.
-.sph5ing
-.sph4inge
-.sp8i8c9i9l8y.
-.sp2i1ci
-.spici1ly
-.sp8i8n9o8r8s.
-.spi2n
-.sp4i1no
-.spino4rs2
-.sp8o8k8e8s9w8o8m8a8n.
-.sp2ok
-.spokes4
-.spokes4w2
-.spoke4s1wo2
-.spokeswom1
-.spokeswo1ma
-.spokeswoma2n
-.sp8o8k8e8s9w8o8m8e8n.
-.spokeswo2me
-.spokeswo1men
-.sp8o8r8t8s9c8a8s8t.
-.s1p4or4
-.spor4t1s2
-.sport4sc
-.sports1ca
-.sp8o8r8t8s9c8a8s8t9e8r.
-.sportscast5er
-.sp8o8r9t8i8v8e9l8y.
-.spor1ti
-.spor4t2iv
-.sportiv4e1ly
-.sp8o8r8t8s9w8e8a8r.
-.sport4sw2
-.sportswe2a2r
-.sp8o8r8t8s9w8r8i8t8e8r.
-.sportswri4
-.sportswr2ite
-.sp8o8r8t8s9w8r8i8t8e8r8s.
-.sportswrit5e4r1s2
-.sp8r8i8g8h8t9l8i8e8r.
-.spr2
-.spr2ig
-.sprigh2tl
-.sprightl2ie4
-.sq8u8e8a9m8i8s8h.
-.squ2
-.squeam2is
-.squeamis2h
-.st8a8n8d9a8l8o8n8e.
-.5st4and
-.sta2n
-.stan1d2a
-.standalo2n
-.st8a8r9t8l8i8n8g.
-.st2a2r
-.star2tl
-.st8a8r9t8l8i8n8g9l8y.
-.startlingl2
-.startling1ly
-.st8a9t8i8s9t8i8c8s.
-.statis1t2i
-.statis1tic
-.statisti4c3s2
-.st8e8a8l8t8h9i8l8y.
-.stea4l
-.stea4lt
-.stealth3i
-.steal4th4il2
-.stealthi1ly
-.st8e8e8p8l8e9c8h8a8s8e.
-.s1tee
-.stee4p1
-.stee1p2l2
-.steeple2ch
-.st8e8r8e8o9g8r8a8p8h9i8c.
-.stere1o
-.stereo2g
-.stereo1gr
-.stereo5graph1ic
-.stereogr4aphi
-.st8o9c8h8a8s9t8i8c.
-.s1to
-.sto2ch4
-.stochast2i
-.stochas1tic
-.st8r8a8n8g8e9n8e8s8s.
-.st4r
-.s1tra
-.stran4ge
-.stra2n
-.str2ang
-.strange4n4e
-.stran1gen
-.strange1nes
-.strangen2e2ss
-.st8r8a8p9h8a8n8g8e8r.
-.straph2an4g
-.straphang5er
-.strapha2n
-.st8r8a8t9a9g8e8m.
-.stra2ta
-.st8r8a8t9a9g8e8m8s.
-.stratage4m1s2
-.st8r8e8t8c8h9i9e8r.
-.stre4tc
-.stret4ch
-.stretch2ie4
-.st8r8i8p9t8e8a8s8e.
-.str2ip
-.stri2p1t
-.strip2te
-.st8r8o8n8g9h8o8l8d.
-.stro2n
-.strongho2l2d
-.st8r8o8n8g9e8s8t.
-.st8u9p8i8d9e8r.
-.s1tu
-.stup4id
-.stupi3de
-.st8u9p8i8d9e8s8t.
-.stupide4s2
-.su8b9d8i8f9f8e8r9e8n9t8i8a8l.
-.1su
-.su4b3
-.su4b1d
-.subd1if
-.subdi4f1f
-.subdiffer1
-.subdiffer3en1t
-.subdifferent2i
-.subdifferen1t2i1a
-.subdifferenti2al
-.su8b9e8x9p8r8e8s9s8i8o8n.
-.sub4e
-.sub1ex3p
-.subexpr2
-.subex3pr2e2ss
-.subexpres1si
-.subexpres1s2io
-.subexpres5sio2n
-.su8b9e8x9p8r8e8s9s8i8o8n8s.
-.subexpressio2n3s2
-.su8m9m8a9b8l8e.
-.su2m
-.sum1m
-.sum1ma
-.sum2mab
-.summab2l2
-.su8p8e8r9e8g8o.
-.su1pe
-.supere1go
-.su8p8e8r9e8g8o8s.
-.supere4gos
-.su9p8r8e8m9a9c8i8s8t.
-.supr2
-.supre4mac
-.supre1ma
-.suprem4a2ci
-.su9p8r8e8m9a9c8i8s8t8s.
-.supremacis4t1s2
-.su8r9v8e8i8l9l8a8n8c8e.
-.su2r
-.surv4e
-.survei2
-.surveil1l
-.surveilla2n
-.sw8i8m9m8i8n8g9l8y.
-.sw2
-.swi2
-.swim1m
-.swimm4ingl2
-.swimm5ing1ly
-.sy8m8p9t8o9m8a8t8i8c.
-.sy4m1p
-.sym2p1t
-.symp1to
-.sympto2ma
-.symptomat1ic
-.sy8n9c8h8r8o9m8e8s8h.
-.syn3c4hr4
-.syn2ch
-.synchro2me
-.synchro2mes
-.synchrom4es2h
-.sy8n9c8h8r8o9n8o8u8s.
-.synchro2n
-.synchro1nou2
-.synchrono2us
-.sy8n9c8h8r8o9t8r8o8n.
-.synchrotro2n
-.ta8f8f9r8a8i8l.
-.4ta2f4
-.ta4f1f4
-.taffr2ai2
-.ta8l8k9a9t8i8v8e.
-.ta2l
-.4talk
-.talka3
-.talka4t
-.talka1t2iv
-.ta9p8e8s9t8r8y.
-.tap2est4r
-.tape4stry
-.ta9p8e8s9t8r8i8e8s.
-.tapestr2ie4
-.ta8r9p8a8u9l8i8n.
-.t2a2r
-.tar2p
-.tar1pa
-.tarpau4l2
-.tarpaul2i
-.ta8r9p8a8u9l8i8n8s.
-.tarpaul2i2n1s2
-.te9l8e8g9r8a9p8h8e8r.
-.tele1gr
-.teleg5ra3ph4er
-.te9l8e8g9r8a9p8h8e8r8s.
-.telegraphe4r1s2
-.te8l8e9k8i9n8e8t9i8c.
-.teleki4n
-.telek1i
-.telek2ine
-.teleki3net1ic
-.te8l8e9k8i9n8e8t9i8c8s.
-.telekineti4c3s2
-.te8l8e9r8o9b8o8t9i8c8s.
-.te4l1er
-.tel4ero
-.teler5ob
-.teleroboti4c3s2
-.te8l8l9e8r.
-.tel1l
-.tel2le
-.te8l8l9e8r8s.
-.telle4r1s2
-.te8m9p8o9r8a8r9i8l8y.
-.te4m1p
-.tem1p4or
-.tempo1ra
-.tempo4raril
-.tempor2a2r
-.temporar1i
-.temporari1ly
-.te8n9u8r8e.
-.te8s8t9b8e8d.
-.tes2t1b
-.test4be2d
-.te8x8t9w8i8d8t8h.
-.3tex
-.tex1t2
-.textw4
-.textwi2
-.textw2id
-.textwid2th
-.th8a8l9a9m8u8s.
-.tha3la
-.thala3m
-.thala1mu
-.thalam2us
-.th8e8r9m8o9e8l8a8s9t8i8c.
-.th2e
-.ther3m4
-.ther1mo
-.thermo4el
-.thermoe1la
-.thermoelast2i
-.thermoelas1tic
-.ti8m8e9s8t8a8m8p.
-.ti2mes
-.times1ta
-.timesta4m1p
-.ti8m8e9s8t8a8m8p8s.
-.timestam2p1s2
-.to8o8l9k8i8t.
-.too2
-.toolk1i
-.to8o8l9k8i8t8s.
-.toolki4t1s2
-.to8p8o9g8r8a8p8h9i9c8a8l.
-.to5po4g
-.topo1gr
-.topo5graph1ic
-.topogr4aphi
-.topographi1ca
-.to8q8u8e8s.
-.to1q
-.toqu2
-.tr8a8i9t8o8r9o8u8s.
-.1tra
-.tr2ai2
-.trai1to
-.traitorou2
-.traitoro2us
-.tr8a8n8s9c8e8i8v8e8r.
-.tra2n
-.tra2n1s2
-.trans4c
-.tran4s3cei2
-.transce2iv
-.tr8a8n8s9c8e8i8v8e8r8s.
-.transceive4r1s2
-.tr8a8n8s9g8r8e8s8s.
-.tran2s3g
-.trans1gr
-.transgr2e2ss
-.tr8a8n8s9v8e8r9s8a8l.
-.tran4sv
-.transve4r1s2
-.transver1sa2
-.tr8a8n8s9v8e8r9s8a8l8s.
-.transversa2l1s2
-.tr8a8n8s9v8e8s9t8i8t8e.
-.transv4e2s
-.transvest2i
-.transvest2ite
-.tr8a8n8s9v8e8s9t8i8t8e8s.
-.transvestit4es
-.tr8a9v8e8r8s9a9b8l8e.
-.trave4r1s2
-.traver1sa2
-.traver2s1ab
-.traversab2l2
-.tr8a9v8e8r9s8a8l.
-.tr8a9v8e8r9s8a8l8s.
-.traversa2l1s2
-.tr8i9e8t8h8y8l9a8m8i8n8e.
-.tri5et
-.tr2ie4
-.triethy3la
-.triethylam1in
-.triethylam2ine
-.tr8e8a8c8h9e8r8i8e8s.
-.trea2ch
-.treache2
-.treacher1i
-.treacher2ie4
-.tr8o8u9b8a9d8o8u8r.
-.trou2
-.trouba2d
-.trouba1do
-.troubadou2
-.tu8r9k8e8y.
-.1tu
-.tu8r9k8e8y8s.
-.turkeys4
-.tu8r8n9a8r8o8u8n8d.
-.tur4n2a2r
-.tur1na
-.turnarou2
-.turnaroun2d
-.tu8r8n9a8r8o8u8n8d8s.
-.turnaroun2d1s2
-.ty8p9a8l.
-.1ty
-.ty1pa
-.typ4al
-.un9a8t9t8a8c8h8e8d.
-.un2at4
-.una4t3t2
-.unat1ta
-.unatta2ch
-.unattache2
-.unatta4ch4ed
-.un9e8r8r9i8n8g9l8y.
-.un4er
-.uner4r4
-.unerrin4g
-.unerringl2
-.unerring1ly
-.un9f8r8i8e8n8d9l8y.
-.un3f
-.unfri2
-.unfr2ie4
-.unfrien2d1ly
-.un9f8r8i8e8n8d9l8i9e8r.
-.unfriendl2ie4
-.va8g8u8e8r.
-.1va
-.vag4
-.va5guer
-.va2gue
-.va8u8d8e9v8i8l8l8e.
-.vaude1v4
-.vaude2v3i4l
-.vaude1vi
-.vaudevil1l
-.vaudevil2le
-.vi8c9a8r8s.
-.v4ic2a2r
-.vi1ca
-.vica4rs2
-.vi8l9l8a8i8n9e8s8s.
-.2vil
-.vil1l
-.villai2
-.villa4i4n
-.villa2ine
-.villai5n2e2ss
-.villai1nes
-.vi8s9u8a8l.
-.vi3su
-.visu1al
-.vi8s9u8a8l9l8y.
-.visual1l
-.visual1ly
-.vi9v8i8p9a9r8o8u8s.
-.3v2iv
-.viv2i4p
-.vivi1pa
-.vivip2a2r
-.viviparou2
-.viviparo2us
-.vo8i8c8e9p8r8i8n8t.
-.voi4
-.voi3cep
-.voicepr2
-.voiceprin4t3
-.vs8p8a8c8e.
-.v2s1pa
-.vspa4ce
-.wa8d9d8i8n8g.
-.wa2d
-.wad4d1in
-.wad1d4
-.wa8l8l9f8l8o8w8e8r.
-.wal1l
-.wal2lf
-.wallf4l2
-.wallflow1er
-.wa8l8l9f8l8o8w9e8r8s.
-.wallflowe4r1s2
-.wa8r8m9e8s8t.
-.w2a2r
-.war1m
-.war2me
-.war2mes
-.wa8s8t8e9w8a8t8e8r.
-.was4t
-.waste2w
-.waste1w5a
-.wastewa1te
-.wa8v8e9g8u8i8d8e.
-.waveg3
-.waveg2ui2
-.wavegu2id
-.wa8v8e9g8u8i8d8e8s.
-.waveguide4s2
-.wa8v8e9l8e8t.
-.wa8v8e9l8e8t8s.
-.wavele4t1s2
-.we8b9l8i8k8e.
-.w2e1b
-.web2l2
-.web3l4ik
-.we8e8k9n8i8g8h8t.
-.weekn2ig
-.we8e8k9n8i8g8h8t8s.
-.weeknigh4t1s2
-.wh8e8e8l9c8h8a8i8r.
-.whee4l1c2
-.wheel2ch
-.wheelchai2
-.wheelcha4ir
-.wh8e8e8l9c8h8a8i8r8s.
-.wheelchai4rs2
-.wh8i8c8h9e8v8e8r.
-.whi4
-.wh4i2ch
-.whiche2
-.whichev1er
-.wh8i8t8e9s8i8d8e8d.
-.wh2ite
-.whit4es
-.white1si
-.white2s2id
-.whitesi2d1ed
-.wh8i8t8e9s8p8a8c8e.
-.white1sp
-.white2s1pa
-.whitespa4ce
-.wh8i8t8e9s8p8a8c8e8s.
-.wi8d8e9s8p8r8e8a8d.
-.w2id
-.wide4s2
-.wide1sp
-.wides4pre
-.widespr2
-.widesprea2d1
-.wi8n8g9s8p8a8n.
-.win4g
-.wings2
-.wing2s1pa
-.wingspa4n
-.wi8n8g9s8p8a8n8s.
-.wingspa2n1s2
-.wi8n8g9s8p8r8e8a8d.
-.wingspr2
-.wingsprea2d1
-.wi8t8c8h9c8r8a8f8t.
-.wi4tc
-.wit4ch
-.witchcra2f4t
-.witchcra2f
-.wo8r8d9s8p8a8c9i8n8g.
-.1wo2
-.wor2d1s2
-.words4p
-.word2s1pa
-.wordsp4a2ci
-.wordspa2c1in
-.wordspac1ing
-.wo8r8k9a8r8o8u8n8d.
-.work2a2r
-.workarou2
-.workaroun2d
-.wo8r8k9a8r8o8u8n8d8s.
-.workaroun2d1s2
-.wo8r8k9h8o8r8s8e.
-.workh4
-.workhor4se
-.workho4rs2
-.wo8r8k9h8o8r8s8e8s.
-.workhors3e4s
-.wr8a8p9a8r8o8u8n8d.
-.wra4
-.wrap2a2r4
-.wra1pa
-.wraparou2
-.wraparoun2d
-.wr8e8t8c8h9e8d.
-.wre4tc
-.wret4ch
-.wretche2
-.wret4ch4ed
-.wr8e8t8c8h9e8d9l8y.
-.wretche2d1ly
-.ye8s9t8e8r9y8e8a8r.
-.yes4
-.yesterye2a2r
-.al9g8e9b8r8a8i9s8c8h8e.
-.algebra2is1c
-.algebrais3ch2
-.algebraische2
-.al9l8e9g8h8e9n8y.
-.al1l
-.al2le
-.al3leg
-.alleghe2n
-.ar9k8a8n9s8a8s.
-.arka2n
-.arkan2sa2
-.arka2n1s2
-.at8p9a8s8e.
-.a4t1p
-.at1pa
-.at8p9a8s8e8s.
-.atpas1e4s
-.au8s9t8r8a8l9a8s8i8a8n.
-.a2us
-.aus1t4r
-.aus1tra
-.australas2i1a
-.australasi2a2n
-.au8t8o9m8a8t8i9s8i8e8r9t8e8r.
-.automa3tis
-.automatis2ie4
-.automatisiert3er
-.be9d8i8e9n8u8n8g.
-.4be2d
-.b4e3di
-.be5di3en
-.bed2ie4
-.bedie3nu4n
-.be8m8b8o.
-.4be5m
-.be4m5b
-.bi8b9l8i9o9g8r8a9p8h8i9s8c8h8e.
-.bibliogr4aphi
-.bibliograph2is1c
-.bibliographis3ch2
-.bibliographische2
-.bo8s9t8o8n.
-.5bos4
-.bos1to
-.bosto2n
-.br8o8w8n9i8a8n.
-.brown5i
-.brow3n4i1a
-.browni3a2n
-.br8u8n8s9w8i8c8k.
-.bru2n
-.bru2n3s4
-.brun4sw2
-.brunswi2
-.brunswick1
-.bu9d8a9p8e8s8t.
-.bu1d2a
-.ca8r9i8b9b8e8a8n.
-.car1i
-.car4ib
-.cari2b1b
-.carib2be
-.caribbea2n
-.ch8a8r8l8e8s9t8o8n.
-.char4le4
-.char1l
-.charles2
-.charl4es2to
-.charle3sto2n
-.ch8a8r9l8o8t8t8e8s9v8i8l8l8e.
-.char3lo4
-.charlo4t3t2
-.charlot4tes
-.charlotte4sv
-.charlottes2vil
-.charlottesvil1l
-.charlottesvil2le
-.co9l8u8m9b8i8a.
-.colum4bi
-.colu4m1b
-.columb2i1a
-.cz8e8c8h8o9s8l8o9v8a9k8i8a.
-.c2ze4
-.cze2ch
-.cze3cho2
-.czechos4l2
-.czechos4lov
-.czechoslo1va
-.czechoslovak1i
-.czechoslovak2i1a
-.de8l9a9w8a8r8e.
-.de1la
-.de4law
-.delaw2a2r
-.di8j8k9s8t8r8a.
-.di3j
-.dij4k1s2
-.dijkst4r
-.dijks1tra
-.du8a8n8e.
-.d1u1a
-.dua2n
-.dy9n8a9m8i9s8c8h8e.
-.5dyn
-.dy1na
-.dynam2is
-.dynam2is1c
-.dynamis3ch2
-.dynamische2
-.en8g9l8i8s8h.
-.engl2
-.englis2h
-.eu8l8e8r9i8a8n.
-.eul4e
-.eu3l4er1i
-.eule1r2i3a4
-.euleri2a2n
-.ev8a8n9s8t8o8n.
-.e1va
-.eva2n
-.evan4st
-.eva2n1s2
-.evans1to
-.evansto2n
-.fe8b9r8u9a8r8y.
-.f2e4b
-.fe3br
-.febru3a
-.febru2a2r
-.fe8s8t9s8c8h8r8i8f8t.
-.fes4t1s2
-.fest4sc
-.fests2ch2
-.festsc4hr4
-.festschr4i2ft
-.fl8o8r9i9d8a.
-.flor2id
-.flori1d2a
-.fl8o8r9i9d9i8a8n.
-.flori2di
-.florid5i2a2n
-.flori1d4i3a
-.fo8r9s8c8h8u8n8g8s9i8n9s8t8i9t8u8t.
-.fors4c
-.fors2ch2
-.forschungs2
-.forschung2s1in
-.forschungs2i2n1s2
-.forschungsinst2i
-.forschungsinsti1tu
-.fr8e8e9b8s8d.
-.fre2e1b
-.free2b5s2
-.freeb4s5d
-.fu8n8k9t8s8i8o8n8a8l.
-.3fu
-.fu4nk2
-.funk5t
-.funk4t1s2
-.funkt1s2io
-.funkt5sio2n
-.funktsio1n5a
-.ga8u8s8s9i8a8n.
-.ga2us
-.gau2ss
-.gaus1si
-.gauss2i1a
-.gaussi2a2n
-.gh8o8s8t9s8c8r8i8p8t.
-.ghos4t1s2
-.ghost4sc
-.ghostscri2
-.ghostscr2ip
-.ghostscri2p1t
-.gh8o8s8t9v8i8e8w.
-.ghos4tv
-.ghostv2ie4
-.gr8a8s8s9m8a8n8n9i8a8n.
-.gr2as
-.gra2ss
-.gras2s1m
-.grass3ma
-.grassma2n3
-.grassma4n1n2
-.grassman3n4i1a
-.grassma2nni3a2n
-.gr8e8i8f8s9w8a8l8d.
-.grei2
-.grei2f3s
-.greifsw2
-.greifswa2ld
-.gr8o8t8h8e8n9d8i8e8c8k.
-.g4ro
-.gro4th2e
-.gr4oth
-.grothe2n
-.grothend2ie4
-.grothendieck1
-.gr8u8n8d9l8e8h9r8e8n.
-.gru2n
-.grundle1h4
-.grundle4hr4
-.ha9d8a9m8a8r8d.
-.ha2d
-.ha1d2a
-.hada2m2
-.had4a1ma
-.hadam2a2r
-.ha8i9f8a.
-.hai1fa
-.ha8m8i8l9t8o8n9i8a8n.
-.ha4m
-.hami4lt
-.hamil1to
-.hamilto2n
-.hamilto3n4i1a
-.hamiltoni3a2n
-.he8l9s8i8n8k8i.
-.he2l1s2
-.hel2s1in
-.hels4i4nk2
-.helsink1i
-.he8r9m8i8t9i8a8n.
-.her3mit
-.hermi1ti
-.herm4i1t2i1a
-.hermiti2a2n
-.hi8b8b8s.
-.hi2b1b
-.hib2b5s2
-.ho8k9k8a8i9d8o.
-.h2ok
-.hokk4
-.hokkai2
-.hokka2id
-.hokkai1do
-.ja8c9k8o8w9s8k8i.
-.5ja
-.jack1
-.jackowsk2
-.jackowsk1i
-.ja8n9u9a8r8y.
-.ja2n
-.jan3u1a
-.janu2a2r
-.ja9p8a9n8e8s8e.
-.ja4p
-.ja1pa
-.japa2n
-.japa1nes
-.japane1s2e
-.ka8d9o8m9t8s8e8v.
-.ka2d
-.ka1do
-.kado4mt
-.kadom4t1s2
-.kadomt5sev
-.ka8n9s8a8s.
-.ka2n
-.kan2sa2
-.ka2n1s2
-.ka8r8l8s9r8u8h8e.
-.k2a2r
-.kar1l
-.kar2l1s2
-.karls1r
-.ko8r9t8e9w8e8g.
-.ko5r
-.kr8i8s8h8n8a.
-.kr2is
-.kr3is2h
-.kris2h1n
-.krish1na
-.kr8i8s8h9n8a9i8s8m.
-.krishnai2
-.krishnai2s1m
-.kr8i8s8h9n8a8n.
-.krishn2a2n
-.la8n9c8a8s9t8e8r.
-.lan1ca
-.lancast5er
-.le9g8e8n8d8r8e.
-.le1gen
-.legen1dr
-.legendre4
-.le8i8c8e8s9t8e8r.
-.lei2
-.le5ic
-.leices5t
-.li8p9s8c8h8i8t8z.
-.l2ip
-.li2p1s2
-.lips2ch2
-.lips3chit
-.lipschi4tz
-.li8p9s8c8h8i8t8z9i8a8n.
-.lipschit2z1i
-.lipschitz2i1a
-.lipschitzi2a2n
-.lo8j9b8a8n.
-.lo5j
-.lojba2n
-.lo8u9i9s8i9a8n8a.
-.lou2
-.lo2ui2
-.louis2i1a
-.louisi2a2n
-.louisia1na
-.ma8c9o8s.
-.ma1co
-.ma8n9c8h8e8s9t8e8r.
-.man2ch
-.manche2
-.manch1es
-.ma8r9k8o8v9i8a8n.
-.marko5vi2a2n
-.markov2i1a
-.ma8r8k8t9o8b8e8r9d8o8r8f.
-.mark5t
-.mark1to
-.markto3b
-.marktober1do
-.marktoberd4or
-.marktoberdor1f
-.ma8s8s9a9c8h8u9s8e8t8t8s.
-.ma2ss
-.mas1sa2
-.massa2ch
-.massach2us
-.massachuse4t3t2
-.massachuset4t1s2
-.ma8x9w8e8l8l.
-.maxwel4l
-.mi9c8r8o9s8o8f8t.
-.micro2so
-.microso2ft3
-.mi8n9n8e9a8p9o9l8i8s.
-.m2i4n1n2
-.minne4
-.minneapol2i
-.mi8n9n8e9s8o8t8a.
-.min1nes
-.minne1so
-.minneso1ta
-.mo8s9c8o8w.
-.mos2c
-.mos1co
-.na8c8h9r8i8c8h8t8e8n.
-.1na
-.na2ch
-.nac4hr4
-.na2chr4i2ch
-.nachricht1en
-.na8s8h9v8i8l8l8e.
-.n4as
-.nas2h
-.nash2vil
-.nashvil1l
-.nashvil2le
-.ne8t9b8s8d.
-.ne2t1b
-.net2b5s2
-.netb4s5d
-.ne8t9s8c8a8p8e.
-.ne4t1s2
-.net4sc
-.netsca4p
-.nets1ca
-.ni8j9m8e9g8e8n.
-.ni3j
-.nijme2g
-.nijme1gen
-.no8e9t8h8e8r9i8a8n.
-.3noe
-.noeth2e
-.noether1i
-.noethe1r2i3a4
-.noetheri2a2n
-.no8o8r8d9w8i8j8k8e8r9h8o8u8t.
-.noo2
-.no3ord
-.noord1w
-.noordwi2
-.noordwi3j
-.noordwijk1er
-.noordwijker1h4
-.noordwijkerhou2
-.no9v8e8m9b8e8r.
-.nove4m5b
-.op8e8n9b8s8d.
-.ope4n1b4
-.open2b5s2
-.openb4s5d
-.op8e8n9o8f8f8i8c8e.
-.op4eno
-.openo4f1f
-.openof1fi
-.pa8l8a9t8i8n8o.
-.pala2t1in
-.palat2i1no
-.pa9l8e8r9m8o.
-.paler3m4
-.paler1mo
-.pe9t8r8o8v9s8k8i.
-.petro3v
-.petrovsk2
-.petrovsk1i
-.pf8a8f8f9i8a8n.
-.4pf
-.p1fa
-.pfa2f
-.pfa4f1f4
-.pfaf1fi
-.pfaff2i3a
-.pfaffi2a2n
-.ph8i8l9a9d8e8l9p8h8i8a.
-.phi4l4ade
-.phila2d
-.philade2lp
-.philadel5phi
-.philadelph2i1a
-.ph8i8l9o9s8o8p8h9i9s8c8h8e.
-.philo2so
-.philos4op
-.philos2oph
-.philosoph2is1c
-.philosophis3ch2
-.philosophische2
-.po8i8n9c8a8r8e.
-.poin2
-.poi2
-.poinc2a2r5
-.poin1ca
-.po9t8e8n9t8i8a8l9g8l8e8i9c8h8u8n8g.
-.p4ot
-.po1ten1t
-.potent2i
-.poten1t2i1a
-.potenti2al
-.potentia4l1g4
-.potentialgl2
-.potential1gle
-.potentialglei2
-.potentialgle5ic
-.potentialgle4i2ch
-.ra9d8h8a9k8r8i8s8h9n8a8n.
-.rad1h2
-.radhakr2is
-.radhakr3is2h
-.radhakris2h1n
-.radhakrish1na
-.radhakrishn2a2n
-.ra8t8h8s9k8e8l9l8e8r.
-.r4ath
-.ra2t4h1s2
-.rathsk2
-.rath4ske
-.rathskel1l
-.rathskel2le
-.ri8e9m8a8n8n9i8a8n.
-.r2ie4
-.rie5ma2n
-.rie1ma
-.riema4n1n2
-.rieman3n4i1a
-.riema2nni3a2n
-.ry8d9b8e8r8g.
-.ry1d
-.ryd1b
-.rydberg2
-.sc8h8o8t9t8i8s8c8h8e.
-.scho4t3t2
-.schott2is1c
-.s2ch2ottis3ch2
-.schottische2
-.sc8h8r8o9d8i8n8g9e8r.
-.sc4hr4
-.schrod1in
-.schrod4inge
-.sc8h8w8a9b8a9c8h8e8r.
-.sch1w
-.schwaba2ch
-.schwabache2
-.sc8h8w8a8r8z9s8c8h8i8l8d.
-.schw2a2r
-.s2chwarzs2ch2
-.schwarzsch4il2
-.schwarzschi2ld
-.se8p9t8e8m9b8e8r.
-.se2p1t
-.sep2te
-.septe4m5b
-.st8o8k8e8s9s8c8h8e.
-.st2ok
-.stokes4
-.stok2e2ss
-.stokes2s5c
-.stokess2ch2
-.stokessche2
-.st8u8t8t9g8a8r8t.
-.stu4t3t2
-.stut4t1g
-.stutt1ga
-.stuttg2a2r
-.su8s9q8u8e9h8a8n9n8a.
-.s2us
-.susqu2
-.susque1h4
-.susqueha2n
-.susqueha4n1n2
-.susquehan1na
-.ta8u9b8e8r9i8a8n.
-.tau4b
-.taub4e
-.tau3ber
-.tauber1i
-.taube1r2i3a4
-.tauberi2a2n
-.te8c8h9n8i9s8c8h8e.
-.te2ch
-.tec2h1n
-.techn2is1c
-.te2chnis3ch2
-.technische2
-.te8n9n8e8s9s8e8e.
-.t4e4n1n2
-.tenne4
-.ten1nes
-.tenn2e2ss
-.to9m8a9s8z8e8w9s8k8i.
-.to2ma
-.tomas2ze
-.tomaszewsk2
-.tomaszewsk1i
-.ty9p8o9g8r8a8p8h8i8q8u8e.
-.ty3po
-.ty5po4g
-.typo1gr
-.typogr4aphi
-.typographiqu2
-.uk8r8a8i8n9i8a8n.
-.4uk
-.ukr2ai2
-.ukra4i4n
-.ukra2ini
-.ukrai4n4i1a
-.ukraini3a2n
-.ve8r9a8l8l9g8e9m8e8i8n9e8r8t8e.
-.veral1l
-.veral4l1g4
-.verallge1me
-.verallgemei2
-.verallgeme2ine
-.verallgemein1er
-.ve8r9e8i8n9i9g8u8n8g.
-.vere3in
-.verei2
-.vere2ini
-.verein2ig
-.vereini3gun
-.ve8r9t8e8i9l8u8n9g8e8n.
-.vertei2
-.verteilun1gen
-.vi8i8i8t8h.
-.v4i5i4
-.vi4i5i4
-.vii2ith
-.vi8i8t8h.
-.vi2ith
-.wa8h8r9s8c8h8e8i8n9l8i8c8h9k8e8i8t8s9t8h8e8o9r8i8e.
-.wa4hr4
-.wah4rs2
-.wahrs4c
-.wahrs2ch2
-.wahrsche2
-.wahrschei2
-.wahrsche4i4n1l
-.wahrs2cheinl4i2ch
-.wahrscheinlic4hk
-.wahrscheinlichkei2
-.wahrscheinlichkei4t1s2
-.wahrscheinlichkeits3th2e
-.wahrscheinlichkeitsthe1o5r
-.wahrscheinlichkeitstheor2ie4
-.we8r9n8e8r.
-.w1er
-.wer4n1er
-.we8r9t8h8e8r9i8a8n.
-.werth2e
-.werther1i
-.werthe1r2i3a4
-.wertheri2a2n
-.wi8n9c8h8e8s9t8e8r.
-.win2ch
-.winche2
-.winch1es
-.wi8r8t9s8c8h8a8f8t.
-.w4ir4
-.wir4t1s2
-.wirt4sc
-.wirts2ch2
-.wirtscha2f
-.wirtscha2ft
-.wi8s9s8e8n9s8c8h8a8f8t9l8i8c8h.
-.w4i2s1s
-.wissen4
-.wisse2n1s2
-.wissens4c
-.wissens2ch2
-.wissenscha2f
-.wissenscha2ft
-.wissenschaf2tl
-.wissens2chaftl4i2ch
-.xv8i8i8i8t8h.
-.xv4i5i4
-.xvi4i5i4
-.xvii2ith
-.xv8i8i8t8h.
-.xvi2ith
-.xx8i8i8i8r8d.
-.xx4
-.xx3i
-.xx4i5i4
-.xxi4i5i4
-.xxii4ir
-.xx8i8i8n8d.
-.xxi4ind
-.yi8n8g9y8o8n8g.
-.y1i
-.yin2gy
-.yingy1o4
-.yingyo2n
-.sh8u9x8u8e.
-.shux1u3
-.ji9s8u8a8n.
-.ji2su
-.jisua2n
-.ze8a9l8a8n8d.
-.2ze
-.zea4l
-.zea3l4and
-.zeala2n
-.ze8i8t9s8c8h8r8i8f8t.
-.zei2
-.zei4t1s2
-.zeit4sc
-.zeits2ch2
-.zeitsc4hr4
-.zeitschr4i2ft
diff --git a/core/res/assets/webkit/incognito_mode_start_page.html b/core/res/assets/webkit/incognito_mode_start_page.html
deleted file mode 100644
index 5d7a3fbf98c0..000000000000
--- a/core/res/assets/webkit/incognito_mode_start_page.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<html>
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>
- <title>New incognito window</title>
- </head>
- <body>
- <p><strong>You've gone incognito</strong>. Pages you view in this window
- won't appear in your browser history or search history, and they won't
- leave other traces, like cookies, on your device after you close the
- incognito window. Any files you download or bookmarks you create will be
- preserved, however.</p>
-
- <p><strong>Going incognito doesn't affect the behavior of other people,
- servers, or software. Be wary of:</strong></p>
-
- <ul>
- <li>Websites that collect or share information about you</li>
- <li>Internet service providers or employers that track the pages you visit</li>
- <li>Malicious software that tracks your keystrokes in exchange for free smileys</li>
- <li>Surveillance by secret agents</li>
- <li>People standing behind you</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/assets/webkit/missingImage.png b/core/res/assets/webkit/missingImage.png
deleted file mode 100644
index f49a98d59d2d..000000000000
--- a/core/res/assets/webkit/missingImage.png
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/webkit/nullPlugin.png b/core/res/assets/webkit/nullPlugin.png
deleted file mode 100644
index 96a52e3c2cc6..000000000000
--- a/core/res/assets/webkit/nullPlugin.png
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/webkit/play.png b/core/res/assets/webkit/play.png
deleted file mode 100644
index 26fe2864d7c3..000000000000
--- a/core/res/assets/webkit/play.png
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/webkit/textAreaResizeCorner.png b/core/res/assets/webkit/textAreaResizeCorner.png
deleted file mode 100644
index 777eff01a0a0..000000000000
--- a/core/res/assets/webkit/textAreaResizeCorner.png
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/webkit/togglePlugin.png b/core/res/assets/webkit/togglePlugin.png
deleted file mode 100644
index 008333c66e60..000000000000
--- a/core/res/assets/webkit/togglePlugin.png
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/webkit/youtube.html b/core/res/assets/webkit/youtube.html
deleted file mode 100644
index 8e103c1655e1..000000000000
--- a/core/res/assets/webkit/youtube.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<html>
- <head>
- <style type="text/css">
- body { background-color: black; }
- a:hover { text-decoration: none; }
- a:link { color: black; }
- a:visited { color: black; }
- #main {
- position: absolute;
- left: 0%;
- top: 0%;
- width: 100%;
- height: 100%;
- padding: 0%;
- z-index: 10;
- background-size: 100%;
- background: no-repeat;
- background-position: center;
- }
- #play {
- position: absolute;
- left: 50%;
- top: 50%;
- }
- #logo {
- position: absolute;
- bottom: 0;
- right: 0;
- }
- </style>
- </head>
- <body id="body">
- <script type="text/javascript">
- function setup() {
- var width = document.body.clientWidth;
- var height = document.body.clientHeight;
- var mainElement = document.getElementById("main");
- var playElement = document.getElementById("play");
- var loadcount = 0;
- var POSTER = "http://img.youtube.com/vi/VIDEO_ID/0.jpg";
-
- function doload() {
- if (++loadcount == 2) {
- // Resize the element to the right size
- mainElement.width = width;
- mainElement.height = height;
- mainElement.style.backgroundImage = "url('" + POSTER + "')";
- // Center the play button
- playElement.style.marginTop = "-" + play.height/2 + "px";
- playElement.style.marginLeft = "-" + play.width/2 + "px";
- playElement.addEventListener("click", function(e) {
- top.location.href = "vnd.youtube:VIDEO_ID";
- }, false);
- }
- }
- var background = new Image();
- background.onload = doload;
- background.src = POSTER;
- play = new Image();
- play.onload = doload;
- play.src = "play.png";
- }
-
- window.onload = setup;
- </script>
- <div id="main">
- <img src="play.png" id="play"></img>
- <img src="youtube.png" id="logo"></img>
- </div>
- </body>
-</html>
diff --git a/core/res/assets/webkit/youtube.png b/core/res/assets/webkit/youtube.png
deleted file mode 100644
index 87779b113dd0..000000000000
--- a/core/res/assets/webkit/youtube.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/anim-watch/progress_indeterminate_material.xml b/core/res/res/anim-watch/progress_indeterminate_material.xml
new file mode 100644
index 000000000000..8f00d6c4cb66
--- /dev/null
+++ b/core/res/res/anim-watch/progress_indeterminate_material.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android" >
+ <objectAnimator
+ android:duration="3333"
+ android:interpolator="@interpolator/trim_start_interpolator"
+ android:propertyName="trimPathStart"
+ android:repeatCount="-1"
+ android:valueFrom="0"
+ android:valueTo="0.75"
+ android:valueType="floatType" />
+ <objectAnimator
+ android:duration="3333"
+ android:interpolator="@interpolator/trim_end_interpolator"
+ android:propertyName="trimPathEnd"
+ android:repeatCount="-1"
+ android:valueFrom="0"
+ android:valueTo="0.75"
+ android:valueType="floatType" />
+ <objectAnimator
+ android:duration="3333"
+ android:interpolator="@interpolator/trim_offset_interpolator"
+ android:propertyName="trimPathOffset"
+ android:repeatCount="-1"
+ android:valueFrom="0"
+ android:valueTo="0.25"
+ android:valueType="floatType" />
+</set>
diff --git a/core/res/res/anim-watch/progress_indeterminate_rotation_material.xml b/core/res/res/anim-watch/progress_indeterminate_rotation_material.xml
new file mode 100644
index 000000000000..63e66ec24410
--- /dev/null
+++ b/core/res/res/anim-watch/progress_indeterminate_rotation_material.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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.
+-->
+<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@interpolator/progress_indeterminate_rotation_interpolator"
+ android:duration="16666"
+ android:propertyName="rotation"
+ android:repeatCount="-1"
+ android:valueFrom="0"
+ android:valueTo="720"
+ android:valueType="floatType" />
diff --git a/core/res/res/anim/watch_switch_thumb_to_off_animation.xml b/core/res/res/anim/watch_switch_thumb_to_off_animation.xml
deleted file mode 100644
index cd02e0db2fd5..000000000000
--- a/core/res/res/anim/watch_switch_thumb_to_off_animation.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2016 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.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:ordering="sequentially">
- <objectAnimator
- android:duration="33"
- android:interpolator="@android:interpolator/linear"
- android:propertyName="pathData"
- android:valueFrom="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueTo="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueType="pathType" />
- <objectAnimator
- android:duration="66"
- android:interpolator="@android:interpolator/linear"
- android:propertyName="pathData"
- android:valueFrom="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueTo="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueType="pathType" />
- <objectAnimator
- android:duration="66"
- android:interpolator="@android:interpolator/linear"
- android:propertyName="pathData"
- android:valueFrom="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueTo="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueType="pathType" />
-</set>
diff --git a/core/res/res/anim/watch_switch_thumb_to_on_animation.xml b/core/res/res/anim/watch_switch_thumb_to_on_animation.xml
deleted file mode 100644
index e64421776605..000000000000
--- a/core/res/res/anim/watch_switch_thumb_to_on_animation.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:ordering="sequentially">
- <objectAnimator
- android:duration="33"
- android:interpolator="@android:interpolator/linear"
- android:propertyName="pathData"
- android:valueFrom="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueTo="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueType="pathType" />
- <objectAnimator
- android:duration="66"
- android:interpolator="@android:interpolator/linear"
- android:propertyName="pathData"
- android:valueFrom="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueTo="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueType="pathType" />
- <objectAnimator
- android:duration="66"
- android:interpolator="@android:interpolator/linear"
- android:propertyName="pathData"
- android:valueFrom="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueTo="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueType="pathType" />
-</set>
diff --git a/core/res/res/color/watch_switch_thumb_color_material.xml b/core/res/res/color/watch_switch_thumb_color_material.xml
index d4796a032631..f78d9b62a509 100644
--- a/core/res/res/color/watch_switch_thumb_color_material.xml
+++ b/core/res/res/color/watch_switch_thumb_color_material.xml
@@ -10,9 +10,9 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="?android:colorButtonNormal" android:state_enabled="false" />
- <item android:color="?android:colorControlActivated" android:state_checked="true" />
- <item android:color="?android:colorButtonNormal" />
-</selector> \ No newline at end of file
+ <item android:color="?attr/colorButtonNormal" android:alpha="?attr/disabledAlpha"
+ android:state_enabled="false" />
+ <item android:color="?attr/colorControlActivated" android:state_checked="true" />
+ <item android:color="?attr/colorButtonNormal" />
+</selector>
diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_14w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_14w.png
new file mode 100644
index 000000000000..371469c43b13
--- /dev/null
+++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_14w.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_15w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_15w.png
new file mode 100644
index 000000000000..e47726058e3e
--- /dev/null
+++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_15w.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_16w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_16w.png
new file mode 100644
index 000000000000..19a1bd317799
--- /dev/null
+++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_16w.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_17w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_17w.png
new file mode 100644
index 000000000000..79dc7332b60d
--- /dev/null
+++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_17w.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_18w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_18w.png
new file mode 100644
index 000000000000..6d921c0709b8
--- /dev/null
+++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_18w.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/watch_switch_track_mtrl_alpha.png b/core/res/res/drawable-hdpi/watch_switch_track_mtrl_alpha.png
new file mode 100644
index 000000000000..ecee3e137ef6
--- /dev/null
+++ b/core/res/res/drawable-hdpi/watch_switch_track_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/default_wallpaper.png b/core/res/res/drawable-nodpi/default_wallpaper.png
index ce546f0a11e7..d60ef83a86e3 100644
--- a/core/res/res/drawable-nodpi/default_wallpaper.png
+++ b/core/res/res/drawable-nodpi/default_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-hdpi/unlock_wave.png b/core/res/res/drawable-sw600dp-hdpi/unlock_wave.png
index d259499312c5..64e3cf89c121 100644
--- a/core/res/res/drawable-sw600dp-hdpi/unlock_wave.png
+++ b/core/res/res/drawable-sw600dp-hdpi/unlock_wave.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-mdpi/unlock_wave.png b/core/res/res/drawable-sw600dp-mdpi/unlock_wave.png
index 9e3849908eb5..719366eb147d 100644
--- a/core/res/res/drawable-sw600dp-mdpi/unlock_wave.png
+++ b/core/res/res/drawable-sw600dp-mdpi/unlock_wave.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png b/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png
index af8e2512385a..7b7e940d1063 100644
--- a/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png
+++ b/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-xhdpi/unlock_wave.png b/core/res/res/drawable-sw600dp-xhdpi/unlock_wave.png
index 035bd9255c03..93916cdbb058 100644
--- a/core/res/res/drawable-sw600dp-xhdpi/unlock_wave.png
+++ b/core/res/res/drawable-sw600dp-xhdpi/unlock_wave.png
Binary files differ
diff --git a/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png b/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png
index cb00d82a826f..68e63312cfa8 100644
--- a/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png
+++ b/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-watch/ic_input_extract_action_done.xml b/core/res/res/drawable-watch/ic_input_extract_action_done.xml
new file mode 100644
index 000000000000..a04b944f391f
--- /dev/null
+++ b/core/res/res/drawable-watch/ic_input_extract_action_done.xml
@@ -0,0 +1,19 @@
+<!--
+ Copyright (C) 2016 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.
+-->
+<vector android:height="22dp" android:viewportHeight="22.0"
+ android:viewportWidth="22.0" android:width="22dp" xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="#FFFFFF" android:pathData="M9.25,14.82L5.43,11l-1.3,1.3 5.12,5.12 11,-11 -1.3,-1.3 -9.7,9.7z"/>
+</vector>
diff --git a/core/res/res/drawable-watch/ic_input_extract_action_send.xml b/core/res/res/drawable-watch/ic_input_extract_action_send.xml
new file mode 100644
index 000000000000..3689172f72ab
--- /dev/null
+++ b/core/res/res/drawable-watch/ic_input_extract_action_send.xml
@@ -0,0 +1,24 @@
+<!--
+ Copyright (C) 2016 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="22dp"
+ android:height="22dp"
+ android:viewportWidth="22.0"
+ android:viewportHeight="22.0">
+ <path
+ android:pathData="M2.77,19.32L22,11.07 2.78,2.82v6.42l13.74,1.83L2.77,12.9v6.42z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_14w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_14w.png
new file mode 100644
index 000000000000..7f7ca1416b76
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_14w.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_15w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_15w.png
new file mode 100644
index 000000000000..52120b8bef02
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_15w.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_16w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_16w.png
new file mode 100644
index 000000000000..d6e9be9e5daf
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_16w.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_17w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_17w.png
new file mode 100644
index 000000000000..8d76393a1b63
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_17w.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_18w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_18w.png
new file mode 100644
index 000000000000..ca9c66e994ff
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_18w.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/watch_switch_track_mtrl_alpha.png b/core/res/res/drawable-xhdpi/watch_switch_track_mtrl_alpha.png
new file mode 100644
index 000000000000..1aa544227380
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/watch_switch_track_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_14w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_14w.png
new file mode 100644
index 000000000000..c0d72d70d6dd
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_14w.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_15w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_15w.png
new file mode 100644
index 000000000000..d7c0ec0fd25e
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_15w.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_16w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_16w.png
new file mode 100644
index 000000000000..5815ba9d3767
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_16w.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_17w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_17w.png
new file mode 100644
index 000000000000..41da8c0eaaa6
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_17w.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_18w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_18w.png
new file mode 100644
index 000000000000..975eb01cea4a
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_18w.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/watch_switch_track_mtrl_alpha.png b/core/res/res/drawable-xxhdpi/watch_switch_track_mtrl_alpha.png
new file mode 100644
index 000000000000..af2042be7f59
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/watch_switch_track_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable/watch_switch_thumb_material.xml b/core/res/res/drawable/watch_switch_thumb_material.xml
deleted file mode 100644
index 3463a4f54684..000000000000
--- a/core/res/res/drawable/watch_switch_thumb_material.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="20dp"
- android:height="40dp"
- android:viewportHeight="40"
- android:viewportWidth="20">
- <group
- android:translateX="10"
- android:translateY="20">
- <path
- android:name="thumb_path"
- android:fillColor="@color/white"
- android:pathData="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" />
- </group>
-</vector>
diff --git a/core/res/res/drawable/watch_switch_thumb_material_anim.xml b/core/res/res/drawable/watch_switch_thumb_material_anim.xml
index 686fb976cf1c..9e3e89338dab 100644
--- a/core/res/res/drawable/watch_switch_thumb_material_anim.xml
+++ b/core/res/res/drawable/watch_switch_thumb_material_anim.xml
@@ -15,21 +15,79 @@
android:constantSize="true">
<item
android:id="@+id/off"
- android:drawable="@drawable/watch_switch_thumb_material"
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w"
android:state_enabled="false" />
<item
android:id="@+id/on"
- android:drawable="@drawable/watch_switch_thumb_material"
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w"
android:state_checked="true" />
<item
android:id="@+id/off"
- android:drawable="@drawable/watch_switch_thumb_material" />
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w" />
<transition
- android:drawable="@drawable/watch_switch_thumb_to_on_anim_mtrl"
android:fromId="@id/off"
- android:toId="@id/on" />
+ android:toId="@id/on">
+ <animation-list>
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w"
+ android:duration="30" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_15w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_16w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_17w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_18w"
+ android:duration="75" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_17w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_16w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_15w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w"
+ android:duration="30" />
+ </animation-list>
+ </transition>
<transition
- android:drawable="@drawable/watch_switch_thumb_to_off_anim_mtrl"
android:fromId="@id/on"
- android:toId="@id/off" />
+ android:toId="@id/off">
+ <animation-list>
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w"
+ android:duration="30" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_15w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_16w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_17w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_18w"
+ android:duration="75" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_17w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_16w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_15w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w"
+ android:duration="30" />
+ </animation-list>
+ </transition>
</animated-selector>
diff --git a/core/res/res/drawable/watch_switch_track_material.xml b/core/res/res/drawable/watch_switch_track_material.xml
index 00cdadb1b59d..79e92a331071 100644
--- a/core/res/res/drawable/watch_switch_track_material.xml
+++ b/core/res/res/drawable/watch_switch_track_material.xml
@@ -11,13 +11,11 @@
limitations under the License.
-->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:gravity="center_vertical|center_horizontal">
- <shape android:shape="oval">
- <solid android:color="@android:color/white" />
- <size
- android:width="40dp"
- android:height="40dp" />
- </shape>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false">
+ <bitmap android:alpha="0.1" android:src="@drawable/watch_switch_track_mtrl_alpha" />
</item>
-</layer-list> \ No newline at end of file
+ <item>
+ <bitmap android:alpha="0.2" android:src="@drawable/watch_switch_track_mtrl_alpha" />
+ </item>
+</selector>
diff --git a/core/res/res/interpolator-watch/progress_indeterminate_rotation_interpolator.xml b/core/res/res/interpolator-watch/progress_indeterminate_rotation_interpolator.xml
new file mode 100644
index 000000000000..ed2655cb0ac8
--- /dev/null
+++ b/core/res/res/interpolator-watch/progress_indeterminate_rotation_interpolator.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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.
+-->
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+ android:pathData="M 0.0,0.0 c 0.032,0.0 0.016,0.2 0.08,0.2 l 0.12,0.0 c 0.032,0.0 0.016,0.2 0.08,0.2 l 0.12,0.0 c 0.032,0.0 0.016,0.2 0.08,0.2 l 0.12,0.0 c 0.032,0.0 0.016,0.2 0.08,0.2 l 0.12,0.0 c 0.032,0.0 0.016,0.2 0.08,0.2 l 0.12,0.0 L 1.0,1.0" />
diff --git a/core/res/res/values-round-watch/styles_material.xml b/core/res/res/interpolator-watch/trim_end_interpolator.xml
index a2f3c0243189..f46d5e0e7c82 100644
--- a/core/res/res/values-round-watch/styles_material.xml
+++ b/core/res/res/interpolator-watch/trim_end_interpolator.xml
@@ -1,5 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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.
@@ -13,8 +14,5 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<resources>
- <style name="TextAppearance.Material.AlertDialogMessage" parent="TextAppearance.Material.Body1">
- <item name="textAlignment">center</item>
- </style>
-</resources>
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+ android:pathData="M 0.0,0.0 c 0.08,0.0 0.04,1.0 0.2,1.0 l 0.8,0.0 L 1.0,1.0" />
diff --git a/core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml b/core/res/res/interpolator-watch/trim_offset_interpolator.xml
index 9f92361e70ea..d58672e9cb42 100644
--- a/core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml
+++ b/core/res/res/interpolator-watch/trim_offset_interpolator.xml
@@ -1,19 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
+<!--
+ Copyright (C) 2016 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.
-->
-
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:drawable="@drawable/watch_switch_thumb_material">
- <target
- android:name="thumb_path"
- android:animation="@anim/watch_switch_thumb_to_on_animation" />
-</animated-vector>
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+ android:pathData="M 0.0,0.0 l 0.4,1.0 l 0.6,0.0 L 1.0,1.0" />
diff --git a/core/res/res/drawable/watch_switch_thumb_to_off_anim_mtrl.xml b/core/res/res/interpolator-watch/trim_start_interpolator.xml
index 2c6ba2f75753..365609c97d75 100644
--- a/core/res/res/drawable/watch_switch_thumb_to_off_anim_mtrl.xml
+++ b/core/res/res/interpolator-watch/trim_start_interpolator.xml
@@ -1,19 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
+<!--
+ Copyright (C) 2016 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.
-->
-
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:drawable="@drawable/watch_switch_thumb_material">
- <target
- android:name="thumb_path"
- android:animation="@anim/watch_switch_thumb_to_off_animation" />
-</animated-vector>
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+ android:pathData="M 0.0,0.0 l 0.2,0.0 c 0.08,0.0 0.04,1.0 0.2,1.0 l 0.6,0.0 L 1.0,1.0" />
diff --git a/core/res/res/layout-notround-watch/alert_dialog_header_micro.xml b/core/res/res/layout-notround-watch/alert_dialog_title_material.xml
index fc840d9fa73f..307c6db91c3a 100644
--- a/core/res/res/layout-notround-watch/alert_dialog_header_micro.xml
+++ b/core/res/res/layout-notround-watch/alert_dialog_title_material.xml
@@ -30,12 +30,9 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@null" />
- <com.android.internal.widget.DialogTitle android:id="@+id/alertTitle"
+ <TextView android:id="@+id/alertTitle"
style="?android:attr/windowTitleStyle"
- android:ellipsize="end"
- android:layout_marginStart="8dp"
android:layout_marginBottom="8dp"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAlignment="viewStart" />
+ android:layout_height="wrap_content" />
</LinearLayout>
diff --git a/core/res/res/layout-round-watch/alert_dialog_header_micro.xml b/core/res/res/layout-round-watch/alert_dialog_title_material.xml
index 6f7ae02388a3..027991106c5a 100644
--- a/core/res/res/layout-round-watch/alert_dialog_header_micro.xml
+++ b/core/res/res/layout-round-watch/alert_dialog_title_material.xml
@@ -27,12 +27,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@null" />
- <com.android.internal.widget.DialogTitle android:id="@+id/alertTitle"
+ <TextView android:id="@+id/alertTitle"
style="?android:attr/windowTitleStyle"
- android:ellipsize="end"
android:layout_marginTop="36dp"
- android:layout_marginBottom="4dp"
+ android:layout_marginBottom="8dp"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAlignment="center" />
+ android:layout_height="wrap_content" />
</FrameLayout>
diff --git a/core/res/res/layout-watch/alert_dialog_material.xml b/core/res/res/layout-watch/alert_dialog_material.xml
index ce8e20a12187..2fe13de2120a 100644
--- a/core/res/res/layout-watch/alert_dialog_material.xml
+++ b/core/res/res/layout-watch/alert_dialog_material.xml
@@ -39,18 +39,19 @@
<include android:id="@+id/title_template"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- layout="@layout/alert_dialog_header_micro"/>
+ layout="@layout/alert_dialog_title_material"/>
</FrameLayout>
<!-- Content Panel -->
<FrameLayout android:id="@+id/contentPanel"
android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
android:clipToPadding="false">
<TextView android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:textAppearance="@style/TextAppearance.Material.Body1"
+ android:gravity="@integer/config_dialogTextGravity"
+ android:textAppearance="@style/TextAppearance.Material.Subhead"
android:paddingStart="?dialogPreferredPadding"
android:paddingEnd="?dialogPreferredPadding"
android:paddingTop="8dip"
@@ -77,6 +78,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
android:orientation="vertical"
android:minHeight="@dimen/alert_dialog_button_bar_height"
android:paddingBottom="?dialogPreferredPadding"
diff --git a/core/res/res/layout-watch/date_picker_dialog.xml b/core/res/res/layout-watch/date_picker_dialog.xml
new file mode 100644
index 000000000000..b8772bc5ea3c
--- /dev/null
+++ b/core/res/res/layout-watch/date_picker_dialog.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2007 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/datePicker"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:spinnersShown="true"
+ android:calendarViewShown="false"
+ android:datePickerMode="@integer/date_picker_mode" />
diff --git a/core/res/res/layout-watch/input_method_extract_view.xml b/core/res/res/layout-watch/input_method_extract_view.xml
index 038b766c749b..3478bb544934 100644
--- a/core/res/res/layout-watch/input_method_extract_view.xml
+++ b/core/res/res/layout-watch/input_method_extract_view.xml
@@ -49,7 +49,7 @@
android:layout_width="@dimen/input_extract_action_button_width"
android:layout_height="@dimen/input_extract_action_button_width"
android:background="@drawable/input_extract_action_bg_material_dark"
- android:padding="4dp"
+ android:padding="@dimen/input_extract_action_icon_padding"
android:scaleType="centerInside" />
</FrameLayout>
</android.inputmethodservice.CompactExtractEditLayout>
diff --git a/core/res/res/layout-watch/preference_widget_switch.xml b/core/res/res/layout-watch/preference_widget_switch.xml
index 37d0c6bf1af6..5881cf0c4d1e 100644
--- a/core/res/res/layout-watch/preference_widget_switch.xml
+++ b/core/res/res/layout-watch/preference_widget_switch.xml
@@ -23,8 +23,8 @@
android:layout_gravity="center"
android:thumb="@drawable/watch_switch_thumb_material_anim"
android:thumbTint="@color/watch_switch_thumb_color_material"
+ android:thumbTintMode="multiply"
android:track="@drawable/watch_switch_track_material"
- android:trackTint="?android:colorPrimary"
android:focusable="false"
android:clickable="false"
android:background="@null" />
diff --git a/core/res/res/layout-watch/time_picker_dialog.xml b/core/res/res/layout-watch/time_picker_dialog.xml
new file mode 100644
index 000000000000..788602bf09ba
--- /dev/null
+++ b/core/res/res/layout-watch/time_picker_dialog.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2007, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<TimePicker xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/timePicker"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:timePickerMode="@integer/time_picker_mode" />
diff --git a/core/res/res/layout/date_picker_legacy_holo.xml b/core/res/res/layout/date_picker_legacy_holo.xml
index b465d97339a2..a6e93c99160d 100644
--- a/core/res/res/layout/date_picker_legacy_holo.xml
+++ b/core/res/res/layout/date_picker_legacy_holo.xml
@@ -41,8 +41,8 @@
android:id="@+id/month"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:layout_marginBottom="16dip"
+ android:layout_marginTop="@dimen/picker_top_margin"
+ android:layout_marginBottom="@dimen/picker_bottom_margin"
android:layout_marginStart="8dip"
android:layout_marginEnd="8dip"
android:focusable="true"
@@ -54,8 +54,8 @@
android:id="@+id/day"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:layout_marginBottom="16dip"
+ android:layout_marginTop="@dimen/picker_top_margin"
+ android:layout_marginBottom="@dimen/picker_bottom_margin"
android:layout_marginStart="8dip"
android:layout_marginEnd="8dip"
android:focusable="true"
@@ -67,8 +67,8 @@
android:id="@+id/year"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:layout_marginBottom="16dip"
+ android:layout_marginTop="@dimen/picker_top_margin"
+ android:layout_marginBottom="@dimen/picker_bottom_margin"
android:layout_marginStart="8dip"
android:layout_marginEnd="16dip"
android:focusable="true"
diff --git a/core/res/res/layout/number_picker_material.xml b/core/res/res/layout/number_picker_material.xml
index b0455857e79e..6fbd2b279f0c 100644
--- a/core/res/res/layout/number_picker_material.xml
+++ b/core/res/res/layout/number_picker_material.xml
@@ -22,4 +22,4 @@
android:gravity="center"
android:singleLine="true"
android:background="@null"
- android:textAppearance="@style/TextAppearance.Material.Body1" />
+ android:textAppearance="@style/TextAppearance.Material.NumberPicker" />
diff --git a/core/res/res/layout/time_picker_legacy_material.xml b/core/res/res/layout/time_picker_legacy_material.xml
index c6b7d3a70d97..ee56266390f1 100644
--- a/core/res/res/layout/time_picker_legacy_material.xml
+++ b/core/res/res/layout/time_picker_legacy_material.xml
@@ -40,8 +40,8 @@
android:id="@+id/hour"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:layout_marginBottom="16dip"
+ android:layout_marginTop="@dimen/picker_top_margin"
+ android:layout_marginBottom="@dimen/picker_bottom_margin"
android:focusable="true"
android:focusableInTouchMode="true"
/>
@@ -62,8 +62,8 @@
android:id="@+id/minute"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:layout_marginBottom="16dip"
+ android:layout_marginTop="@dimen/picker_top_margin"
+ android:layout_marginBottom="@dimen/picker_bottom_margin"
android:focusable="true"
android:focusableInTouchMode="true"
/>
@@ -75,8 +75,8 @@
android:id="@+id/amPm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:layout_marginBottom="16dip"
+ android:layout_marginTop="@dimen/picker_top_margin"
+ android:layout_marginBottom="@dimen/picker_bottom_margin"
android:layout_marginStart="8dip"
android:layout_marginEnd="8dip"
android:focusable="true"
diff --git a/core/res/res/raw-ar-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ar-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 002be4164c9a..000000000000
--- a/core/res/res/raw-ar-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="RTL">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>نافذة جديدة للتصفح المتخفي</title>
- </head>
- <body>
- <p><strong>أنت الآن في وضع التصفح المتخفي</strong> الصفحات التي تشاهدها في هذه النافذة لن تظهر في سجل المتصفح أو سجلّ البحث، ولن تترك آثارًا أخرى للتتبع، مثل ملفات تعريف الارتباط على جهازك بعد أن تغلق نافذة التصفح المتخفي. ورغم ذلك، سيتم الاحتفاظ بأي ملفات تنزلها أو أية إشارات مرجعية تقوم بإنشائها.</p>
-
- <p><strong>العمل في وضع التصفح المخفي لا يؤثر على طريقة عمل الأشخاص الآخرين أو الخوادم أو البرامج الأخرى. كن على حذر مما يلي:</strong></p>
-
- <ul>
- <li>مواقع الويب التي تجمع معلومات عنك أو تشارك الآخرين فيها</li>
- <li>مزوّدو خدمة الإنترنت أو الموظفون الذين يتتبعون الصفحات التي تزورها</li>
- <li>البرامج الضارة التي تتبع ضغطات المفاتيح التي تقوم بها مقابل تنزيل وجوه رمزية مجانًا</li>
- <li>المراقبة من قبل العملاء السريين</li>
- <li>الأشخاص الذين يقفون خلفك</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ar/incognito_mode_start_page.html b/core/res/res/raw-ar/incognito_mode_start_page.html
deleted file mode 100644
index 002be4164c9a..000000000000
--- a/core/res/res/raw-ar/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="RTL">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>نافذة جديدة للتصفح المتخفي</title>
- </head>
- <body>
- <p><strong>أنت الآن في وضع التصفح المتخفي</strong> الصفحات التي تشاهدها في هذه النافذة لن تظهر في سجل المتصفح أو سجلّ البحث، ولن تترك آثارًا أخرى للتتبع، مثل ملفات تعريف الارتباط على جهازك بعد أن تغلق نافذة التصفح المتخفي. ورغم ذلك، سيتم الاحتفاظ بأي ملفات تنزلها أو أية إشارات مرجعية تقوم بإنشائها.</p>
-
- <p><strong>العمل في وضع التصفح المخفي لا يؤثر على طريقة عمل الأشخاص الآخرين أو الخوادم أو البرامج الأخرى. كن على حذر مما يلي:</strong></p>
-
- <ul>
- <li>مواقع الويب التي تجمع معلومات عنك أو تشارك الآخرين فيها</li>
- <li>مزوّدو خدمة الإنترنت أو الموظفون الذين يتتبعون الصفحات التي تزورها</li>
- <li>البرامج الضارة التي تتبع ضغطات المفاتيح التي تقوم بها مقابل تنزيل وجوه رمزية مجانًا</li>
- <li>المراقبة من قبل العملاء السريين</li>
- <li>الأشخاص الذين يقفون خلفك</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-bg-xlarge/incognito_mode_start_page.html b/core/res/res/raw-bg-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index ee25ae4023ff..000000000000
--- a/core/res/res/raw-bg-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Нов прозорец „инкогнито“</title>
- </head>
- <body>
- <p><strong>Влязохте в режим „инкогнито“</strong>. Страниците, които разглеждате в този прозорец, няма да се показват в историята на браузъра ви, нито в историята на търсенията ви. Те също няма да оставят други следи като „бисквитки“ в устройството ви, след като затворите прозореца в режим „инкогнито“. Ще се съхранят обаче всички файлове, които изтеглите, или отметки, които създадете.</p>
-
- <p><strong>Преминаването в режим „инкогнито“ не засяга поведението на други хора, сървъри или софтуер. </strong>Внимавайте за:</p>
-
- <ul>
- <li>уебсайтове, които събират или споделят информация за вас;</li>
- <li>доставчици на интернет услуги или служители, които проследяват посещаваните от вас страници;</li>
- <li>злонамерен софтуер, който ви дава безплатни емотикони, но в замяна проследява натисканията на клавишите от вас;</li>
- <li>наблюдение от тайните служби;</li>
- <li>хора, които стоят зад вас.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-bg/incognito_mode_start_page.html b/core/res/res/raw-bg/incognito_mode_start_page.html
deleted file mode 100644
index ee25ae4023ff..000000000000
--- a/core/res/res/raw-bg/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Нов прозорец „инкогнито“</title>
- </head>
- <body>
- <p><strong>Влязохте в режим „инкогнито“</strong>. Страниците, които разглеждате в този прозорец, няма да се показват в историята на браузъра ви, нито в историята на търсенията ви. Те също няма да оставят други следи като „бисквитки“ в устройството ви, след като затворите прозореца в режим „инкогнито“. Ще се съхранят обаче всички файлове, които изтеглите, или отметки, които създадете.</p>
-
- <p><strong>Преминаването в режим „инкогнито“ не засяга поведението на други хора, сървъри или софтуер. </strong>Внимавайте за:</p>
-
- <ul>
- <li>уебсайтове, които събират или споделят информация за вас;</li>
- <li>доставчици на интернет услуги или служители, които проследяват посещаваните от вас страници;</li>
- <li>злонамерен софтуер, който ви дава безплатни емотикони, но в замяна проследява натисканията на клавишите от вас;</li>
- <li>наблюдение от тайните служби;</li>
- <li>хора, които стоят зад вас.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ca-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ca-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index bec3dacb9101..000000000000
--- a/core/res/res/raw-ca-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nova finestra d'incògnit</title>
- </head>
- <body>
- <p><strong>Has passat a l'estat d'incògnit</strong>. Les pàgines que visualitzis en aquesta finestra no apareixeran a l'historial del navegador ni a l'historial de cerques, i no deixaran cap pista, com ara galetes, al dispositiu després de tancar la finestra d'incògnit. Tanmateix, es conservaran tots els fitxers que baixis o les adreces d'interès que creïs.</p>
-
- <p><strong>Utilitzar el mode d'incògnit no afecta el comportament d'altres usuaris, servidors ni programari. Vés amb compte amb:</strong></p>
-
- <ul>
- <li>llocs web que recopilen o comparteixen informació sobre la teva identitat,</li>
- <li>proveïdors de serveis d'Internet o treballadors que segueixen les pàgines que visites,</li>
- <li>programari maliciós que segueix les teves pulsacions del teclat a canvi d'emoticones,</li>
- <li>vigilància per part d'agents secrets,</li>
- <li>persones que estan darrere teu.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ca/incognito_mode_start_page.html b/core/res/res/raw-ca/incognito_mode_start_page.html
deleted file mode 100644
index bec3dacb9101..000000000000
--- a/core/res/res/raw-ca/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nova finestra d'incògnit</title>
- </head>
- <body>
- <p><strong>Has passat a l'estat d'incògnit</strong>. Les pàgines que visualitzis en aquesta finestra no apareixeran a l'historial del navegador ni a l'historial de cerques, i no deixaran cap pista, com ara galetes, al dispositiu després de tancar la finestra d'incògnit. Tanmateix, es conservaran tots els fitxers que baixis o les adreces d'interès que creïs.</p>
-
- <p><strong>Utilitzar el mode d'incògnit no afecta el comportament d'altres usuaris, servidors ni programari. Vés amb compte amb:</strong></p>
-
- <ul>
- <li>llocs web que recopilen o comparteixen informació sobre la teva identitat,</li>
- <li>proveïdors de serveis d'Internet o treballadors que segueixen les pàgines que visites,</li>
- <li>programari maliciós que segueix les teves pulsacions del teclat a canvi d'emoticones,</li>
- <li>vigilància per part d'agents secrets,</li>
- <li>persones que estan darrere teu.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-cs-xlarge/incognito_mode_start_page.html b/core/res/res/raw-cs-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 7420393d3e51..000000000000
--- a/core/res/res/raw-cs-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nové anonymní okno</title>
- </head>
- <body>
- <p><strong>Spustili jste anonymní režim</strong>. Stránky, které zobrazíte v tomto okně, se nezahrnou do historie prohlížeče ani historie vyhledávání a dokonce po zavření tohoto anonymního okna ve vašem zařízení nezanechají ani žádné jiné stopy například v podobě souborů cookie. Veškeré stažené soubory nebo vytvořené záložky však budou zachovány.</p>
-
- <p><strong>Použití anonymního režimu nemá vliv na chování jiných osob, serverů nebo softwaru. Dejte si pozor na:</strong></p>
-
- <ul>
- <li>Weby, které sbírají nebo sdílejí informace o vás</li>
- <li>Poskytovatele internetových služeb nebo zaměstnavatele, kteří sledují stránky, které navštěvujete</li>
- <li>Škodlivý software, který sleduje stisknuté klávesy a výměnou nabízí nové emotikony</li>
- <li>Tajné agenty</li>
- <li>Lidi, kteří vám koukají přes rameno</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-cs/incognito_mode_start_page.html b/core/res/res/raw-cs/incognito_mode_start_page.html
deleted file mode 100644
index 7420393d3e51..000000000000
--- a/core/res/res/raw-cs/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nové anonymní okno</title>
- </head>
- <body>
- <p><strong>Spustili jste anonymní režim</strong>. Stránky, které zobrazíte v tomto okně, se nezahrnou do historie prohlížeče ani historie vyhledávání a dokonce po zavření tohoto anonymního okna ve vašem zařízení nezanechají ani žádné jiné stopy například v podobě souborů cookie. Veškeré stažené soubory nebo vytvořené záložky však budou zachovány.</p>
-
- <p><strong>Použití anonymního režimu nemá vliv na chování jiných osob, serverů nebo softwaru. Dejte si pozor na:</strong></p>
-
- <ul>
- <li>Weby, které sbírají nebo sdílejí informace o vás</li>
- <li>Poskytovatele internetových služeb nebo zaměstnavatele, kteří sledují stránky, které navštěvujete</li>
- <li>Škodlivý software, který sleduje stisknuté klávesy a výměnou nabízí nové emotikony</li>
- <li>Tajné agenty</li>
- <li>Lidi, kteří vám koukají přes rameno</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-da-xlarge/incognito_mode_start_page.html b/core/res/res/raw-da-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index eae989f9cd19..000000000000
--- a/core/res/res/raw-da-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nyt inkognitovindue</title>
- </head>
- <body>
- <p><strong>Nu er du inkognito</strong>. De sider, du besøger i dette vindue, vises ikke i din browser- eller søgeoversigt, og de efterlader ikke andre spor, såsom cookies, på din enhed, når du lukker incognitovinduet. Filer, som du downloader eller bogmærker, som du opretter, gemmes dog.</p>
-
- <p><strong>At være inkognito er ikke noget, der påvirker andre folk, servere eller software. Vær opmærksom på:</strong></p>
-
- <ul>
- <li>Websider, der indsamler eller deler oplysninger om dig</li>
- <li>Internetserviceudbydere eller arbejdsgivere, der registrerer de sider, du besøger</li>
- <li>Ondsindet software, der registrerer dine tasteslag til gengæld for gratis smileys</li>
- <li>Overvågning af hemmelige agenter</li>
- <li>Folk, der kigger dig over skulderen</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-da/incognito_mode_start_page.html b/core/res/res/raw-da/incognito_mode_start_page.html
deleted file mode 100644
index eae989f9cd19..000000000000
--- a/core/res/res/raw-da/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nyt inkognitovindue</title>
- </head>
- <body>
- <p><strong>Nu er du inkognito</strong>. De sider, du besøger i dette vindue, vises ikke i din browser- eller søgeoversigt, og de efterlader ikke andre spor, såsom cookies, på din enhed, når du lukker incognitovinduet. Filer, som du downloader eller bogmærker, som du opretter, gemmes dog.</p>
-
- <p><strong>At være inkognito er ikke noget, der påvirker andre folk, servere eller software. Vær opmærksom på:</strong></p>
-
- <ul>
- <li>Websider, der indsamler eller deler oplysninger om dig</li>
- <li>Internetserviceudbydere eller arbejdsgivere, der registrerer de sider, du besøger</li>
- <li>Ondsindet software, der registrerer dine tasteslag til gengæld for gratis smileys</li>
- <li>Overvågning af hemmelige agenter</li>
- <li>Folk, der kigger dig over skulderen</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-de-xlarge/incognito_mode_start_page.html b/core/res/res/raw-de-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 1d2cb69904b0..000000000000
--- a/core/res/res/raw-de-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Neues Inkognito-Fenster</title>
- </head>
- <body>
- <p><strong>Sie haben den Modus für anonymes Browsen aktiviert</strong>. In diesem Fenster aufgerufene Seiten erscheinen nicht in Ihrem Browser- oder Suchverlauf. Zudem werden nach dem Schließen des Inkognito-Fensters keine anderen Spuren wie etwa Cookies auf Ihrem Gerät gespeichert. Heruntergeladene Dateien oder hinzugefügte Lesezeichen werden jedoch beibehalten.</p>
-
- <p><strong>Das anonyme Browsen wirkt sich nicht auf das Verhalten von Menschen, Servern oder Software aus. </strong>Vorsicht ist geboten bei:</p>
-
- <ul>
- <li>Websites, auf denen Informationen über Sie gesammelt oder weitergegeben werden</li>
- <li>Internetanbietern oder Arbeitgebern, die die von Ihnen aufgerufenen Seiten protokollieren</li>
- <li>Bösartiger Software, die Ihnen kostenlose Smileys bietet, dafür aber Ihre Tastatureingaben speichert</li>
- <li>Geheimagenten</li>
- <li>Personen, die hinter Ihnen stehen</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-de/incognito_mode_start_page.html b/core/res/res/raw-de/incognito_mode_start_page.html
deleted file mode 100644
index 1d2cb69904b0..000000000000
--- a/core/res/res/raw-de/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Neues Inkognito-Fenster</title>
- </head>
- <body>
- <p><strong>Sie haben den Modus für anonymes Browsen aktiviert</strong>. In diesem Fenster aufgerufene Seiten erscheinen nicht in Ihrem Browser- oder Suchverlauf. Zudem werden nach dem Schließen des Inkognito-Fensters keine anderen Spuren wie etwa Cookies auf Ihrem Gerät gespeichert. Heruntergeladene Dateien oder hinzugefügte Lesezeichen werden jedoch beibehalten.</p>
-
- <p><strong>Das anonyme Browsen wirkt sich nicht auf das Verhalten von Menschen, Servern oder Software aus. </strong>Vorsicht ist geboten bei:</p>
-
- <ul>
- <li>Websites, auf denen Informationen über Sie gesammelt oder weitergegeben werden</li>
- <li>Internetanbietern oder Arbeitgebern, die die von Ihnen aufgerufenen Seiten protokollieren</li>
- <li>Bösartiger Software, die Ihnen kostenlose Smileys bietet, dafür aber Ihre Tastatureingaben speichert</li>
- <li>Geheimagenten</li>
- <li>Personen, die hinter Ihnen stehen</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-el-xlarge/incognito_mode_start_page.html b/core/res/res/raw-el-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 5641650b8691..000000000000
--- a/core/res/res/raw-el-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Νέο παράθυρο για ανώνυμη περιήγηση</title>
- </head>
- <body>
- <p><strong>Είστε σε κατάσταση ανώνυμης περιήγησης</strong>. Οι σελίδες που θα προβάλλετε σε αυτό το παράθυρο δεν θα εμφανιστούν στο ιστορικό του πρόγράμματος περιήγησης ή στο ιστορικό αναζήτησης. Επίσης, δεν θα αφήσουν ίχνη, όπως cookie, στη συσκευή σας αφού κλείσετε το παράθυρο ανώνυμης περιήγησης. Ωστόσο, τα αρχεία και οι σελιδοδείκτες που θα δημιουργήσετε θα διατηρηθούν.</p>
-
- <p><strong>Η κατάσταση ανώνυμης περιήγησης δεν επηρεάζει την συμπεριφορά άλλων, διακομιστών ή λογισμικού. Αλλά προσοχή σε:</strong></p>
-
- <ul>
- <li>Ιστοτόπους που συλλέγουν ή μοιράζονται πληροφορίες για εσάς</li>
- <li>Πάροχους υπηρεσιών διαδικτύου ή εργοδότες που παρακολουθούν τις ιστοσελίδες που επισκέπτεστε</li>
- <li>Κακόβουλο λογισμικό που καταγράφει ότι πληκτρολογείτε με αντάλλαγμα δωρεάν "φατσούλες"</li>
- <li>Παρακολούθηση από μυστικούς πράκτορες</li>
- <li>Άτομα που στέκονται πίσω σας</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-el/incognito_mode_start_page.html b/core/res/res/raw-el/incognito_mode_start_page.html
deleted file mode 100644
index 5641650b8691..000000000000
--- a/core/res/res/raw-el/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Νέο παράθυρο για ανώνυμη περιήγηση</title>
- </head>
- <body>
- <p><strong>Είστε σε κατάσταση ανώνυμης περιήγησης</strong>. Οι σελίδες που θα προβάλλετε σε αυτό το παράθυρο δεν θα εμφανιστούν στο ιστορικό του πρόγράμματος περιήγησης ή στο ιστορικό αναζήτησης. Επίσης, δεν θα αφήσουν ίχνη, όπως cookie, στη συσκευή σας αφού κλείσετε το παράθυρο ανώνυμης περιήγησης. Ωστόσο, τα αρχεία και οι σελιδοδείκτες που θα δημιουργήσετε θα διατηρηθούν.</p>
-
- <p><strong>Η κατάσταση ανώνυμης περιήγησης δεν επηρεάζει την συμπεριφορά άλλων, διακομιστών ή λογισμικού. Αλλά προσοχή σε:</strong></p>
-
- <ul>
- <li>Ιστοτόπους που συλλέγουν ή μοιράζονται πληροφορίες για εσάς</li>
- <li>Πάροχους υπηρεσιών διαδικτύου ή εργοδότες που παρακολουθούν τις ιστοσελίδες που επισκέπτεστε</li>
- <li>Κακόβουλο λογισμικό που καταγράφει ότι πληκτρολογείτε με αντάλλαγμα δωρεάν "φατσούλες"</li>
- <li>Παρακολούθηση από μυστικούς πράκτορες</li>
- <li>Άτομα που στέκονται πίσω σας</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-en-rGB-xlarge/incognito_mode_start_page.html b/core/res/res/raw-en-rGB-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 7436f9804c51..000000000000
--- a/core/res/res/raw-en-rGB-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>New incognito window</title>
- </head>
- <body>
- <p><strong>You've gone incognito</strong>. Pages that you view in this window won't appear in your browser history or search history, and they won't leave other traces, such as cookies, on your device after you close the incognito window. However, any files that you download or bookmarks that you create will be preserved.</p>
-
- <p><strong>Going incognito doesn't affect the behaviour of other people, servers or software. Be cautious of:</strong></p>
-
- <ul>
- <li>Websites that collect or share information about you</li>
- <li>Internet service providers or employers that track the pages that you visit</li>
- <li>Malicious software that tracks your keystrokes in exchange for free smileys</li>
- <li>Surveillance by secret agents</li>
- <li>People standing behind you</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-en-rGB/incognito_mode_start_page.html b/core/res/res/raw-en-rGB/incognito_mode_start_page.html
deleted file mode 100644
index 7436f9804c51..000000000000
--- a/core/res/res/raw-en-rGB/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>New incognito window</title>
- </head>
- <body>
- <p><strong>You've gone incognito</strong>. Pages that you view in this window won't appear in your browser history or search history, and they won't leave other traces, such as cookies, on your device after you close the incognito window. However, any files that you download or bookmarks that you create will be preserved.</p>
-
- <p><strong>Going incognito doesn't affect the behaviour of other people, servers or software. Be cautious of:</strong></p>
-
- <ul>
- <li>Websites that collect or share information about you</li>
- <li>Internet service providers or employers that track the pages that you visit</li>
- <li>Malicious software that tracks your keystrokes in exchange for free smileys</li>
- <li>Surveillance by secret agents</li>
- <li>People standing behind you</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-es-rUS-xlarge/incognito_mode_start_page.html b/core/res/res/raw-es-rUS-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index d283df56cbaf..000000000000
--- a/core/res/res/raw-es-rUS-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nueva ventana de incógnito</title>
- </head>
- <body>
- <p><strong>Estás de incógnito</strong>. Las páginas que veas en esta ventana no aparecerán en el historial de tu navegador ni en el historial de búsquedas, y cuando cierres la ventana de incógnito, tampoco quedará ningún otro rastro, como cookies, en tu dispositivo. Sin embargo, sí se preservarán los archivos que descargues o los favoritos que marques.</p>
-
- <p><strong>Estar de incógnito no afecta el comportamiento de otras personas, servidores o programas. Ten cuidado con:</strong></p>
-
- <ul>
- <li>Sitios web que recaban o comparten tu información</li>
- <li>Proveedores de servicio de Internet o empleadores que hacen un seguimiento de las páginas que visitas</li>
- <li>Programas de software maliciosos que hacen un seguimiento de la actividad de tu teclado a cambio de emoticones gratuitos</li>
- <li>Vigilancia a cargo de agentes secretos</li>
- <li>Personas paradas atrás tuyo</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-es-rUS/incognito_mode_start_page.html b/core/res/res/raw-es-rUS/incognito_mode_start_page.html
deleted file mode 100644
index d283df56cbaf..000000000000
--- a/core/res/res/raw-es-rUS/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nueva ventana de incógnito</title>
- </head>
- <body>
- <p><strong>Estás de incógnito</strong>. Las páginas que veas en esta ventana no aparecerán en el historial de tu navegador ni en el historial de búsquedas, y cuando cierres la ventana de incógnito, tampoco quedará ningún otro rastro, como cookies, en tu dispositivo. Sin embargo, sí se preservarán los archivos que descargues o los favoritos que marques.</p>
-
- <p><strong>Estar de incógnito no afecta el comportamiento de otras personas, servidores o programas. Ten cuidado con:</strong></p>
-
- <ul>
- <li>Sitios web que recaban o comparten tu información</li>
- <li>Proveedores de servicio de Internet o empleadores que hacen un seguimiento de las páginas que visitas</li>
- <li>Programas de software maliciosos que hacen un seguimiento de la actividad de tu teclado a cambio de emoticones gratuitos</li>
- <li>Vigilancia a cargo de agentes secretos</li>
- <li>Personas paradas atrás tuyo</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-es-xlarge/incognito_mode_start_page.html b/core/res/res/raw-es-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 6d9b5014b615..000000000000
--- a/core/res/res/raw-es-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nueva ventana de incógnito</title>
- </head>
- <body>
- <p><strong>Estás navegando de incógnito</strong>. Las páginas que consultes a través de esta ventana no quedarán registradas en el historial del navegador ni en el historial de búsquedas, y tampoco dejarán otros rastros en el ordenador (como cookies) una vez cerrada. Los archivos que descargues y los marcadores que guardes sí se almacenarán. </p>
-
- <p><strong>La función de navegación de incógnito no afecta al comportamiento de los servidores o programas de software. Ten cuidado con:</strong></p>
-
- <ul>
- <li>sitios web que recopilan o comparten información personal</li>
- <li>proveedores de servicios de Internet o trabajadores de estas empresas que supervisan las páginas que visitas</li>
- <li>software malicioso que realiza un seguimiento de las teclas que pulsas a cambio de emoticonos gratuitos</li>
- <li>actividades de seguimiento por parte de terceros</li>
- <li>personas merodeando cerca de tu ordenador</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-es/incognito_mode_start_page.html b/core/res/res/raw-es/incognito_mode_start_page.html
deleted file mode 100644
index 6d9b5014b615..000000000000
--- a/core/res/res/raw-es/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nueva ventana de incógnito</title>
- </head>
- <body>
- <p><strong>Estás navegando de incógnito</strong>. Las páginas que consultes a través de esta ventana no quedarán registradas en el historial del navegador ni en el historial de búsquedas, y tampoco dejarán otros rastros en el ordenador (como cookies) una vez cerrada. Los archivos que descargues y los marcadores que guardes sí se almacenarán. </p>
-
- <p><strong>La función de navegación de incógnito no afecta al comportamiento de los servidores o programas de software. Ten cuidado con:</strong></p>
-
- <ul>
- <li>sitios web que recopilan o comparten información personal</li>
- <li>proveedores de servicios de Internet o trabajadores de estas empresas que supervisan las páginas que visitas</li>
- <li>software malicioso que realiza un seguimiento de las teclas que pulsas a cambio de emoticonos gratuitos</li>
- <li>actividades de seguimiento por parte de terceros</li>
- <li>personas merodeando cerca de tu ordenador</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-fa-xlarge/incognito_mode_start_page.html b/core/res/res/raw-fa-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index f004120a62e4..000000000000
--- a/core/res/res/raw-fa-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="RTL">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>پنجره ناشناس جدید</title>
- </head>
- <body>
- <p><strong>شما به صورت ناشناس وارد شده اید</strong> صفحاتی که شما در این پنجره مشاهده میکنید در سابقه مرورگر یا سابقه جستجوی شما ظاهر نمیشوند، و پس از بستن پنجره ناشناس، دنباله ای از خود مانند کوکی ها روی دستگاه شما بر جای نمیگذارند. به هر حال، فایل های دانلود شده و نشانکهای صفحه ای که ایجاد کرده اید باقی خواهند ماند.</p>
-
- <p><strong>وارد شدن به صورت ناشناس، تاثیری بر روی رفتار افراد دیگر، سرورها و یا نرم افزارها ندارد. در خصوص موارد زیر هشیار باشید:</strong></p>
-
- <ul>
- <li>وبسایت هایی که اطلاعاتی را در مورد شما جمع آوری کرده و به اشتراک میگذارند</li>
- <li>تامین کننده های خدمات اینترنتی شما یا کارمندانی که صفحاتی که شما بازدید کرده اید را پیگیری میکنند</li>
- <li>نرم افزارهای مخربی که در ازای نشانک های رایگان، ضربات کلیدهای شما را ذخیره میکنند</li>
- <li>نظارت توسط نمایندگان سری</li>
- <li>افرادی که پشت سرتان ایستاده اند</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-fa/incognito_mode_start_page.html b/core/res/res/raw-fa/incognito_mode_start_page.html
deleted file mode 100644
index f004120a62e4..000000000000
--- a/core/res/res/raw-fa/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="RTL">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>پنجره ناشناس جدید</title>
- </head>
- <body>
- <p><strong>شما به صورت ناشناس وارد شده اید</strong> صفحاتی که شما در این پنجره مشاهده میکنید در سابقه مرورگر یا سابقه جستجوی شما ظاهر نمیشوند، و پس از بستن پنجره ناشناس، دنباله ای از خود مانند کوکی ها روی دستگاه شما بر جای نمیگذارند. به هر حال، فایل های دانلود شده و نشانکهای صفحه ای که ایجاد کرده اید باقی خواهند ماند.</p>
-
- <p><strong>وارد شدن به صورت ناشناس، تاثیری بر روی رفتار افراد دیگر، سرورها و یا نرم افزارها ندارد. در خصوص موارد زیر هشیار باشید:</strong></p>
-
- <ul>
- <li>وبسایت هایی که اطلاعاتی را در مورد شما جمع آوری کرده و به اشتراک میگذارند</li>
- <li>تامین کننده های خدمات اینترنتی شما یا کارمندانی که صفحاتی که شما بازدید کرده اید را پیگیری میکنند</li>
- <li>نرم افزارهای مخربی که در ازای نشانک های رایگان، ضربات کلیدهای شما را ذخیره میکنند</li>
- <li>نظارت توسط نمایندگان سری</li>
- <li>افرادی که پشت سرتان ایستاده اند</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-fi-xlarge/incognito_mode_start_page.html b/core/res/res/raw-fi-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index feb9f4faae32..000000000000
--- a/core/res/res/raw-fi-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Uusi incognito-ikkuna</title>
- </head>
- <body>
- <p><strong>Olet nyt incognito-tilassa</strong>. Incognito-tilassa katsellut sivut eivät näy selainhistoriassa eikä hakuhistoriassa. Ne eivät myöskään jätä muita jälkiä, kuten evästeitä, sivun sulkemisen jälkeen. Lataamasi tiedostot tai luomasi kirjanmerkit tosin tallentuvat.</p>
-
- <p><strong>Incognito-tilaan siirtyminen ei vaikuta muiden ihmisten, palvelimien tai tietokoneohjelmien toimintaan. Varo:</strong></p>
-
- <ul>
- <li>Verkkosivustoja jotka keräävät sinusta tietoa ja/tai jakavat sitä eteenpäin</li>
- <li>Internet-palveluntarjoajia ja työnantajia jotka seuraavat sivuja, joilla käyt</li>
- <li>Haittaohjelmia jotka seuraavat näppäimistön toimintaa ja tarjoavat vastineeksi ilmaisia hymiöitä</li>
- <li>Salaisten agenttien seurantaa</li>
- <li>Ihmisiä jotka seisovat takanasi</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-fi/incognito_mode_start_page.html b/core/res/res/raw-fi/incognito_mode_start_page.html
deleted file mode 100644
index feb9f4faae32..000000000000
--- a/core/res/res/raw-fi/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Uusi incognito-ikkuna</title>
- </head>
- <body>
- <p><strong>Olet nyt incognito-tilassa</strong>. Incognito-tilassa katsellut sivut eivät näy selainhistoriassa eikä hakuhistoriassa. Ne eivät myöskään jätä muita jälkiä, kuten evästeitä, sivun sulkemisen jälkeen. Lataamasi tiedostot tai luomasi kirjanmerkit tosin tallentuvat.</p>
-
- <p><strong>Incognito-tilaan siirtyminen ei vaikuta muiden ihmisten, palvelimien tai tietokoneohjelmien toimintaan. Varo:</strong></p>
-
- <ul>
- <li>Verkkosivustoja jotka keräävät sinusta tietoa ja/tai jakavat sitä eteenpäin</li>
- <li>Internet-palveluntarjoajia ja työnantajia jotka seuraavat sivuja, joilla käyt</li>
- <li>Haittaohjelmia jotka seuraavat näppäimistön toimintaa ja tarjoavat vastineeksi ilmaisia hymiöitä</li>
- <li>Salaisten agenttien seurantaa</li>
- <li>Ihmisiä jotka seisovat takanasi</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-fr-xlarge/incognito_mode_start_page.html b/core/res/res/raw-fr-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 8962cdf28859..000000000000
--- a/core/res/res/raw-fr-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nouvelle fenêtre de navigation privée</title>
- </head>
- <body>
- <p><strong>Vous êtes passé en navigation privée</strong>. Les pages que vous consultez dans cette fenêtre n'apparaîtront ni dans l'historique de votre navigateur, ni dans l'historique des recherches, et ne laisseront aucune trace (comme les cookies) sur votre appareil une fois que vous aurez fermé la fenêtre de navigation privée. Tous les fichiers téléchargés et les favoris créés seront toutefois conservés.</p>
-
- <p><strong>Passer en navigation privée n'a aucun effet sur les autres utilisateurs, serveurs ou logiciels. Méfiez-vous :</strong></p>
-
- <ul>
- <li>Des sites Web qui collectent ou partagent des informations vous concernant</li>
- <li>Des fournisseurs d'accès Internet ou des employeurs qui conservent une trace des pages que vous visitez</li>
- <li>Des programmes indésirables qui enregistrent vos frappes en échange d'émoticônes gratuites</li>
- <li>Des personnes qui pourraient surveiller vos activités</li>
- <li>Des personnes qui se tiennent derrière vous</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-fr/incognito_mode_start_page.html b/core/res/res/raw-fr/incognito_mode_start_page.html
deleted file mode 100644
index 8962cdf28859..000000000000
--- a/core/res/res/raw-fr/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nouvelle fenêtre de navigation privée</title>
- </head>
- <body>
- <p><strong>Vous êtes passé en navigation privée</strong>. Les pages que vous consultez dans cette fenêtre n'apparaîtront ni dans l'historique de votre navigateur, ni dans l'historique des recherches, et ne laisseront aucune trace (comme les cookies) sur votre appareil une fois que vous aurez fermé la fenêtre de navigation privée. Tous les fichiers téléchargés et les favoris créés seront toutefois conservés.</p>
-
- <p><strong>Passer en navigation privée n'a aucun effet sur les autres utilisateurs, serveurs ou logiciels. Méfiez-vous :</strong></p>
-
- <ul>
- <li>Des sites Web qui collectent ou partagent des informations vous concernant</li>
- <li>Des fournisseurs d'accès Internet ou des employeurs qui conservent une trace des pages que vous visitez</li>
- <li>Des programmes indésirables qui enregistrent vos frappes en échange d'émoticônes gratuites</li>
- <li>Des personnes qui pourraient surveiller vos activités</li>
- <li>Des personnes qui se tiennent derrière vous</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-hi-xlarge/incognito_mode_start_page.html b/core/res/res/raw-hi-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index f73c41d01e9c..000000000000
--- a/core/res/res/raw-hi-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>नई गुप्त विंडो</title>
- </head>
- <body>
- <p><strong>आप गुप्त मोड में हैं</strong>. इस विंडो में देखे गए पृष्ठ आपके ब्राउज़र इतिहास या खोज इतिहास में प्रकट नहीं होंगे, और वे आपके डिवाइस पर गुप्त विंडो बंद करने के बाद और कोई चिह्न जैसे कुकीज़, नहीं छोड़ते. हालांकि डाउनलोड की गई या बुकमार्क की गई कोई भी फ़ाइल संरक्षित रखी जाएगी.</p>
-
- <p><strong>गुप्त मोड में होने से दूसरे लोगों, सर्वर. या सॉफ़्टवेयर पर कोई प्रभाव नहीं होता. इनका ध्यान रखें</strong></p>
-
- <ul>
- <li>वे वेबसाइट जो आपके बारे में जानकारी एकत्र या शेयर करती हैं</li>
- <li>इंटरनेट सेवा प्रदाता या नियोक्ता जो आपके द्वारा विज़िट किए गए पृष्ठों पर नज़र रखते हैं</li>
- <li>दुर्भावनापूर्ण सॉफ़्टवेयर जो मुफ़्त स्माइली के बदले आपके कीस्ट्रोक पर नज़र रखते हैं.</li>
- <li>गुप्तचरों द्वारा निगरानी</li>
- <li>आपके पीछे खड़े लोग</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-hi/incognito_mode_start_page.html b/core/res/res/raw-hi/incognito_mode_start_page.html
deleted file mode 100644
index f73c41d01e9c..000000000000
--- a/core/res/res/raw-hi/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>नई गुप्त विंडो</title>
- </head>
- <body>
- <p><strong>आप गुप्त मोड में हैं</strong>. इस विंडो में देखे गए पृष्ठ आपके ब्राउज़र इतिहास या खोज इतिहास में प्रकट नहीं होंगे, और वे आपके डिवाइस पर गुप्त विंडो बंद करने के बाद और कोई चिह्न जैसे कुकीज़, नहीं छोड़ते. हालांकि डाउनलोड की गई या बुकमार्क की गई कोई भी फ़ाइल संरक्षित रखी जाएगी.</p>
-
- <p><strong>गुप्त मोड में होने से दूसरे लोगों, सर्वर. या सॉफ़्टवेयर पर कोई प्रभाव नहीं होता. इनका ध्यान रखें</strong></p>
-
- <ul>
- <li>वे वेबसाइट जो आपके बारे में जानकारी एकत्र या शेयर करती हैं</li>
- <li>इंटरनेट सेवा प्रदाता या नियोक्ता जो आपके द्वारा विज़िट किए गए पृष्ठों पर नज़र रखते हैं</li>
- <li>दुर्भावनापूर्ण सॉफ़्टवेयर जो मुफ़्त स्माइली के बदले आपके कीस्ट्रोक पर नज़र रखते हैं.</li>
- <li>गुप्तचरों द्वारा निगरानी</li>
- <li>आपके पीछे खड़े लोग</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-hr-xlarge/incognito_mode_start_page.html b/core/res/res/raw-hr-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 6f20fe0ecfd9..000000000000
--- a/core/res/res/raw-hr-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Novi anonimni prozor</title>
- </head>
- <body>
- <p><strong>Sada ste anonimni</strong>. Stranice koje pregledavate u ovom prozoru neće se pojaviti u povijesti preglednika ili povijesti pretraživanja, neće ostaviti tragove, poput kolačića, na vašem uređaju nakon što zatvorite anonimni prozor. Međutim, sve datoteke koje preuzmete ili oznake koje stvorite bit će sačuvane.</p>
-
- <p><strong>Anonimno pregledavanje neće utjecati na ponašanje drugih osoba, poslužitelja ili softvera. Pazite na sljedeće:</strong></p>
-
- <ul>
- <li>Web-lokacije koje prikupljaju ili dijele informacije o vama</li>
- <li>Davatelje internetskih usluga ili poslodavce koji prate stranice koje posjećujete</li>
- <li>Zlonamjerni softver koji prati koje tipke pritišćete u zamjenu za besplatne emotikone</li>
- <li>Nadzor tajnih službi</li>
- <li>Osobe koje stoje iza vas</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-hr/incognito_mode_start_page.html b/core/res/res/raw-hr/incognito_mode_start_page.html
deleted file mode 100644
index 6f20fe0ecfd9..000000000000
--- a/core/res/res/raw-hr/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Novi anonimni prozor</title>
- </head>
- <body>
- <p><strong>Sada ste anonimni</strong>. Stranice koje pregledavate u ovom prozoru neće se pojaviti u povijesti preglednika ili povijesti pretraživanja, neće ostaviti tragove, poput kolačića, na vašem uređaju nakon što zatvorite anonimni prozor. Međutim, sve datoteke koje preuzmete ili oznake koje stvorite bit će sačuvane.</p>
-
- <p><strong>Anonimno pregledavanje neće utjecati na ponašanje drugih osoba, poslužitelja ili softvera. Pazite na sljedeće:</strong></p>
-
- <ul>
- <li>Web-lokacije koje prikupljaju ili dijele informacije o vama</li>
- <li>Davatelje internetskih usluga ili poslodavce koji prate stranice koje posjećujete</li>
- <li>Zlonamjerni softver koji prati koje tipke pritišćete u zamjenu za besplatne emotikone</li>
- <li>Nadzor tajnih službi</li>
- <li>Osobe koje stoje iza vas</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-hu-xlarge/incognito_mode_start_page.html b/core/res/res/raw-hu-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 38b0806a1d58..000000000000
--- a/core/res/res/raw-hu-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Új inkognitóablak</title>
- </head>
- <body>
- <p><strong>Ön inkognitó módra váltott</strong>. Az inkognitóablakban megtekintett oldalak nem jelennek meg böngészője előzményeiben, illetve keresési előzményeiben, és nem hagynak más nyomot pl. cookie-t sem a számítógépén az inkognitóablak bezárását követően. A letöltött fájlok, valamint a létrehozott könyvjelzők azonban megmaradnak.</p>
-
- <p><strong>Az inkognitó üzemmód nem befolyásolja a többi felhasználó, szerver vagy szoftver viselkedését. Ügyeljen a következőkre:</strong></p>
-
- <ul>
- <li>Olyan webhelyek, amelyek információt gyűjtenek vagy osztanak meg Önről</li>
- <li>Olyan internetszolgáltatók vagy alkalmazottaik, akik nyomon követik az Ön által látogatott oldalakat</li>
- <li>Olyan kártékony szoftverek, amelyek ingyenes hangulatjelekért cserébe nyomon követik billentyűbeviteleit</li>
- <li>Titkos ügynökök megfigyelése</li>
- <li>Az Ön mögött álló emberek</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-hu/incognito_mode_start_page.html b/core/res/res/raw-hu/incognito_mode_start_page.html
deleted file mode 100644
index 38b0806a1d58..000000000000
--- a/core/res/res/raw-hu/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Új inkognitóablak</title>
- </head>
- <body>
- <p><strong>Ön inkognitó módra váltott</strong>. Az inkognitóablakban megtekintett oldalak nem jelennek meg böngészője előzményeiben, illetve keresési előzményeiben, és nem hagynak más nyomot pl. cookie-t sem a számítógépén az inkognitóablak bezárását követően. A letöltött fájlok, valamint a létrehozott könyvjelzők azonban megmaradnak.</p>
-
- <p><strong>Az inkognitó üzemmód nem befolyásolja a többi felhasználó, szerver vagy szoftver viselkedését. Ügyeljen a következőkre:</strong></p>
-
- <ul>
- <li>Olyan webhelyek, amelyek információt gyűjtenek vagy osztanak meg Önről</li>
- <li>Olyan internetszolgáltatók vagy alkalmazottaik, akik nyomon követik az Ön által látogatott oldalakat</li>
- <li>Olyan kártékony szoftverek, amelyek ingyenes hangulatjelekért cserébe nyomon követik billentyűbeviteleit</li>
- <li>Titkos ügynökök megfigyelése</li>
- <li>Az Ön mögött álló emberek</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-id-xlarge/incognito_mode_start_page.html b/core/res/res/raw-id-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 788c08868012..000000000000
--- a/core/res/res/raw-id-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Jendela penyamaran baru</title>
- </head>
- <body>
- <p><strong>Anda menggunakan penyamaran</strong>. Laman yang Anda lihat di jendela ini tidak akan ditampilkan dalam riwayat peramban atau riwayat penelusuran, dan tidak akan meninggalkan jejak, seperti kuki, di perangkat setelah jendela penyamaran ditutup. Namun, berkas yang diunduh atau bookmark yang dibuat akan disimpan.</p>
-
- <p><strong>Menggunakan penyamaran tidak mempengaruhi perilaku orang lain, server, atau perangkat lunak. Waspadai:</strong></p>
-
- <ul>
- <li>Situs web yang mengumpulkan atau berbagi informasi tentang Anda</li>
- <li>Penyedia layanan internet atau tempat kerja yang melacak laman yang Anda kunjungi</li>
- <li>Perangkat lunak jahat yang melacak penekanan tombol dengan imbalan smiley gratis</li>
- <li>Pemantauan oleh agen rahasia</li>
- <li>Orang yang berdiri di belakang Anda</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-id/incognito_mode_start_page.html b/core/res/res/raw-id/incognito_mode_start_page.html
deleted file mode 100644
index 788c08868012..000000000000
--- a/core/res/res/raw-id/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Jendela penyamaran baru</title>
- </head>
- <body>
- <p><strong>Anda menggunakan penyamaran</strong>. Laman yang Anda lihat di jendela ini tidak akan ditampilkan dalam riwayat peramban atau riwayat penelusuran, dan tidak akan meninggalkan jejak, seperti kuki, di perangkat setelah jendela penyamaran ditutup. Namun, berkas yang diunduh atau bookmark yang dibuat akan disimpan.</p>
-
- <p><strong>Menggunakan penyamaran tidak mempengaruhi perilaku orang lain, server, atau perangkat lunak. Waspadai:</strong></p>
-
- <ul>
- <li>Situs web yang mengumpulkan atau berbagi informasi tentang Anda</li>
- <li>Penyedia layanan internet atau tempat kerja yang melacak laman yang Anda kunjungi</li>
- <li>Perangkat lunak jahat yang melacak penekanan tombol dengan imbalan smiley gratis</li>
- <li>Pemantauan oleh agen rahasia</li>
- <li>Orang yang berdiri di belakang Anda</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-it-xlarge/incognito_mode_start_page.html b/core/res/res/raw-it-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 4a34874462da..000000000000
--- a/core/res/res/raw-it-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nuova finestra di navigazione in incognito</title>
- </head>
- <body>
- <p><strong>Sei passato alla navigazione in incognito</strong>. Le pagine aperte in questa finestra non vengono registrate nella cronologia di navigazione o di ricerca, e non lasciano traccia sul tuo computer, ad esempio sotto forma di cookie, una volta chiusa la finestra. Tuttavia, qualsiasi file scaricato o preferito creato verrà conservato.</p>
-
- <p><strong>La navigazione in incognito non influisce sul comportamento di altri utenti, server o software. Diffida di:</strong></p>
-
- <ul>
- <li>Siti web che raccolgono o condividono informazioni su di te</li>
- <li>Provider di servizi Internet o datori di lavoro che registrano le pagine da te visitate</li>
- <li>Software dannosi che registrano le sequenze di tasti da te utilizzate in cambio di smiley gratuiti</li>
- <li>Agenti segreti</li>
- <li>Persone che ti stanno alle spalle</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-it/incognito_mode_start_page.html b/core/res/res/raw-it/incognito_mode_start_page.html
deleted file mode 100644
index 4a34874462da..000000000000
--- a/core/res/res/raw-it/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nuova finestra di navigazione in incognito</title>
- </head>
- <body>
- <p><strong>Sei passato alla navigazione in incognito</strong>. Le pagine aperte in questa finestra non vengono registrate nella cronologia di navigazione o di ricerca, e non lasciano traccia sul tuo computer, ad esempio sotto forma di cookie, una volta chiusa la finestra. Tuttavia, qualsiasi file scaricato o preferito creato verrà conservato.</p>
-
- <p><strong>La navigazione in incognito non influisce sul comportamento di altri utenti, server o software. Diffida di:</strong></p>
-
- <ul>
- <li>Siti web che raccolgono o condividono informazioni su di te</li>
- <li>Provider di servizi Internet o datori di lavoro che registrano le pagine da te visitate</li>
- <li>Software dannosi che registrano le sequenze di tasti da te utilizzate in cambio di smiley gratuiti</li>
- <li>Agenti segreti</li>
- <li>Persone che ti stanno alle spalle</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-iw-xlarge/incognito_mode_start_page.html b/core/res/res/raw-iw-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 368dea0ed395..000000000000
--- a/core/res/res/raw-iw-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="RTL">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>חלון חדש של גלישה בסתר</title>
- </head>
- <body>
- <p><strong>עברת למצב של גלישה בסתר</strong>. דפים שאתה רואה בחלון זה לא יופיעו בהיסטוריית הדפדפן או בהיסטוריית החיפושים שלך, והם לא ישאירו עקבות אחרים, כמו קובצי cookie, לאחר שתסגור את חלון הגלישה בסתר. עם זאת, כל קובץ שאתה מוריד או כוכביות שאתה יוצר יישמרו.</p>
-
- <p><strong> גלישה בסתר לא משפיעה על התנהגותם של אנשים אחרים, שרתים אחרים או תוכנות אחרות. היזהר מ:</strong></p>
-
- <ul>
- <li>אתרים שאוספים נתונים או משתפים מידע לגביך</li>
- <li>ספקי שירות אינטרנט או עובדים שעוקבים אחר הדפים שבהם אתה מבקר</li>
- <li>תוכנה זדונית שעוקבת אחר ההקשות שלך על המקשים בתמורה לסימני סמיילי בחינם</li>
- <li>מעקב של סוכנים חשאיים</li>
- <li>אנשים שעומדים מאחוריך</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-iw/incognito_mode_start_page.html b/core/res/res/raw-iw/incognito_mode_start_page.html
deleted file mode 100644
index 368dea0ed395..000000000000
--- a/core/res/res/raw-iw/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="RTL">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>חלון חדש של גלישה בסתר</title>
- </head>
- <body>
- <p><strong>עברת למצב של גלישה בסתר</strong>. דפים שאתה רואה בחלון זה לא יופיעו בהיסטוריית הדפדפן או בהיסטוריית החיפושים שלך, והם לא ישאירו עקבות אחרים, כמו קובצי cookie, לאחר שתסגור את חלון הגלישה בסתר. עם זאת, כל קובץ שאתה מוריד או כוכביות שאתה יוצר יישמרו.</p>
-
- <p><strong> גלישה בסתר לא משפיעה על התנהגותם של אנשים אחרים, שרתים אחרים או תוכנות אחרות. היזהר מ:</strong></p>
-
- <ul>
- <li>אתרים שאוספים נתונים או משתפים מידע לגביך</li>
- <li>ספקי שירות אינטרנט או עובדים שעוקבים אחר הדפים שבהם אתה מבקר</li>
- <li>תוכנה זדונית שעוקבת אחר ההקשות שלך על המקשים בתמורה לסימני סמיילי בחינם</li>
- <li>מעקב של סוכנים חשאיים</li>
- <li>אנשים שעומדים מאחוריך</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ja-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ja-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index a58ad05c2ea7..000000000000
--- a/core/res/res/raw-ja-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>新しいシークレットウィンドウ</title>
- </head>
- <body>
- <p><strong>シークレットモードを使用中です</strong>。このウィンドウで開いたページはブラウザの履歴や検索履歴に残りません。このウィンドウを閉じるとCookieなどの記録も端末から消去されます。ただし、ダウンロードしたファイルやブックマークしたページは保存されます。</p>
-
- <p><strong>シークレットモードが他のユーザーやサーバー、ソフトウェアの動作に影響することはありません。なお、下記のようなケースにご注意ください。</strong></p>
-
- <ul>
- <li>ユーザーの情報を収集、共有するウェブサイト</li>
- <li>アクセスしたページをトラッキングするインターネットサービスプロバイダや雇用主</li>
- <li>無料ダウンロードなどと一緒にインストールされ、キーストロークを記録するマルウェア</li>
- <li>スパイ、諜報活動</li>
- <li>背後にいる人</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ja/incognito_mode_start_page.html b/core/res/res/raw-ja/incognito_mode_start_page.html
deleted file mode 100644
index a58ad05c2ea7..000000000000
--- a/core/res/res/raw-ja/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>新しいシークレットウィンドウ</title>
- </head>
- <body>
- <p><strong>シークレットモードを使用中です</strong>。このウィンドウで開いたページはブラウザの履歴や検索履歴に残りません。このウィンドウを閉じるとCookieなどの記録も端末から消去されます。ただし、ダウンロードしたファイルやブックマークしたページは保存されます。</p>
-
- <p><strong>シークレットモードが他のユーザーやサーバー、ソフトウェアの動作に影響することはありません。なお、下記のようなケースにご注意ください。</strong></p>
-
- <ul>
- <li>ユーザーの情報を収集、共有するウェブサイト</li>
- <li>アクセスしたページをトラッキングするインターネットサービスプロバイダや雇用主</li>
- <li>無料ダウンロードなどと一緒にインストールされ、キーストロークを記録するマルウェア</li>
- <li>スパイ、諜報活動</li>
- <li>背後にいる人</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ko-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ko-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 0e703b100102..000000000000
--- a/core/res/res/raw-ko-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>새 시크릿 창</title>
- </head>
- <body>
- <p><strong>시크릿 모드로 들어오셨습니다.</strong> 이 창에서 보는 페이지는 브라우저 기록이나 검색기록에 남지 않으며, 시크릿 창을 닫은 뒤 기기에 쿠기와 같은 흔적도 남기지 않습니다. 다운로드한 파일이나 생성한 북마크는 보관됩니다. </p>
-
- <p><strong>시크릿 모드를 이용해도 다른 사용자, 서버, 소프트웨어에 영향을 주지는 않습니다. 다음을 주의하세요.</strong></p>
-
- <ul>
- <li>사용자에 대한 정보를 모으고 공유하는 웹사이트</li>
- <li>방문 페이지를 추적하는 인터넷 서비스 제공업체나 직원 </li>
- <li>스마일 이모티콘을 제공한다는 명목으로 입력 내용을 추적하는 악성 소프트웨어</li>
- <li>비밀 개체를 통한 감시</li>
- <li>뒤에서 사용자의 작업내용을 지켜보는 사람</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ko/incognito_mode_start_page.html b/core/res/res/raw-ko/incognito_mode_start_page.html
deleted file mode 100644
index 0e703b100102..000000000000
--- a/core/res/res/raw-ko/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>새 시크릿 창</title>
- </head>
- <body>
- <p><strong>시크릿 모드로 들어오셨습니다.</strong> 이 창에서 보는 페이지는 브라우저 기록이나 검색기록에 남지 않으며, 시크릿 창을 닫은 뒤 기기에 쿠기와 같은 흔적도 남기지 않습니다. 다운로드한 파일이나 생성한 북마크는 보관됩니다. </p>
-
- <p><strong>시크릿 모드를 이용해도 다른 사용자, 서버, 소프트웨어에 영향을 주지는 않습니다. 다음을 주의하세요.</strong></p>
-
- <ul>
- <li>사용자에 대한 정보를 모으고 공유하는 웹사이트</li>
- <li>방문 페이지를 추적하는 인터넷 서비스 제공업체나 직원 </li>
- <li>스마일 이모티콘을 제공한다는 명목으로 입력 내용을 추적하는 악성 소프트웨어</li>
- <li>비밀 개체를 통한 감시</li>
- <li>뒤에서 사용자의 작업내용을 지켜보는 사람</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-lt-xlarge/incognito_mode_start_page.html b/core/res/res/raw-lt-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 9244ae4398b1..000000000000
--- a/core/res/res/raw-lt-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Naujas inkognito langas</title>
- </head>
- <body>
- <p><strong>Naršote inkognito režimu</strong>. Šiame lange peržiūrimi puslapiai nebus išsaugomi naršyklės istorijoje ar paieškos istorijoje ir uždarius inkognito langą nepaliks jokių kitų žymių, pvz., slapukų. Tačiau bus išsaugoti atsisiųsti failai ar sukurtos žymos.</p>
-
- <p><strong>Naršymas inkognito režimu nedaro jokios įtakos kitiems asmenims, serveriams ar programinei įrangai. Saugokitės:</strong></p>
-
- <ul>
- <li>svetainių, kurios renka ar platina informaciją apie jus</li>
- <li>interneto paslaugos teikėjų ar darbdavių, kurie stebi, kuriuos puslapius peržiūrite</li>
- <li>kenkėjiškos programinės įrangos, kuri siūlydama nemokamų šypsniukų fiksuoja klavišų paspaudimus</li>
- <li>jus galinčių sekti slaptųjų agentų</li>
- <li>už nugaros stovinčių asmenų</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-lt/incognito_mode_start_page.html b/core/res/res/raw-lt/incognito_mode_start_page.html
deleted file mode 100644
index 9244ae4398b1..000000000000
--- a/core/res/res/raw-lt/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Naujas inkognito langas</title>
- </head>
- <body>
- <p><strong>Naršote inkognito režimu</strong>. Šiame lange peržiūrimi puslapiai nebus išsaugomi naršyklės istorijoje ar paieškos istorijoje ir uždarius inkognito langą nepaliks jokių kitų žymių, pvz., slapukų. Tačiau bus išsaugoti atsisiųsti failai ar sukurtos žymos.</p>
-
- <p><strong>Naršymas inkognito režimu nedaro jokios įtakos kitiems asmenims, serveriams ar programinei įrangai. Saugokitės:</strong></p>
-
- <ul>
- <li>svetainių, kurios renka ar platina informaciją apie jus</li>
- <li>interneto paslaugos teikėjų ar darbdavių, kurie stebi, kuriuos puslapius peržiūrite</li>
- <li>kenkėjiškos programinės įrangos, kuri siūlydama nemokamų šypsniukų fiksuoja klavišų paspaudimus</li>
- <li>jus galinčių sekti slaptųjų agentų</li>
- <li>už nugaros stovinčių asmenų</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-lv-xlarge/incognito_mode_start_page.html b/core/res/res/raw-lv-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index f325ef5267b9..000000000000
--- a/core/res/res/raw-lv-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Jauns inkognito logs</title>
- </head>
- <body>
- <p><strong>Jūs esat ieslēdzis inkognito režīmu</strong>. Šajā logā aplūkotās lapas neparādīsies jūsu pārlūkprogrammas vēsturē vai meklēšanas vēsturē, tās arī neatstās citas pēdas, piemēram, sīkfailus, jūsu ierīcē pēc inkognito režīma loga aizvēršanas. Tomēr visi jūsu lejupielādētie faili vai izveidotās grāmatzīmes tiks saglabātas.</p>
-
- <p><strong>Inkognito režīma ieslēgšana neietekmēs citu personu, serveru vai programmatūras darbību. Uzmanieties no</strong></p>
-
- <ul>
- <li>vietnēm, kas apkopo vai koplieto informāciju par jums;</li>
- <li>interneta pakalpojumu sniedzējiem vai darba devējiem, kas izseko jūsu apmeklētajām lapām;</li>
- <li>maldprogrammatūras, kas izseko jūsu taustiņsitieniem apmaiņā par bezmaksas smaidiņiem;</li>
- <li>slepeno aģentu veiktas izmeklēšanas;</li>
- <li>personām, kas stāv aiz jums.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-lv/incognito_mode_start_page.html b/core/res/res/raw-lv/incognito_mode_start_page.html
deleted file mode 100644
index f325ef5267b9..000000000000
--- a/core/res/res/raw-lv/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Jauns inkognito logs</title>
- </head>
- <body>
- <p><strong>Jūs esat ieslēdzis inkognito režīmu</strong>. Šajā logā aplūkotās lapas neparādīsies jūsu pārlūkprogrammas vēsturē vai meklēšanas vēsturē, tās arī neatstās citas pēdas, piemēram, sīkfailus, jūsu ierīcē pēc inkognito režīma loga aizvēršanas. Tomēr visi jūsu lejupielādētie faili vai izveidotās grāmatzīmes tiks saglabātas.</p>
-
- <p><strong>Inkognito režīma ieslēgšana neietekmēs citu personu, serveru vai programmatūras darbību. Uzmanieties no</strong></p>
-
- <ul>
- <li>vietnēm, kas apkopo vai koplieto informāciju par jums;</li>
- <li>interneta pakalpojumu sniedzējiem vai darba devējiem, kas izseko jūsu apmeklētajām lapām;</li>
- <li>maldprogrammatūras, kas izseko jūsu taustiņsitieniem apmaiņā par bezmaksas smaidiņiem;</li>
- <li>slepeno aģentu veiktas izmeklēšanas;</li>
- <li>personām, kas stāv aiz jums.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-nb-xlarge/incognito_mode_start_page.html b/core/res/res/raw-nb-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 724e73433fcb..000000000000
--- a/core/res/res/raw-nb-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nytt inkognitovindu</title>
- </head>
- <body>
- <p><strong></strong>Du er nå inkognito Sider du besøker i dette vinduet blir ikke lagret i nettleser- eller søkelogg, og etterlater ikke andre spor, f. eks. informasjonskapsler, på enheten din etter at du har lukket vinduet. Filer du laster ned eller bokmerker du lager blir derimot lagret.</p>
-
- <p><strong>Det at du er inkognito endrer ikke hvordan andre mennesker, tjenere eller programmer oppfører seg. Pass deg for:</strong></p>
-
- <ul>
- <li>Nettsider som samler eller deler informasjon om deg</li>
- <li>Nettleverandører eller arbeidsgivere som overvåker hvilke sider du besøker</li>
- <li>Skadelige programmer som følger med på tastetrykk i bytte mot smilefjes</li>
- <li>Hemmelige agenter som spionerer på deg</li>
- <li>Folk som titter over skulderen din</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-nb/incognito_mode_start_page.html b/core/res/res/raw-nb/incognito_mode_start_page.html
deleted file mode 100644
index 724e73433fcb..000000000000
--- a/core/res/res/raw-nb/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nytt inkognitovindu</title>
- </head>
- <body>
- <p><strong></strong>Du er nå inkognito Sider du besøker i dette vinduet blir ikke lagret i nettleser- eller søkelogg, og etterlater ikke andre spor, f. eks. informasjonskapsler, på enheten din etter at du har lukket vinduet. Filer du laster ned eller bokmerker du lager blir derimot lagret.</p>
-
- <p><strong>Det at du er inkognito endrer ikke hvordan andre mennesker, tjenere eller programmer oppfører seg. Pass deg for:</strong></p>
-
- <ul>
- <li>Nettsider som samler eller deler informasjon om deg</li>
- <li>Nettleverandører eller arbeidsgivere som overvåker hvilke sider du besøker</li>
- <li>Skadelige programmer som følger med på tastetrykk i bytte mot smilefjes</li>
- <li>Hemmelige agenter som spionerer på deg</li>
- <li>Folk som titter over skulderen din</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-nl-xlarge/incognito_mode_start_page.html b/core/res/res/raw-nl-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 92fedd725fe6..000000000000
--- a/core/res/res/raw-nl-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nieuw incognitovenster</title>
- </head>
- <body>
- <p><strong>U bent nu incognito</strong> De pagina's die u in dit venster bekijkt worden niet opgenomen in de browsergeschiedenis en de zoekgeschiedenis en laten geen cookies of andere sporen na op uw apparaat nadat u het incognitovenster hebt gesloten. Alle bestanden die u downloadt en bladwijzers die u maakt, blijven echter behouden.</p>
-
- <p><strong>Incognito zijn heeft geen invloed op het gedrag van andere personen, servers of software. Wees op uw hoede voor:</strong></p>
-
- <ul>
- <li>Websites die informatie over u verzamelen of delen</li>
- <li>Internetproviders of werkgevers die bijhouden welke pagina's u bezoekt</li>
- <li>Schadelijke software die uw toetsaanslagen registreert in ruil voor gratis emoticons</li>
- <li>Spionage door geheim agenten</li>
- <li>Mensen die achter u staan</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-nl/incognito_mode_start_page.html b/core/res/res/raw-nl/incognito_mode_start_page.html
deleted file mode 100644
index 92fedd725fe6..000000000000
--- a/core/res/res/raw-nl/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nieuw incognitovenster</title>
- </head>
- <body>
- <p><strong>U bent nu incognito</strong> De pagina's die u in dit venster bekijkt worden niet opgenomen in de browsergeschiedenis en de zoekgeschiedenis en laten geen cookies of andere sporen na op uw apparaat nadat u het incognitovenster hebt gesloten. Alle bestanden die u downloadt en bladwijzers die u maakt, blijven echter behouden.</p>
-
- <p><strong>Incognito zijn heeft geen invloed op het gedrag van andere personen, servers of software. Wees op uw hoede voor:</strong></p>
-
- <ul>
- <li>Websites die informatie over u verzamelen of delen</li>
- <li>Internetproviders of werkgevers die bijhouden welke pagina's u bezoekt</li>
- <li>Schadelijke software die uw toetsaanslagen registreert in ruil voor gratis emoticons</li>
- <li>Spionage door geheim agenten</li>
- <li>Mensen die achter u staan</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-pl-xlarge/incognito_mode_start_page.html b/core/res/res/raw-pl-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 9748ead325a2..000000000000
--- a/core/res/res/raw-pl-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nowe okno incognito</title>
- </head>
- <body>
- <p><strong>Jesteś teraz incognito</strong> Strony przeglądane w tym oknie nie będą wyświetlane w historii przeglądarki ani w historii wyszukiwania. Po zamknięciu okna incognito na komputerze nie zostanie po nich żaden ślad np. w postaci plików cookie. Zachowane zostaną jednak pobrane pliki lub utworzone zakładki.</p>
-
- <p><strong>Przejście do trybu incognito nie ma wpływu na działania innych osób, serwery ani oprogramowanie. Należy uważać na:</strong></p>
-
- <ul>
- <li>witryny zbierające lub udostępniające dane na temat użytkowników</li>
- <li>dostawców usług internetowych oraz pracowników monitorujących strony odwiedzane przez użytkowników</li>
- <li>złośliwe oprogramowanie śledzące naciśnięcia klawiszy (np. w zamian za darmowe emotikony)</li>
- <li>aktywność wywiadowczą tajnych agentów</li>
- <li>osoby stojące za plecami</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-pl/incognito_mode_start_page.html b/core/res/res/raw-pl/incognito_mode_start_page.html
deleted file mode 100644
index 9748ead325a2..000000000000
--- a/core/res/res/raw-pl/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nowe okno incognito</title>
- </head>
- <body>
- <p><strong>Jesteś teraz incognito</strong> Strony przeglądane w tym oknie nie będą wyświetlane w historii przeglądarki ani w historii wyszukiwania. Po zamknięciu okna incognito na komputerze nie zostanie po nich żaden ślad np. w postaci plików cookie. Zachowane zostaną jednak pobrane pliki lub utworzone zakładki.</p>
-
- <p><strong>Przejście do trybu incognito nie ma wpływu na działania innych osób, serwery ani oprogramowanie. Należy uważać na:</strong></p>
-
- <ul>
- <li>witryny zbierające lub udostępniające dane na temat użytkowników</li>
- <li>dostawców usług internetowych oraz pracowników monitorujących strony odwiedzane przez użytkowników</li>
- <li>złośliwe oprogramowanie śledzące naciśnięcia klawiszy (np. w zamian za darmowe emotikony)</li>
- <li>aktywność wywiadowczą tajnych agentów</li>
- <li>osoby stojące za plecami</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-pt-rPT-xlarge/incognito_mode_start_page.html b/core/res/res/raw-pt-rPT-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 89a5ab0de880..000000000000
--- a/core/res/res/raw-pt-rPT-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nova janela de navegação anónima</title>
- </head>
- <body>
- <p><strong>Está no modo de navegação anónima</strong>. As páginas que visualizar nesta janela não vão aparecer nos históricos de pesquisa ou de navegação e não deixarão quaisquer vestígios (por exemplo cookies) no computador depois de fechar a janela. No entanto se transferir ficheiros ou criar marcadores, estes serão preservados.</p>
-
- <p><strong>Navegar no modo de navegação anónima não afecta o comportamento de outras pessoas, nem o comportamento de servidores ou programas. Tenha cuidado com:</strong></p>
-
- <ul>
- <li>Web sites que recolhem ou partilham informações sobre si</li>
- <li>Serviços de fornecimento de internet ou empregadores que monitorizam as páginas que você visita</li>
- <li>Programas maliciosos que monitorizam as teclas em que carrega em troca de ícones expressivos ("smileys")</li>
- <li>Vigilância de agentes secretos</li>
- <li>Pessoas que estejam perto de si</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-pt-rPT/incognito_mode_start_page.html b/core/res/res/raw-pt-rPT/incognito_mode_start_page.html
deleted file mode 100644
index 89a5ab0de880..000000000000
--- a/core/res/res/raw-pt-rPT/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nova janela de navegação anónima</title>
- </head>
- <body>
- <p><strong>Está no modo de navegação anónima</strong>. As páginas que visualizar nesta janela não vão aparecer nos históricos de pesquisa ou de navegação e não deixarão quaisquer vestígios (por exemplo cookies) no computador depois de fechar a janela. No entanto se transferir ficheiros ou criar marcadores, estes serão preservados.</p>
-
- <p><strong>Navegar no modo de navegação anónima não afecta o comportamento de outras pessoas, nem o comportamento de servidores ou programas. Tenha cuidado com:</strong></p>
-
- <ul>
- <li>Web sites que recolhem ou partilham informações sobre si</li>
- <li>Serviços de fornecimento de internet ou empregadores que monitorizam as páginas que você visita</li>
- <li>Programas maliciosos que monitorizam as teclas em que carrega em troca de ícones expressivos ("smileys")</li>
- <li>Vigilância de agentes secretos</li>
- <li>Pessoas que estejam perto de si</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-pt-xlarge/incognito_mode_start_page.html b/core/res/res/raw-pt-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index b301eda73f49..000000000000
--- a/core/res/res/raw-pt-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nova janela anônima</title>
- </head>
- <body>
- <p><strong>Você ficou anônimo</strong>. As páginas que você vê nesta janela não aparecerão no histórico do seu navegador ou da sua pesquisa e não deixarão rastros, como cookies, no seu dispositivo depois que você fechar a janela anônima. Quaisquer arquivos que você fizer o download ou favoritos que criar serão preservados.</p>
-
- <p><strong>Tornar-se anônimo não afeta o comportamento de outras pessoas, servidores ou software. Esteja atento a:</strong></p>
-
- <ul>
- <li>Websites que coletam ou compartilham informações sobre você</li>
- <li>Provedores de serviços de internet ou funcionários que rastreiam as páginas que você visita</li>
- <li>Softwares maliciosos que rastreiam os seus toques de teclado em troca de ícones gratuitos</li>
- <li>Vigilância por agentes secretos</li>
- <li>Pessoas paradas detrás de você</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-pt/incognito_mode_start_page.html b/core/res/res/raw-pt/incognito_mode_start_page.html
deleted file mode 100644
index b301eda73f49..000000000000
--- a/core/res/res/raw-pt/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nova janela anônima</title>
- </head>
- <body>
- <p><strong>Você ficou anônimo</strong>. As páginas que você vê nesta janela não aparecerão no histórico do seu navegador ou da sua pesquisa e não deixarão rastros, como cookies, no seu dispositivo depois que você fechar a janela anônima. Quaisquer arquivos que você fizer o download ou favoritos que criar serão preservados.</p>
-
- <p><strong>Tornar-se anônimo não afeta o comportamento de outras pessoas, servidores ou software. Esteja atento a:</strong></p>
-
- <ul>
- <li>Websites que coletam ou compartilham informações sobre você</li>
- <li>Provedores de serviços de internet ou funcionários que rastreiam as páginas que você visita</li>
- <li>Softwares maliciosos que rastreiam os seus toques de teclado em troca de ícones gratuitos</li>
- <li>Vigilância por agentes secretos</li>
- <li>Pessoas paradas detrás de você</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ro-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ro-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 3e499d30039c..000000000000
--- a/core/res/res/raw-ro-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Fereastră incognito nouă</title>
- </head>
- <body>
- <p><strong>Navigaţi incognito</strong>. Paginile pe care le afişaţi în această fereastră nu vor apărea în istoricul browserului sau al căutărilor şi nu vor lăsa alte urme, precum cookie-uri, pe dispozitivul dvs. după ce închideţi fereastra incognito. Dar fişierele descărcate şi marcajele create vor fi păstrate.</p>
-
- <p><strong>Navigarea incognito nu influenţează comportamentul altor persoane, servere sau aplicaţii software. Fiţi atent(ă) la:</strong></p>
-
- <ul>
- <li>site-urile web care colectează sau distribuie informaţii despre dvs.;</li>
- <li>furnizorii de servicii de internet sau angajatorii care urmăresc paginile pe care le accesaţi;</li>
- <li>aplicaţiile software rău intenţionate care vă urmăresc apăsările pe taste promiţându-vă că vă oferă emoticonuri gratuite;</li>
- <li>acţiunile de monitorizare efectuate de agenţi secreţi;</li>
- <li>persoanele din spatele dvs.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ro/incognito_mode_start_page.html b/core/res/res/raw-ro/incognito_mode_start_page.html
deleted file mode 100644
index 3e499d30039c..000000000000
--- a/core/res/res/raw-ro/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Fereastră incognito nouă</title>
- </head>
- <body>
- <p><strong>Navigaţi incognito</strong>. Paginile pe care le afişaţi în această fereastră nu vor apărea în istoricul browserului sau al căutărilor şi nu vor lăsa alte urme, precum cookie-uri, pe dispozitivul dvs. după ce închideţi fereastra incognito. Dar fişierele descărcate şi marcajele create vor fi păstrate.</p>
-
- <p><strong>Navigarea incognito nu influenţează comportamentul altor persoane, servere sau aplicaţii software. Fiţi atent(ă) la:</strong></p>
-
- <ul>
- <li>site-urile web care colectează sau distribuie informaţii despre dvs.;</li>
- <li>furnizorii de servicii de internet sau angajatorii care urmăresc paginile pe care le accesaţi;</li>
- <li>aplicaţiile software rău intenţionate care vă urmăresc apăsările pe taste promiţându-vă că vă oferă emoticonuri gratuite;</li>
- <li>acţiunile de monitorizare efectuate de agenţi secreţi;</li>
- <li>persoanele din spatele dvs.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ru-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ru-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index ae7b59cacfec..000000000000
--- a/core/res/res/raw-ru-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Новое окно в режиме инкогнито</title>
- </head>
- <body>
- <p><strong>Вы перешли в режим инкогнито</strong>. Страницы, которые вы просматриваете в окне в режиме инкогнито, не появятся в истории вашего браузера или истории поиска, а также не оставят на вашем компьютере других следов, таких как файлы cookie, когда вы закроете это окно. Тем не менее, все файлы, которые вы загружаете, или закладки, которые вы создаете, останутся в целости и сохранности. </p>
-
- <p><strong>Переход в режим инкогнито не влияет на поведение других пользователей, серверов или программ. Опасайтесь:</strong></p>
-
- <ul>
- <li>Веб-сайтов, которые собирают информацию о вас или передают ее другим</li>
- <li>Поставщиков услуг Интернета или их сотрудников, которые отслеживают, какие страницы вы посещаете</li>
- <li>Вредоносного ПО, которое отслеживает нажатие клавиш клавиатуры в обмен на бесплатные смайлики</li>
- <li>Слежки тайными агентами</li>
- <li>Людей, которые стоят у вас за спиной</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ru/incognito_mode_start_page.html b/core/res/res/raw-ru/incognito_mode_start_page.html
deleted file mode 100644
index ae7b59cacfec..000000000000
--- a/core/res/res/raw-ru/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Новое окно в режиме инкогнито</title>
- </head>
- <body>
- <p><strong>Вы перешли в режим инкогнито</strong>. Страницы, которые вы просматриваете в окне в режиме инкогнито, не появятся в истории вашего браузера или истории поиска, а также не оставят на вашем компьютере других следов, таких как файлы cookie, когда вы закроете это окно. Тем не менее, все файлы, которые вы загружаете, или закладки, которые вы создаете, останутся в целости и сохранности. </p>
-
- <p><strong>Переход в режим инкогнито не влияет на поведение других пользователей, серверов или программ. Опасайтесь:</strong></p>
-
- <ul>
- <li>Веб-сайтов, которые собирают информацию о вас или передают ее другим</li>
- <li>Поставщиков услуг Интернета или их сотрудников, которые отслеживают, какие страницы вы посещаете</li>
- <li>Вредоносного ПО, которое отслеживает нажатие клавиш клавиатуры в обмен на бесплатные смайлики</li>
- <li>Слежки тайными агентами</li>
- <li>Людей, которые стоят у вас за спиной</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sk-xlarge/incognito_mode_start_page.html b/core/res/res/raw-sk-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 5b138f1e087c..000000000000
--- a/core/res/res/raw-sk-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nové okno inkognito</title>
- </head>
- <body>
- <p><strong>Ste v režime inkognito</strong> Stránky, ktoré si pozriete v tomto okne, sa nezobrazia v histórii prehliadača ani v histórii vyhľadávania. Po zavretí okna inkognito na zariadení nezostanú ani žiadne iné stopy, ako sú napr. súbory cookie. Napriek tomu však zostanú zachované všetky prevzaté súbory aj záložky, ktoré ste vytvorili.</p>
-
- <p><strong>Režim inkognito neovplyvňuje správanie iných ľudí, serverov ani softvéru. Dávajte si pozor na:</strong></p>
-
- <ul>
- <li>webové stránky, ktoré zbierajú alebo zdieľajú vaše informácie;</li>
- <li>poskytovateľov internetových služieb alebo zamestnancov, ktorí sledujú vaše navštívené stránky;</li>
- <li>škodlivý softvér, ktorý sleduje ktoré klávesy stláčate výmenou za smajlíkov zadarmo;</li>
- <li>sledovanie tajnými agentmi;</li>
- <li>ľudí, ktorí stoja za vami.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sk/incognito_mode_start_page.html b/core/res/res/raw-sk/incognito_mode_start_page.html
deleted file mode 100644
index 5b138f1e087c..000000000000
--- a/core/res/res/raw-sk/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nové okno inkognito</title>
- </head>
- <body>
- <p><strong>Ste v režime inkognito</strong> Stránky, ktoré si pozriete v tomto okne, sa nezobrazia v histórii prehliadača ani v histórii vyhľadávania. Po zavretí okna inkognito na zariadení nezostanú ani žiadne iné stopy, ako sú napr. súbory cookie. Napriek tomu však zostanú zachované všetky prevzaté súbory aj záložky, ktoré ste vytvorili.</p>
-
- <p><strong>Režim inkognito neovplyvňuje správanie iných ľudí, serverov ani softvéru. Dávajte si pozor na:</strong></p>
-
- <ul>
- <li>webové stránky, ktoré zbierajú alebo zdieľajú vaše informácie;</li>
- <li>poskytovateľov internetových služieb alebo zamestnancov, ktorí sledujú vaše navštívené stránky;</li>
- <li>škodlivý softvér, ktorý sleduje ktoré klávesy stláčate výmenou za smajlíkov zadarmo;</li>
- <li>sledovanie tajnými agentmi;</li>
- <li>ľudí, ktorí stoja za vami.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sl-xlarge/incognito_mode_start_page.html b/core/res/res/raw-sl-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 33a8b08fed49..000000000000
--- a/core/res/res/raw-sl-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Novo okno brez beleženja zgodovine</title>
- </head>
- <body>
- <p><strong>Ste v načinu brez beleženja zgodovine.</strong> Strani, ki si jih ogledate v tem oknu, ne bodo prikazane v zgodovini brskalnika ali zgodovini iskanja, prav tako v vaši napravi ne bodo pustile sledi, kot npr. piškotkov, ko zaprete stran, ki jo imate odprto v tem načinu. Datoteke, ki jih prenesete ali zaznamki, ki jih ustvarite, bodo ohranjeni.</p>
-
- <p><strong>Funkcije brez beleženja zgodovine ne vplivajo na obnašanje drugih oseb, strežnikov ali programske opreme. Pazite na:</strong></p>
-
- <ul>
- <li>Spletna mesta, ki zbirajo informacije o vas ali jih dajejo v skupno rabo.</li>
- <li>Ponudnike internetnih storitev ali zaposlene, ki spremljajo spletna mesta, ki ste jih obiskali.</li>
- <li>Zlonamerno programsko opremo, ki spremlja vaše tipkanje, v zameno pa vam ponuja brezplačne čustvene simbole.</li>
- <li>Nadzor tajnih agentov.</li>
- <li>Osebe, ki stojijo za vašim hrbtom.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sl/incognito_mode_start_page.html b/core/res/res/raw-sl/incognito_mode_start_page.html
deleted file mode 100644
index 33a8b08fed49..000000000000
--- a/core/res/res/raw-sl/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Novo okno brez beleženja zgodovine</title>
- </head>
- <body>
- <p><strong>Ste v načinu brez beleženja zgodovine.</strong> Strani, ki si jih ogledate v tem oknu, ne bodo prikazane v zgodovini brskalnika ali zgodovini iskanja, prav tako v vaši napravi ne bodo pustile sledi, kot npr. piškotkov, ko zaprete stran, ki jo imate odprto v tem načinu. Datoteke, ki jih prenesete ali zaznamki, ki jih ustvarite, bodo ohranjeni.</p>
-
- <p><strong>Funkcije brez beleženja zgodovine ne vplivajo na obnašanje drugih oseb, strežnikov ali programske opreme. Pazite na:</strong></p>
-
- <ul>
- <li>Spletna mesta, ki zbirajo informacije o vas ali jih dajejo v skupno rabo.</li>
- <li>Ponudnike internetnih storitev ali zaposlene, ki spremljajo spletna mesta, ki ste jih obiskali.</li>
- <li>Zlonamerno programsko opremo, ki spremlja vaše tipkanje, v zameno pa vam ponuja brezplačne čustvene simbole.</li>
- <li>Nadzor tajnih agentov.</li>
- <li>Osebe, ki stojijo za vašim hrbtom.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sr-xlarge/incognito_mode_start_page.html b/core/res/res/raw-sr-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index b1fbcb1324bd..000000000000
--- a/core/res/res/raw-sr-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Нов прозор без архивирања</title>
- </head>
- <body>
- <p><strong>Ушли сте у режим без архивирања</strong> Странице које гледате у овом прозору се неће појавити у историји прегледања ни историји претраге, нити ће оставити друге трагове, попут колачића, на вашем уређају када затворите овај прозор. Међутим, ако преузмете датотеке или направите обележиваче, они ће бити сачувани.</p>
-
- <p><strong>Режим без архивирања не утиче на понашање других људи, сервера нити софтвера. Чувајте се:</strong></p>
-
- <ul>
- <li>Веб сајтова који прикупљају и деле податке о вама</li>
- <li>Добављача интернет услуга или запослених који прате странице које посетите</li>
- <li>Злонамерног софтвера који прати шта куцате</li>
- <li>Надзора тајних агената</li>
- <li>Људи који вам стоје иза леђа</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sr/incognito_mode_start_page.html b/core/res/res/raw-sr/incognito_mode_start_page.html
deleted file mode 100644
index b1fbcb1324bd..000000000000
--- a/core/res/res/raw-sr/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Нов прозор без архивирања</title>
- </head>
- <body>
- <p><strong>Ушли сте у режим без архивирања</strong> Странице које гледате у овом прозору се неће појавити у историји прегледања ни историји претраге, нити ће оставити друге трагове, попут колачића, на вашем уређају када затворите овај прозор. Међутим, ако преузмете датотеке или направите обележиваче, они ће бити сачувани.</p>
-
- <p><strong>Режим без архивирања не утиче на понашање других људи, сервера нити софтвера. Чувајте се:</strong></p>
-
- <ul>
- <li>Веб сајтова који прикупљају и деле податке о вама</li>
- <li>Добављача интернет услуга или запослених који прате странице које посетите</li>
- <li>Злонамерног софтвера који прати шта куцате</li>
- <li>Надзора тајних агената</li>
- <li>Људи који вам стоје иза леђа</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sv-xlarge/incognito_mode_start_page.html b/core/res/res/raw-sv-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 5ebbb22f409b..000000000000
--- a/core/res/res/raw-sv-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nytt inkognitofönster</title>
- </head>
- <body>
- <p><strong>Du använder inkognitoläget</strong>. Sidor som du har läst i detta fönster visas inte i din webbläsarhistorik eller sökhistorik. De lämnar inga spår efter sig, till exempel cookies, i din enhet efter att du stängt inkognitofönstret. Alla filer som du hämtar eller bokmärken du skapar sparas dock.</p>
-
- <p><strong>Att använda datorn inkognito påverkar inte användare, servrar eller program. Se upp för:</strong></p>
-
- <ul>
- <li>Webbplatser som samlar eller delar information om dig</li>
- <li>Internetleverantörer eller arbetsgivare som spårar var du surfar</li>
- <li>Skadlig programvara som spårar dina tangenttryckningar som nyckelloggare</li>
- <li>Övervakning av hemliga agenter</li>
- <li>Personer som står bakom dig</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sv/incognito_mode_start_page.html b/core/res/res/raw-sv/incognito_mode_start_page.html
deleted file mode 100644
index 5ebbb22f409b..000000000000
--- a/core/res/res/raw-sv/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nytt inkognitofönster</title>
- </head>
- <body>
- <p><strong>Du använder inkognitoläget</strong>. Sidor som du har läst i detta fönster visas inte i din webbläsarhistorik eller sökhistorik. De lämnar inga spår efter sig, till exempel cookies, i din enhet efter att du stängt inkognitofönstret. Alla filer som du hämtar eller bokmärken du skapar sparas dock.</p>
-
- <p><strong>Att använda datorn inkognito påverkar inte användare, servrar eller program. Se upp för:</strong></p>
-
- <ul>
- <li>Webbplatser som samlar eller delar information om dig</li>
- <li>Internetleverantörer eller arbetsgivare som spårar var du surfar</li>
- <li>Skadlig programvara som spårar dina tangenttryckningar som nyckelloggare</li>
- <li>Övervakning av hemliga agenter</li>
- <li>Personer som står bakom dig</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-th-xlarge/incognito_mode_start_page.html b/core/res/res/raw-th-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 29c64eb4c041..000000000000
--- a/core/res/res/raw-th-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>หน้าต่างใหม่ที่ไม่ระบุตัวตน</title>
- </head>
- <body>
- <p><strong>คุณได้เข้าสู่โหมดไม่ระบุตัวตนแล้ว</strong> หน้าเว็บที่คุณดูในหน้าต่างนี้จะไม่ปรากฏในประวัติของเบราว์เซอร์หรือประวัติการค้นหาของคุณ และจะไม่ทิ้งร่องรอยอื่นๆ เช่น คุกกี้ ไว้บนอุปกรณ์หลังจากที่คุณปิดหน้าต่างที่ไม่ระบุตัวตนนี้แล้ว อย่างไรก็ตาม ไฟล์ที่คุณดาวน์โหลดหรือบุ๊กมาร์กที่สร้างขึ้นจะถูกเก็บไว้</p>
-
- <p><strong>การเข้าสู่โหมดไม่ระบุตัวตนจะไม่กระทบต่อการทำงานของบุคคล เซิร์ฟเวอร์ หรือซอฟต์แวร์อื่น โปรดระวัง:</strong></p>
-
- <ul>
- <li>เว็บไซต์ที่เก็บหรือแบ่งปันข้อมูลเกี่ยวกับคุณ</li>
- <li>ผู้ให้บริการอินเทอร์เน็ตหรือนายจ้างที่ติดตามหน้าเว็บที่คุณเข้าชม</li>
- <li>ซอฟต์แวร์มุ่งร้ายที่ติดตามการกดแป้นพิมพ์โดยมากับของฟรี</li>
- <li>การตรวจสอบของหน่วยสืบราชการลับ</li>
- <li>บุคคลที่ยืนอยู่ข้างหลังคุณ</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-th/incognito_mode_start_page.html b/core/res/res/raw-th/incognito_mode_start_page.html
deleted file mode 100644
index 29c64eb4c041..000000000000
--- a/core/res/res/raw-th/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>หน้าต่างใหม่ที่ไม่ระบุตัวตน</title>
- </head>
- <body>
- <p><strong>คุณได้เข้าสู่โหมดไม่ระบุตัวตนแล้ว</strong> หน้าเว็บที่คุณดูในหน้าต่างนี้จะไม่ปรากฏในประวัติของเบราว์เซอร์หรือประวัติการค้นหาของคุณ และจะไม่ทิ้งร่องรอยอื่นๆ เช่น คุกกี้ ไว้บนอุปกรณ์หลังจากที่คุณปิดหน้าต่างที่ไม่ระบุตัวตนนี้แล้ว อย่างไรก็ตาม ไฟล์ที่คุณดาวน์โหลดหรือบุ๊กมาร์กที่สร้างขึ้นจะถูกเก็บไว้</p>
-
- <p><strong>การเข้าสู่โหมดไม่ระบุตัวตนจะไม่กระทบต่อการทำงานของบุคคล เซิร์ฟเวอร์ หรือซอฟต์แวร์อื่น โปรดระวัง:</strong></p>
-
- <ul>
- <li>เว็บไซต์ที่เก็บหรือแบ่งปันข้อมูลเกี่ยวกับคุณ</li>
- <li>ผู้ให้บริการอินเทอร์เน็ตหรือนายจ้างที่ติดตามหน้าเว็บที่คุณเข้าชม</li>
- <li>ซอฟต์แวร์มุ่งร้ายที่ติดตามการกดแป้นพิมพ์โดยมากับของฟรี</li>
- <li>การตรวจสอบของหน่วยสืบราชการลับ</li>
- <li>บุคคลที่ยืนอยู่ข้างหลังคุณ</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-tl-xlarge/incognito_mode_start_page.html b/core/res/res/raw-tl-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 6ce5853de0cd..000000000000
--- a/core/res/res/raw-tl-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Bagong incognito window</title>
- </head>
- <body>
- <p><strong>Nag-incognito ka</strong>. Hindi lalabas sa iyong kasaysayan ng pag-browse at kasaysayan ng paghahanap ang mga pahinang tiningnan mo sa window na ito, at hindi sila mag-iiwan ng ibang bakas, gaya ng cookies, sa iyong device matapos mong isara ang window na incognito. Gayunpaman, pananatiliin ang anumang mga file na iyong na-download o ang iyong mga ginawang bookmark.</p>
-
- <p><strong>Hindi nakakaapekto ang pagiging incognito sa gawi ng ibang mga tao, server, o software. Maging maingat sa:</strong></p>
-
- <ul>
- <li>Mga website na kumokolekta o nagbabahagi ng impormasyong tungkol sa iyo</li>
- <li>Mga internet service provider o mga employer na sinusubaybayan ang mga pahinang binibisita mo</li>
- <li>Malicious software na sinusubaybayan ang iyong mga keystroke kapalit ng mga libreng smiley</li>
- <li>Pagmamasid ng mga secret agent</li>
- <li>Mga tao na nakatayo sa likuran mo</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-tl/incognito_mode_start_page.html b/core/res/res/raw-tl/incognito_mode_start_page.html
deleted file mode 100644
index 6ce5853de0cd..000000000000
--- a/core/res/res/raw-tl/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Bagong incognito window</title>
- </head>
- <body>
- <p><strong>Nag-incognito ka</strong>. Hindi lalabas sa iyong kasaysayan ng pag-browse at kasaysayan ng paghahanap ang mga pahinang tiningnan mo sa window na ito, at hindi sila mag-iiwan ng ibang bakas, gaya ng cookies, sa iyong device matapos mong isara ang window na incognito. Gayunpaman, pananatiliin ang anumang mga file na iyong na-download o ang iyong mga ginawang bookmark.</p>
-
- <p><strong>Hindi nakakaapekto ang pagiging incognito sa gawi ng ibang mga tao, server, o software. Maging maingat sa:</strong></p>
-
- <ul>
- <li>Mga website na kumokolekta o nagbabahagi ng impormasyong tungkol sa iyo</li>
- <li>Mga internet service provider o mga employer na sinusubaybayan ang mga pahinang binibisita mo</li>
- <li>Malicious software na sinusubaybayan ang iyong mga keystroke kapalit ng mga libreng smiley</li>
- <li>Pagmamasid ng mga secret agent</li>
- <li>Mga tao na nakatayo sa likuran mo</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-tr-xlarge/incognito_mode_start_page.html b/core/res/res/raw-tr-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index c570cc7e645f..000000000000
--- a/core/res/res/raw-tr-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Yeni gizli pencere</title>
- </head>
- <body>
- <p><strong>Gizli moda geçtiniz</strong> Bu pencerede görüntülediğiniz sayfalar tarayıcı geçmişinizde veya arama geçmişinizde görünmez ve gizli pencereyi kapatmanızın ardından cihazınızda çerezler gibi izler bırakmaz. Ancak, indirdiğiniz dosyalar ve oluşturduğunuz favoriler korunur.</p>
-
- <p><strong>Gizli moda geçmeniz diğer kişilerin, sunucuların veya yazılımların davranışlarını etkilemez. Şu konularda dikkatli olun:</strong></p>
-
- <ul>
- <li>Hakkınızda bilgi toplayan veya paylaşan web siteleri</li>
- <li>Ziyaret ettiğiniz sayfaları izleyen şirket çalışanları veya servis sağlayıcıları</li>
- <li>Ücretsiz ifade simgeleri karşılığında tuş vuruşlarınızı takip eden kötü niyetli yazılımlar</li>
- <li>Gizli ajanlar tarafından takip edilme</li>
- <li>Arkanızda dikilip ne yaptığınıza bakan kişiler</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-tr/incognito_mode_start_page.html b/core/res/res/raw-tr/incognito_mode_start_page.html
deleted file mode 100644
index c570cc7e645f..000000000000
--- a/core/res/res/raw-tr/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Yeni gizli pencere</title>
- </head>
- <body>
- <p><strong>Gizli moda geçtiniz</strong> Bu pencerede görüntülediğiniz sayfalar tarayıcı geçmişinizde veya arama geçmişinizde görünmez ve gizli pencereyi kapatmanızın ardından cihazınızda çerezler gibi izler bırakmaz. Ancak, indirdiğiniz dosyalar ve oluşturduğunuz favoriler korunur.</p>
-
- <p><strong>Gizli moda geçmeniz diğer kişilerin, sunucuların veya yazılımların davranışlarını etkilemez. Şu konularda dikkatli olun:</strong></p>
-
- <ul>
- <li>Hakkınızda bilgi toplayan veya paylaşan web siteleri</li>
- <li>Ziyaret ettiğiniz sayfaları izleyen şirket çalışanları veya servis sağlayıcıları</li>
- <li>Ücretsiz ifade simgeleri karşılığında tuş vuruşlarınızı takip eden kötü niyetli yazılımlar</li>
- <li>Gizli ajanlar tarafından takip edilme</li>
- <li>Arkanızda dikilip ne yaptığınıza bakan kişiler</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-uk-xlarge/incognito_mode_start_page.html b/core/res/res/raw-uk-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 8852854b4110..000000000000
--- a/core/res/res/raw-uk-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Нове анонімне вікно</title>
- </head>
- <body>
- <p><strong>Ви в анонімному режимі</strong>. Сторінки, які ви переглядаєте в цьому вікні, не з’являться в історії веб-переглядача чи в історії пошуку. Вони також не залишать жодних слідів, як-от файлів cookie, у вашому пристрої після того, як ви закриєте анонімне вікно. Однак, завантажені файли та збережені закладки залишаться.</p>
-
- <p><strong>Анонімний режим не впливає на поведінку інших людей, серверів чи програмного забезпечення. Остерігайтеся:</strong></p>
-
- <ul>
- <li>веб-сайтів, які збирають чи поширюють інформацію про вас</li>
- <li>постачальників інтернет-послуг або роботодавців, які відстежують сторінки, які ви відвідуєте</li>
- <li>зловмисного програмного забезпечення, яке пропонує безкоштовні смайли, натомість реєструючи клавіші, які ви натискаєте</li>
- <li>нагляду збоку секретних служб</li>
- <li>людей за вашою спиною</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-uk/incognito_mode_start_page.html b/core/res/res/raw-uk/incognito_mode_start_page.html
deleted file mode 100644
index 8852854b4110..000000000000
--- a/core/res/res/raw-uk/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Нове анонімне вікно</title>
- </head>
- <body>
- <p><strong>Ви в анонімному режимі</strong>. Сторінки, які ви переглядаєте в цьому вікні, не з’являться в історії веб-переглядача чи в історії пошуку. Вони також не залишать жодних слідів, як-от файлів cookie, у вашому пристрої після того, як ви закриєте анонімне вікно. Однак, завантажені файли та збережені закладки залишаться.</p>
-
- <p><strong>Анонімний режим не впливає на поведінку інших людей, серверів чи програмного забезпечення. Остерігайтеся:</strong></p>
-
- <ul>
- <li>веб-сайтів, які збирають чи поширюють інформацію про вас</li>
- <li>постачальників інтернет-послуг або роботодавців, які відстежують сторінки, які ви відвідуєте</li>
- <li>зловмисного програмного забезпечення, яке пропонує безкоштовні смайли, натомість реєструючи клавіші, які ви натискаєте</li>
- <li>нагляду збоку секретних служб</li>
- <li>людей за вашою спиною</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-vi-xlarge/incognito_mode_start_page.html b/core/res/res/raw-vi-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 9902cdef45cb..000000000000
--- a/core/res/res/raw-vi-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Cửa sổ ẩn danh mới</title>
- </head>
- <body>
- <p><strong>Bạn đã sử dụng cửa sổ ẩn danh</strong>. Các trang bạn xem trong cửa sổ này sẽ không xuất hiện trong lịch sử của trình duyệt hoặc lịch sử tìm kiếm và chúng cũng không để lại dấu vết như cookie trên thiết bị sau khi bạn đóng cửa sổ ẩn danh. Tuy nhiên, mọi tệp bạn tải xuống hoặc mọi dấu trang bạn tạo sẽ được giữ nguyên.</p>
-
- <p><strong>Sử dụng cửa sổ ẩn danh không ảnh hưởng đến hành vi của người khác, của máy chủ hoặc phần mềm. Hãy cảnh giác với:</strong></p>
-
- <ul>
- <li>Các trang web thu thập hoặc chia sẻ thông tin về bạn</li>
- <li>Nhà cung cấp dịch vụ Internet hoặc ông chủ muốn theo dõi những trang bạn đã truy cập</li>
- <li>Phần mềm độc hại theo dõi thao tác gõ phím khi nhập các mặt cười</li>
- <li>Sự theo dõi của các cơ quan tình báo</li>
- <li>Những người đứng đằng sau bạn</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-vi/incognito_mode_start_page.html b/core/res/res/raw-vi/incognito_mode_start_page.html
deleted file mode 100644
index 9902cdef45cb..000000000000
--- a/core/res/res/raw-vi/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Cửa sổ ẩn danh mới</title>
- </head>
- <body>
- <p><strong>Bạn đã sử dụng cửa sổ ẩn danh</strong>. Các trang bạn xem trong cửa sổ này sẽ không xuất hiện trong lịch sử của trình duyệt hoặc lịch sử tìm kiếm và chúng cũng không để lại dấu vết như cookie trên thiết bị sau khi bạn đóng cửa sổ ẩn danh. Tuy nhiên, mọi tệp bạn tải xuống hoặc mọi dấu trang bạn tạo sẽ được giữ nguyên.</p>
-
- <p><strong>Sử dụng cửa sổ ẩn danh không ảnh hưởng đến hành vi của người khác, của máy chủ hoặc phần mềm. Hãy cảnh giác với:</strong></p>
-
- <ul>
- <li>Các trang web thu thập hoặc chia sẻ thông tin về bạn</li>
- <li>Nhà cung cấp dịch vụ Internet hoặc ông chủ muốn theo dõi những trang bạn đã truy cập</li>
- <li>Phần mềm độc hại theo dõi thao tác gõ phím khi nhập các mặt cười</li>
- <li>Sự theo dõi của các cơ quan tình báo</li>
- <li>Những người đứng đằng sau bạn</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-xlarge/incognito_mode_start_page.html b/core/res/res/raw-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 492658d29484..000000000000
--- a/core/res/res/raw-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<html>
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>
- <title>New incognito tab</title>
- </head>
- <body>
- <p><strong>You've gone incognito</strong>. Pages you view in this tab
- won't appear in your browser history or search history, and they won't
- leave other traces, like cookies, on your device after you close the
- incognito tab. Any files you download or bookmarks you create will be
- preserved, however.</p>
-
- <p><strong>Going incognito doesn't affect the behavior of other people,
- servers, or software. Be wary of:</strong></p>
-
- <ul>
- <li>Websites that collect or share information about you</li>
- <li>Internet service providers or employers that track the pages you visit</li>
- <li>Malicious software that tracks your keystrokes in exchange for free smileys</li>
- <li>Surveillance by secret agents</li>
- <li>People standing behind you</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-zh-rCN-xlarge/incognito_mode_start_page.html b/core/res/res/raw-zh-rCN-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 2caf8f8bc807..000000000000
--- a/core/res/res/raw-zh-rCN-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>新建隐身窗口</title>
- </head>
- <body>
- <p><strong>您已进入隐身模式</strong>。当关闭隐身窗口后,您在此窗口中查看的网页将不会出现在您的浏览器历史记录或搜索记录中,也不会在您的设备留下任何踪迹(如 cookie)。但是,您下载的任何文件或您创建的书签会予以保留。</p>
-
- <p><strong>进入隐身模式不会影响他人、其他服务器或软件的行为。敬请提防:</strong></p>
-
- <ul>
- <li>搜集并分享有关您的信息的网站</li>
- <li>跟踪您所访问的网页的互联网服务提供商或雇主</li>
- <li>跟踪您的键盘输入内容以换取免费表情符号的恶意软件</li>
- <li>对您进行监视的秘密代理</li>
- <li>站在您身后的人</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-zh-rCN/incognito_mode_start_page.html b/core/res/res/raw-zh-rCN/incognito_mode_start_page.html
deleted file mode 100644
index 2caf8f8bc807..000000000000
--- a/core/res/res/raw-zh-rCN/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>新建隐身窗口</title>
- </head>
- <body>
- <p><strong>您已进入隐身模式</strong>。当关闭隐身窗口后,您在此窗口中查看的网页将不会出现在您的浏览器历史记录或搜索记录中,也不会在您的设备留下任何踪迹(如 cookie)。但是,您下载的任何文件或您创建的书签会予以保留。</p>
-
- <p><strong>进入隐身模式不会影响他人、其他服务器或软件的行为。敬请提防:</strong></p>
-
- <ul>
- <li>搜集并分享有关您的信息的网站</li>
- <li>跟踪您所访问的网页的互联网服务提供商或雇主</li>
- <li>跟踪您的键盘输入内容以换取免费表情符号的恶意软件</li>
- <li>对您进行监视的秘密代理</li>
- <li>站在您身后的人</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-zh-rTW-xlarge/incognito_mode_start_page.html b/core/res/res/raw-zh-rTW-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 54eb40bbecd0..000000000000
--- a/core/res/res/raw-zh-rTW-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>新的無痕式視窗</title>
- </head>
- <body>
- <p><strong>您已開啟無痕式視窗</strong>。透過這個視窗開啟的網頁都不會出現在瀏覽器記錄和搜尋記錄中,而且您關閉此類視窗之後,裝置上並不會保留任何相關記錄 (例如 cookie)。不過系統會保存您的下載檔案和書籤。</p>
-
- <p><strong>無痕式視窗無法掌控人、伺服器和軟體的行為,所以請小心下列的人事物:</strong></p>
-
- <ul>
- <li>會收集或分享您的相關資訊的網站</li>
- <li>會追蹤您造訪網頁的網路服務供應商或雇主</li>
- <li>以免費下載為誘因引誘您點擊的連結,其中通常隱藏鍵盤記錄惡意軟體</li>
- <li>情報特務的監控</li>
- <li>站在您身後的人</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-zh-rTW/incognito_mode_start_page.html b/core/res/res/raw-zh-rTW/incognito_mode_start_page.html
deleted file mode 100644
index 54eb40bbecd0..000000000000
--- a/core/res/res/raw-zh-rTW/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>新的無痕式視窗</title>
- </head>
- <body>
- <p><strong>您已開啟無痕式視窗</strong>。透過這個視窗開啟的網頁都不會出現在瀏覽器記錄和搜尋記錄中,而且您關閉此類視窗之後,裝置上並不會保留任何相關記錄 (例如 cookie)。不過系統會保存您的下載檔案和書籤。</p>
-
- <p><strong>無痕式視窗無法掌控人、伺服器和軟體的行為,所以請小心下列的人事物:</strong></p>
-
- <ul>
- <li>會收集或分享您的相關資訊的網站</li>
- <li>會追蹤您造訪網頁的網路服務供應商或雇主</li>
- <li>以免費下載為誘因引誘您點擊的連結,其中通常隱藏鍵盤記錄惡意軟體</li>
- <li>情報特務的監控</li>
- <li>站在您身後的人</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw/incognito_mode_start_page.html b/core/res/res/raw/incognito_mode_start_page.html
deleted file mode 100644
index 5d7a3fbf98c0..000000000000
--- a/core/res/res/raw/incognito_mode_start_page.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<html>
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>
- <title>New incognito window</title>
- </head>
- <body>
- <p><strong>You've gone incognito</strong>. Pages you view in this window
- won't appear in your browser history or search history, and they won't
- leave other traces, like cookies, on your device after you close the
- incognito window. Any files you download or bookmarks you create will be
- preserved, however.</p>
-
- <p><strong>Going incognito doesn't affect the behavior of other people,
- servers, or software. Be wary of:</strong></p>
-
- <ul>
- <li>Websites that collect or share information about you</li>
- <li>Internet service providers or employers that track the pages you visit</li>
- <li>Malicious software that tracks your keystrokes in exchange for free smileys</li>
- <li>Surveillance by secret agents</li>
- <li>People standing behind you</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/values-notround-watch/config_material.xml b/core/res/res/values-notround-watch/config_material.xml
new file mode 100644
index 000000000000..a99674f3f060
--- /dev/null
+++ b/core/res/res/values-notround-watch/config_material.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+
+<!-- These resources are around just to allow their values to be customized
+ for different hardware and product builds, only for Material theme. Do not translate.
+
+ NOTE: The naming convention is "config_camelCaseValue". -->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Gravity that should be used for dialog text styles. Equivalent to: Gravity.START | Gravity.TOP -->
+ <integer name="config_dialogTextGravity">0x00800033</integer>
+</resources>
diff --git a/core/res/res/values-notround-watch/dimens.xml b/core/res/res/values-notround-watch/dimens.xml
index f103aa91dcfe..f0204d0f2d34 100644
--- a/core/res/res/values-notround-watch/dimens.xml
+++ b/core/res/res/values-notround-watch/dimens.xml
@@ -24,4 +24,5 @@
<item name="input_extract_action_margin_bottom" type="fraction">0%</item>
<item name="input_extract_action_button_width" type="dimen">24dp</item>
<item name="input_extract_action_button_height" type="dimen">24dp</item>
+ <item name="input_extract_action_icon_padding" type="dimen">3dp</item>
</resources>
diff --git a/core/res/res/values-round-watch/config_material.xml b/core/res/res/values-round-watch/config_material.xml
index bf445ef3fd0e..11798709f148 100644
--- a/core/res/res/values-round-watch/config_material.xml
+++ b/core/res/res/values-round-watch/config_material.xml
@@ -19,4 +19,10 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Don't clip on round screens so the list can scroll past the rounded edges. -->
<bool name="config_preferenceFragmentClipToPadding">false</bool>
+
+ <!-- Gravity that should be used for dialog text styles. Equivalent to: Gravity.CENTER_HORIZONTAL | Gravity.TOP -->
+ <integer name="config_dialogTextGravity">0x00000031</integer>
+
+ <!-- The amount to offset when scrolling to a selection in an AlertDialog -->
+ <dimen name="config_alertDialogSelectionScrollOffset">@dimen/screen_percentage_15</dimen>
</resources>
diff --git a/core/res/res/values-round-watch/dimens.xml b/core/res/res/values-round-watch/dimens.xml
index a12f49929929..1d8c669ac55b 100644
--- a/core/res/res/values-round-watch/dimens.xml
+++ b/core/res/res/values-round-watch/dimens.xml
@@ -24,4 +24,5 @@
<item name="input_extract_action_margin_bottom" type="fraction">2.1%</item>
<item name="input_extract_action_button_width" type="dimen">32dp</item>
<item name="input_extract_action_button_height" type="dimen">32dp</item>
+ <item name="input_extract_action_icon_padding" type="dimen">5dp</item>
</resources>
diff --git a/core/res/res/values-w180dp-notround-watch/dimens_material.xml b/core/res/res/values-w180dp-notround-watch/dimens_material.xml
new file mode 100644
index 000000000000..79acf84b7e3f
--- /dev/null
+++ b/core/res/res/values-w180dp-notround-watch/dimens_material.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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>
+ <dimen name="text_size_display_4_material">80sp</dimen>
+ <dimen name="text_size_display_3_material">50sp</dimen>
+ <dimen name="text_size_display_2_material">40sp</dimen>
+ <dimen name="text_size_display_1_material">30sp</dimen>
+ <dimen name="text_size_headline_material">20sp</dimen>
+ <dimen name="text_size_title_material">18sp</dimen>
+ <dimen name="text_size_subhead_material">18sp</dimen>
+ <dimen name="text_size_title_material_toolbar">18dp</dimen>
+ <dimen name="text_size_subtitle_material_toolbar">18dp</dimen>
+ <dimen name="text_size_menu_material">18sp</dimen>
+ <dimen name="text_size_menu_header_material">16sp</dimen>
+ <dimen name="text_size_body_2_material">16sp</dimen>
+ <dimen name="text_size_body_1_material">16sp</dimen>
+ <dimen name="text_size_caption_material">14sp</dimen>
+ <dimen name="text_size_button_material">16sp</dimen>
+
+ <dimen name="text_size_large_material">18sp</dimen>
+ <dimen name="text_size_medium_material">16sp</dimen>
+ <dimen name="text_size_small_material">14sp</dimen>
+</resources>
diff --git a/core/res/res/values-w210dp-round-watch/dimens_material.xml b/core/res/res/values-w210dp-round-watch/dimens_material.xml
new file mode 100644
index 000000000000..79acf84b7e3f
--- /dev/null
+++ b/core/res/res/values-w210dp-round-watch/dimens_material.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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>
+ <dimen name="text_size_display_4_material">80sp</dimen>
+ <dimen name="text_size_display_3_material">50sp</dimen>
+ <dimen name="text_size_display_2_material">40sp</dimen>
+ <dimen name="text_size_display_1_material">30sp</dimen>
+ <dimen name="text_size_headline_material">20sp</dimen>
+ <dimen name="text_size_title_material">18sp</dimen>
+ <dimen name="text_size_subhead_material">18sp</dimen>
+ <dimen name="text_size_title_material_toolbar">18dp</dimen>
+ <dimen name="text_size_subtitle_material_toolbar">18dp</dimen>
+ <dimen name="text_size_menu_material">18sp</dimen>
+ <dimen name="text_size_menu_header_material">16sp</dimen>
+ <dimen name="text_size_body_2_material">16sp</dimen>
+ <dimen name="text_size_body_1_material">16sp</dimen>
+ <dimen name="text_size_caption_material">14sp</dimen>
+ <dimen name="text_size_button_material">16sp</dimen>
+
+ <dimen name="text_size_large_material">18sp</dimen>
+ <dimen name="text_size_medium_material">16sp</dimen>
+ <dimen name="text_size_small_material">14sp</dimen>
+</resources>
diff --git a/core/res/res/values-notround-watch/styles_material.xml b/core/res/res/values-w225dp/dimens_material.xml
index cd8521f48421..aa822a32c975 100644
--- a/core/res/res/values-notround-watch/styles_material.xml
+++ b/core/res/res/values-w225dp/dimens_material.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,5 +14,7 @@
limitations under the License.
-->
<resources>
- <style name="TextAppearance.Material.AlertDialogMessage" parent="TextAppearance.Material.Body1"/>
+ <dimen name="screen_percentage_05">11.25dp</dimen>
+ <dimen name="screen_percentage_10">22.5dp</dimen>
+ <dimen name="screen_percentage_15">33.75dp</dimen>
</resources>
diff --git a/core/res/res/values-watch/colors_material.xml b/core/res/res/values-watch/colors_material.xml
index 45eb9812f137..54eece4f2bdf 100644
--- a/core/res/res/values-watch/colors_material.xml
+++ b/core/res/res/values-watch/colors_material.xml
@@ -22,5 +22,5 @@
<color name="primary_material_dark">#4D4D4D</color>
- <color name="button_material_dark">#ff999999</color>
+ <color name="button_material_dark">#ff919699</color>
</resources>
diff --git a/core/res/res/values-watch/config.xml b/core/res/res/values-watch/config.xml
index 919519e5832a..7c05b7a8e362 100644
--- a/core/res/res/values-watch/config.xml
+++ b/core/res/res/values-watch/config.xml
@@ -57,4 +57,9 @@
<!-- Use a custom transition for RemoteViews. -->
<bool name="config_overrideRemoteViewsActivityTransition">true</bool>
+
+ <!-- Default value for android:focusableInTouchMode for some framework scrolling containers.
+ ListView/GridView are notably absent since this is their default anyway.
+ Set to true for watch devices. -->
+ <bool name="config_focusScrollContainersInTouchMode">true</bool>
</resources>
diff --git a/core/res/res/values-watch/config_material.xml b/core/res/res/values-watch/config_material.xml
index 81b53e71b5d7..104d122e01d3 100644
--- a/core/res/res/values-watch/config_material.xml
+++ b/core/res/res/values-watch/config_material.xml
@@ -29,7 +29,4 @@
<!-- Always overscan by default to ensure onApplyWindowInsets will always be called. -->
<bool name="config_windowOverscanByDefault">true</bool>
-
- <!-- Due to the smaller screen size, have dialog titles occupy more than 1 line. -->
- <integer name="config_dialogWindowTitleMaxLines">3</integer>
</resources>
diff --git a/core/res/res/values-watch/dimens_material.xml b/core/res/res/values-watch/dimens_material.xml
index d579434d5e30..b48cde62158a 100644
--- a/core/res/res/values-watch/dimens_material.xml
+++ b/core/res/res/values-watch/dimens_material.xml
@@ -14,5 +14,29 @@
limitations under the License.
-->
<resources>
+ <dimen name="text_size_display_4_material">71sp</dimen>
+ <dimen name="text_size_display_3_material">44sp</dimen>
+ <dimen name="text_size_display_2_material">36sp</dimen>
+ <dimen name="text_size_display_1_material">27sp</dimen>
+ <dimen name="text_size_headline_material">18sp</dimen>
+ <dimen name="text_size_title_material">16sp</dimen>
+ <dimen name="text_size_subhead_material">16sp</dimen>
+ <dimen name="text_size_title_material_toolbar">16dp</dimen>
+ <dimen name="text_size_subtitle_material_toolbar">16dp</dimen>
+ <dimen name="text_size_menu_material">16sp</dimen>
+ <dimen name="text_size_menu_header_material">14sp</dimen>
+ <dimen name="text_size_body_2_material">14sp</dimen>
+ <dimen name="text_size_body_1_material">14sp</dimen>
+ <dimen name="text_size_caption_material">12sp</dimen>
+ <dimen name="text_size_button_material">14sp</dimen>
+
+ <dimen name="text_size_large_material">16sp</dimen>
+ <dimen name="text_size_medium_material">14sp</dimen>
+ <dimen name="text_size_small_material">12sp</dimen>
+
<item name="text_line_spacing_multiplier_material" format="float" type="dimen">1.2</item>
+
+ <!-- Date and time picker legacy dimens -->
+ <dimen name="picker_top_margin">1dip</dimen>
+ <dimen name="picker_bottom_margin">1dip</dimen>
</resources>
diff --git a/core/res/res/layout-watch/number_picker_material.xml b/core/res/res/values-watch/integers.xml
index a1c0921482ad..46ed97d83182 100644
--- a/core/res/res/layout-watch/number_picker_material.xml
+++ b/core/res/res/values-watch/integers.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
-**
+/*
** Copyright 2012, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,16 +16,10 @@
** limitations under the License.
*/
-->
+<resources>
+ <!-- Specifies date picker mode to be 'spinner' -->
+ <integer name="date_picker_mode_material">1</integer>
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-
- <view class="android.widget.NumberPicker$CustomEditText"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:id="@+id/numberpicker_input"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:singleLine="true"
- android:background="@null" />
-
-</merge>
+ <!-- Specifies time picker mode to be 'spinner' -->
+ <integer name="time_picker_mode_material">1</integer>
+</resources>
diff --git a/core/res/res/values-watch/styles_material.xml b/core/res/res/values-watch/styles_material.xml
index a9f6e226510c..8a080d9c155d 100644
--- a/core/res/res/values-watch/styles_material.xml
+++ b/core/res/res/values-watch/styles_material.xml
@@ -61,11 +61,16 @@ please see styles_device_defaults.xml.
<item name="divider">@empty</item>
</style>
+ <style name="TextAppearance.Material.ListItem" parent="TextAppearance.Material.Body1" />
+ <style name="TextAppearance.Material.ListItemSecondary" parent="TextAppearance.Material.Caption" />
+
<style name="Widget.Material.TextView" parent="Widget.TextView">
<item name="breakStrategy">balanced</item>
</style>
- <style name="Widget.Material.ButtonBar" parent="Widget.Material.BaseButtonBar" />
+ <style name="TextAppearance.Material.NumberPicker" parent="TextAppearance.Material.Body1">
+ <item name="textSize">@dimen/text_size_medium_material</item>
+ </style>
<!-- Alert dialog button bar button -->
<style name="Widget.Material.Button.ButtonBar.AlertDialog" parent="Widget.Material.Button.Borderless.Small">
@@ -82,10 +87,18 @@ please see styles_device_defaults.xml.
<item name="solidColor">@color/transparent</item>
<item name="selectionDivider">@drawable/numberpicker_selection_divider</item>
<item name="selectionDividerHeight">2dp</item>
- <item name="selectionDividersDistance">48dp</item>
- <item name="internalMinWidth">64dp</item>
- <item name="internalMaxHeight">180dp</item>
+ <item name="selectionDividersDistance">24dp</item>
+ <item name="internalMinWidth">32dp</item>
+ <item name="internalMaxHeight">90dp</item>
<item name="virtualButtonPressedDrawable">?selectableItemBackground</item>
<item name="descendantFocusability">blocksDescendants</item>
</style>
+
+ <style name="DialogWindowTitle.Material">
+ <item name="maxLines">3</item>
+ <item name="scrollHorizontally">false</item>
+ <item name="textAppearance">@style/TextAppearance.Material.DialogWindowTitle</item>
+ <item name="gravity">@integer/config_dialogTextGravity</item>
+ <item name="ellipsize">end</item>
+ </style>
</resources>
diff --git a/core/res/res/values-watch/themes_material.xml b/core/res/res/values-watch/themes_material.xml
index 4ae4367e8bc7..84bc25f26db4 100644
--- a/core/res/res/values-watch/themes_material.xml
+++ b/core/res/res/values-watch/themes_material.xml
@@ -59,4 +59,17 @@ please see styles_device_defaults.xml.
<item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_material_light</item>
<item name="windowIsFloating">false</item>
</style>
+
+ <!-- Force all settings themes to use normal Material theme. -->
+ <style name="Theme.Material.Settings" parent="Theme.Material"/>
+ <style name="Theme.Material.Settings.NoActionBar" parent="Theme.Material"/>
+ <style name="Theme.Material.Settings.BaseDialog" parent="Theme.Material.Dialog"/>
+ <style name="Theme.Material.Settings.Dialog" parent="Theme.Material.Settings.BaseDialog"/>
+ <style name="Theme.Material.Settings.Dialog.BaseAlert" parent="Theme.Material.Dialog.BaseAlert"/>
+ <style name="Theme.Material.Settings.Dialog.Alert" parent="Theme.Material.Settings.Dialog.BaseAlert"/>
+ <style name="Theme.Material.Settings.DialogWhenLarge" parent="Theme.Material.DialogWhenLarge"/>
+ <style name="Theme.Material.Settings.DialogWhenLarge.NoActionBar" parent="Theme.Material.DialogWhenLarge.NoActionBar"/>
+ <style name="Theme.Material.Settings.Dialog.Presentation" parent="Theme.Material.Dialog.Presentation"/>
+ <style name="Theme.Material.Settings.SearchBar" parent="Theme.Material.SearchBar"/>
+ <style name="Theme.Material.Settings.CompactMenu" parent="Theme.Material.CompactMenu"/>
</resources>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 30a1a28617e5..4c9f33e339b5 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2057,6 +2057,8 @@ i
<!-- Controller for micro specific layout. -->
<enum name="micro" value="1" />
</attr>
+ <!-- @hide Offset when scrolling to a selection. -->
+ <attr name="selectionScrollOffset" format="dimension" />
</declare-styleable>
<!-- @hide -->
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 18467ae3a11e..8a77fc94a48a 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -202,7 +202,7 @@
<!-- The threshold angle for any motion detection in auto-power save modes.
In hundreths of a degree. -->
- <integer name="config_autoPowerModeThresholdAngle">200</integer>
+ <integer name="config_autoPowerModeThresholdAngle">10</integer>
<!-- The sensor id of an "any motion" sensor used in auto-power save modes.
0 indicates this sensor is not available. -->
@@ -551,9 +551,12 @@
Software implementation will be used if config_hardware_auto_brightness_available is not set -->
<bool name="config_automatic_brightness_available">false</bool>
- <!-- Fast brightness animation ramp rate -->
+ <!-- Fast brightness animation ramp rate in brightness units per second-->
<integer translatable="false" name="config_brightness_ramp_rate_fast">200</integer>
+ <!-- Slow brightness animation ramp rate in brightness units per second-->
+ <integer translatable="false" name="config_brightness_ramp_rate_slow">40</integer>
+
<!-- Don't name config resources like this. It should look like config_annoyDianne -->
<bool name="config_annoy_dianne">true</bool>
@@ -808,6 +811,12 @@
-->
<integer name="config_longPressOnBackBehavior">0</integer>
+ <!-- Control the behavior when the user panic presses the back button.
+ 0 - Nothing
+ 1 - Go to home
+ -->
+ <integer name="config_backPanicBehavior">0</integer>
+
<!-- Control the behavior when the user short presses the power button.
0 - Nothing
1 - Go to sleep (doze)
@@ -1135,6 +1144,40 @@
<integer-array name="config_autoBrightnessKeyboardBacklightValues">
</integer-array>
+ <!-- Array of hysteresis constraint values for brightening, represented as tenths of a
+ percent. The length of this array is assumed to be one greater than
+ config_dynamicHysteresisLuxLevels. The brightening threshold is calculated as
+ lux * (1.0f + CONSTRAINT_VALUE). When the current lux is higher than this threshold,
+ the screen brightness is recalculated. See the config_dynamicHysteresisLuxLevels
+ description for how the constraint value is chosen. -->
+ <integer-array name="config_dynamicHysteresisBrightLevels">
+ <item>100</item>
+ </integer-array>
+
+ <!-- Array of hysteresis constraint values for darkening, represented as tenths of a
+ percent. The length of this array is assumed to be one greater than
+ config_dynamicHysteresisLuxLevels. The darkening threshold is calculated as
+ lux * (1.0f - CONSTRAINT_VALUE). When the current lux is lower than this threshold,
+ the screen brightness is recalculated. See the config_dynamicHysteresisLuxLevels
+ description for how the constraint value is chosen. -->
+ <integer-array name="config_dynamicHysteresisDarkLevels">
+ <item>200</item>
+ </integer-array>
+
+ <!-- Array of ambient lux threshold values. This is used for determining hysteresis constraint
+ values by calculating the index to use for lookup and then setting the constraint value
+ to the corresponding value of the array. The new brightening hysteresis constraint value
+ is the n-th element of config_dynamicHysteresisBrightLevels, and the new darkening
+ hysteresis constraint value is the n-th element of config_dynamicHysteresisDarkLevels.
+
+ The (zero-based) index is calculated as follows: (MAX is the largest index of the array)
+ condition calculated index
+ value < lux[0] 0
+ lux[n] <= value < lux[n+1] n+1
+ lux[MAX] <= value MAX+1 -->
+ <integer-array name="config_dynamicHysteresisLuxLevels">
+ </integer-array>
+
<!-- Amount of time it takes for the light sensor to warm up in milliseconds.
For this time after the screen turns on, the Power Manager
will not debounce light sensor readings -->
@@ -1756,6 +1799,10 @@
<!-- Amount of time in ms the user needs to press the relevant key to bring up the global actions dialog -->
<integer name="config_globalActionsKeyTimeout">500</integer>
+ <!-- Distance that should be scrolled in response to a {@link MotionEvent#ACTION_SCROLL event}
+ with an axis value of 1. -->
+ <dimen name="config_scrollFactor">64dp</dimen>
+
<!-- Maximum number of grid columns permitted in the ResolverActivity
used for picking activities to handle an intent. -->
<integer name="config_maxResolverActivityColumns">3</integer>
@@ -2547,6 +2594,14 @@
<string-array translatable="false" name="config_defaultFirstUserRestrictions">
</string-array>
+ <!-- Default value for android:focusableInTouchMode for some framework scrolling containers.
+ ListView/GridView are notably absent since this is their default anyway.
+ Set to true for watch devices. -->
+ <bool name="config_focusScrollContainersInTouchMode">false</bool>
+
+ <string name="config_networkOverLimitComponent" translatable="false">com.android.systemui/com.android.systemui.net.NetworkOverLimitActivity</string>
+ <string name="config_dataUsageSummaryComponent" translatable="false">com.android.settings/com.android.settings.Settings$DataUsageSummaryActivity</string>
+
<!-- A array of regex to treat a SMS as VVM SMS if the message body matches.
Each item represents an entry, which consists of two parts:
a comma (,) separated list of MCCMNC the regex applies to, followed by a semicolon (;), and
diff --git a/core/res/res/values/config_material.xml b/core/res/res/values/config_material.xml
index a37be837d9f1..29494db40557 100644
--- a/core/res/res/values/config_material.xml
+++ b/core/res/res/values/config_material.xml
@@ -32,9 +32,9 @@
<!-- True if windowOverscan should be on by default. -->
<bool name="config_windowOverscanByDefault">false</bool>
- <!-- Max number of lines for the dialog title. -->
- <integer name="config_dialogWindowTitleMaxLines">1</integer>
-
<!-- True if preference fragment should clip to padding. -->
<bool name="config_preferenceFragmentClipToPadding">true</bool>
+
+ <!-- The amount to offset when scrolling to a selection in an AlertDialog -->
+ <dimen name="config_alertDialogSelectionScrollOffset">0dp</dimen>
</resources>
diff --git a/core/res/res/values/dimens_material.xml b/core/res/res/values/dimens_material.xml
index f96cef9ad1c5..ae3116584e5d 100644
--- a/core/res/res/values/dimens_material.xml
+++ b/core/res/res/values/dimens_material.xml
@@ -189,4 +189,8 @@
<dimen name="day_picker_button_margin_top">0dp</dimen>
<dimen name="datepicker_view_animator_height">226dp</dimen>
+
+ <!-- Date and time picker legacy dimens -->
+ <dimen name="picker_top_margin">16dip</dimen>
+ <dimen name="picker_bottom_margin">16dip</dimen>
</resources>
diff --git a/core/res/res/values/integers.xml b/core/res/res/values/integers.xml
index 71ac2f49ff71..2b69c75b7d9c 100644
--- a/core/res/res/values/integers.xml
+++ b/core/res/res/values/integers.xml
@@ -26,5 +26,12 @@
<integer name="date_picker_mode">1</integer>
<integer name="time_picker_mode">1</integer>
+
+ <!-- Specifies date picker mode to be 'calendar' -->
+ <integer name="date_picker_mode_material">2</integer>
+
+ <!-- Specifies time picker mode to be 'clock' -->
+ <integer name="time_picker_mode_material">2</integer>
+
<integer name="date_picker_header_max_lines_material">2</integer>
</resources>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 26d24bc0d1ac..3a1fe53bee39 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1960,7 +1960,7 @@
<string name="lockscreen_access_pattern_cleared">Pattern cleared</string>
<!-- Accessibility description sent when user adds a dot to the pattern. [CHAR LIMIT=NONE] -->
<string name="lockscreen_access_pattern_cell_added">Cell added</string>
- <!-- Accessibility description sent when user adds a dot to the pattern. Announces the
+ <!-- Accessibility description sent when user adds a dot to the pattern. Announces the
actual cell when headphones are connected [CHAR LIMIT=NONE] -->
<string name="lockscreen_access_pattern_cell_added_verbose">
Cell <xliff:g id="cell_index" example="3">%1$s</xliff:g> added</string>
@@ -2040,6 +2040,12 @@
<!-- Button to restart the device after the factory test. -->
<string name="factorytest_reboot">Reboot</string>
+ <!-- Do not translate. timepicker mode, overridden for watch -->
+ <string name="time_picker_mode" translatable="false">"clock"</string>
+
+ <!-- Do not translate. datepicker mode, overridden for watch -->
+ <string name="date_picker_mode" translatable="false">"calendar"</string>
+
<!-- Do not translate. WebView User Agent string -->
<string name="web_user_agent" translatable="false">Mozilla/5.0 (Linux; U; <xliff:g id="x">Android %s</xliff:g>)
AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 <xliff:g id="mobile">%s</xliff:g>Safari/534.30</string>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 762cf31abd55..937428b12c60 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -649,11 +649,13 @@ please see styles_device_defaults.xml.
<style name="Widget.ScrollView">
<item name="scrollbars">vertical</item>
<item name="fadingEdge">vertical</item>
+ <item name="focusableInTouchMode">@bool/config_focusScrollContainersInTouchMode</item>
</style>
<style name="Widget.HorizontalScrollView">
<item name="scrollbars">horizontal</item>
<item name="fadingEdge">horizontal</item>
+ <item name="focusableInTouchMode">@bool/config_focusScrollContainersInTouchMode</item>
</style>
<style name="Widget.ListView" parent="Widget.AbsListView">
diff --git a/core/res/res/values/styles_material.xml b/core/res/res/values/styles_material.xml
index 443553754193..22bdf7e9616a 100644
--- a/core/res/res/values/styles_material.xml
+++ b/core/res/res/values/styles_material.xml
@@ -255,6 +255,8 @@ please see styles_device_defaults.xml.
<item name="textColor">?attr/textColorPrimary</item>
</style>
+ <style name="TextAppearance.Material.NumberPicker" parent="TextAppearance.Material.Body1"/>
+
<!-- Deprecated text styles -->
<style name="TextAppearance.Material.Inverse">
@@ -475,6 +477,9 @@ please see styles_device_defaults.xml.
<item name="textColor">#66000000</item>
</style>
+ <style name="TextAppearance.Material.ListItem" parent="TextAppearance.Material.Subhead" />
+ <style name="TextAppearance.Material.ListItemSecondary" parent="TextAppearance.Material.Body1" />
+
<style name="Widget.Material.Notification.ProgressBar" parent="Widget.Material.Light.ProgressBar.Horizontal" />
<style name="Widget.Material.Notification.MessagingText" parent="Widget.Material.Light.TextView">
@@ -548,11 +553,7 @@ please see styles_device_defaults.xml.
<item name="textOff">@string/capital_off</item>
</style>
- <style name="Widget.Material.BaseButtonBar">
- <item name="background">?attr/colorBackgroundFloating</item>
- </style>
-
- <style name="Widget.Material.ButtonBar" parent="Widget.Material.BaseButtonBar">
+ <style name="Widget.Material.ButtonBar">
<item name="background">@null</item>
</style>
@@ -684,7 +685,7 @@ please see styles_device_defaults.xml.
</style>
<style name="Widget.Material.TimePicker">
- <item name="timePickerMode">clock</item>
+ <item name="timePickerMode">@integer/time_picker_mode_material</item>
<item name="legacyLayout">@layout/time_picker_legacy_material</item>
<!-- Attributes for new-style TimePicker. -->
<item name="internalLayout">@layout/time_picker_material</item>
@@ -698,7 +699,7 @@ please see styles_device_defaults.xml.
</style>
<style name="Widget.Material.DatePicker">
- <item name="datePickerMode">calendar</item>
+ <item name="datePickerMode">@integer/date_picker_mode_material</item>
<item name="legacyLayout">@layout/date_picker_legacy_holo</item>
<item name="calendarViewShown">true</item>
<!-- Attributes for new-style DatePicker. -->
@@ -1208,6 +1209,7 @@ please see styles_device_defaults.xml.
<item name="multiChoiceItemLayout">@layout/select_dialog_multichoice_material</item>
<item name="singleChoiceItemLayout">@layout/select_dialog_singlechoice_material</item>
<item name="controllerType">@integer/config_alertDialogController</item>
+ <item name="selectionScrollOffset">@dimen/config_alertDialogSelectionScrollOffset</item>
</style>
<style name="AlertDialog.Material.Light" />
@@ -1246,7 +1248,7 @@ please see styles_device_defaults.xml.
<style name="DialogWindowTitleBackground.Material.Light" />
<style name="DialogWindowTitle.Material">
- <item name="maxLines">@integer/config_dialogWindowTitleMaxLines</item>
+ <item name="maxLines">1</item>
<item name="scrollHorizontally">true</item>
<item name="textAppearance">@style/TextAppearance.Material.DialogWindowTitle</item>
</style>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index b03a61663f98..7f093827204b 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -375,6 +375,7 @@
<java-symbol type="integer" name="config_immersive_mode_confirmation_panic" />
<java-symbol type="integer" name="config_longPressOnPowerBehavior" />
<java-symbol type="integer" name="config_longPressOnBackBehavior" />
+ <java-symbol type="integer" name="config_backPanicBehavior" />
<java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAdjust" />
<java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAbsolute" />
<java-symbol type="integer" name="config_max_pan_devices" />
@@ -415,6 +416,7 @@
<java-symbol type="dimen" name="config_viewConfigurationTouchSlop" />
<java-symbol type="dimen" name="config_viewMinFlingVelocity" />
<java-symbol type="dimen" name="config_viewMaxFlingVelocity" />
+ <java-symbol type="dimen" name="config_scrollFactor" />
<java-symbol type="dimen" name="default_app_widget_padding_bottom" />
<java-symbol type="dimen" name="default_app_widget_padding_left" />
<java-symbol type="dimen" name="default_app_widget_padding_right" />
@@ -1407,7 +1409,6 @@
<java-symbol type="raw" name="color_fade_vert" />
<java-symbol type="raw" name="color_fade_frag" />
<java-symbol type="raw" name="accessibility_gestures" />
- <java-symbol type="raw" name="incognito_mode_start_page" />
<java-symbol type="raw" name="loaderror" />
<java-symbol type="raw" name="nodomain" />
@@ -1644,6 +1645,9 @@
<java-symbol type="array" name="config_autoBrightnessKeyboardBacklightValues" />
<java-symbol type="array" name="config_autoBrightnessLcdBacklightValues" />
<java-symbol type="array" name="config_autoBrightnessLevels" />
+ <java-symbol type="array" name="config_dynamicHysteresisBrightLevels" />
+ <java-symbol type="array" name="config_dynamicHysteresisDarkLevels" />
+ <java-symbol type="array" name="config_dynamicHysteresisLuxLevels" />
<java-symbol type="array" name="config_protectedNetworks" />
<java-symbol type="array" name="config_statusBarIcons" />
<java-symbol type="array" name="config_tether_bluetooth_regexs" />
@@ -1766,6 +1770,7 @@
<java-symbol type="integer" name="config_undockedHdmiRotation" />
<java-symbol type="integer" name="config_virtualKeyQuietTimeMillis" />
<java-symbol type="integer" name="config_brightness_ramp_rate_fast" />
+ <java-symbol type="integer" name="config_brightness_ramp_rate_slow" />
<java-symbol type="layout" name="am_compat_mode_dialog" />
<java-symbol type="layout" name="launch_warning" />
<java-symbol type="layout" name="safe_mode" />
@@ -2662,6 +2667,10 @@
<!-- Colon separated list of package names that should be granted DND access -->
<java-symbol type="string" name="config_defaultDndAccessPackages" />
+ <!-- For NetworkPolicyManagerService -->
+ <java-symbol type="string" name="config_networkOverLimitComponent" />
+ <java-symbol type="string" name="config_dataUsageSummaryComponent" />
+
<java-symbol type="string" name="lockscreen_storage_locked" />
<java-symbol type="string" name="global_action_emergency" />
diff --git a/core/res/res/values/themes_material.xml b/core/res/res/values/themes_material.xml
index 7e2867de1d7a..0eb4c8d86928 100644
--- a/core/res/res/values/themes_material.xml
+++ b/core/res/res/values/themes_material.xml
@@ -114,9 +114,9 @@ please see themes_device_defaults.xml.
<item name="listPreferredItemHeightSmall">48dip</item>
<item name="listPreferredItemHeightLarge">80dip</item>
<item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
- <item name="textAppearanceListItem">@style/TextAppearance.Material.Subhead</item>
- <item name="textAppearanceListItemSmall">@style/TextAppearance.Material.Subhead</item>
- <item name="textAppearanceListItemSecondary">@style/TextAppearance.Material.Body1</item>
+ <item name="textAppearanceListItem">@style/TextAppearance.Material.ListItem</item>
+ <item name="textAppearanceListItemSmall">@style/TextAppearance.Material.ListItem</item>
+ <item name="textAppearanceListItemSecondary">@style/TextAppearance.Material.ListItemSecondary</item>
<item name="listPreferredItemPaddingLeft">@dimen/list_item_padding_horizontal_material</item>
<item name="listPreferredItemPaddingRight">@dimen/list_item_padding_horizontal_material</item>
<item name="listPreferredItemPaddingStart">@dimen/list_item_padding_start_material</item>
@@ -475,9 +475,9 @@ please see themes_device_defaults.xml.
<item name="listPreferredItemHeightSmall">48dip</item>
<item name="listPreferredItemHeightLarge">80dip</item>
<item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
- <item name="textAppearanceListItem">@style/TextAppearance.Material.Subhead</item>
- <item name="textAppearanceListItemSmall">@style/TextAppearance.Material.Subhead</item>
- <item name="textAppearanceListItemSecondary">@style/TextAppearance.Material.Body1</item>
+ <item name="textAppearanceListItem">@style/TextAppearance.Material.ListItem</item>
+ <item name="textAppearanceListItemSmall">@style/TextAppearance.Material.ListItem</item>
+ <item name="textAppearanceListItemSecondary">@style/TextAppearance.Material.ListItemSecondary</item>
<item name="listPreferredItemPaddingLeft">@dimen/list_item_padding_horizontal_material</item>
<item name="listPreferredItemPaddingRight">@dimen/list_item_padding_horizontal_material</item>
<item name="listPreferredItemPaddingStart">@dimen/list_item_padding_start_material</item>
diff --git a/core/res/res/xml-watch/default_zen_mode_config.xml b/core/res/res/xml-watch/default_zen_mode_config.xml
index 26af10c1809e..938cc0c3f7c0 100644
--- a/core/res/res/xml-watch/default_zen_mode_config.xml
+++ b/core/res/res/xml-watch/default_zen_mode_config.xml
@@ -17,8 +17,8 @@
<!-- Default configuration for zen mode. See android.service.notification.ZenModeConfig. -->
<zen version="2">
- <!-- Allow starred contacts to go through only. Repeated calls on.
- Calls, messages, reminders, events off.-->
- <allow from="2" repeatCallers="true" calls="false" messages="false" reminders="false"
+ <!-- Allow starred contacts to go through only.
+ Repeated calls, calls, messages, reminders, events off. -->
+ <allow from="2" repeatCallers="false" calls="false" messages="false" reminders="false"
events="false"/>
</zen>
diff --git a/docs/html/guide/topics/manifest/provider-element.jd b/docs/html/guide/topics/manifest/provider-element.jd
index 1947849e56f8..0e729c36f37e 100644
--- a/docs/html/guide/topics/manifest/provider-element.jd
+++ b/docs/html/guide/topics/manifest/provider-element.jd
@@ -215,17 +215,15 @@ it can also be set as a raw string.
</p></dd>
<dt><a name="multi"></a>{@code android:multiprocess}</dt>
-<dd>Whether or not an instance of the content provider can be created in
-every client process &mdash; "{@code true}" if instances can run in multiple
-processes, and "{@code false}" if not. The default value is "{@code false}".
-
-<p>
-Normally, a content provider is instantiated in the process of the
-application that defined it. However, if this flag is set to "{@code true}",
-the system can create an instance in every process where there's a client
-that wants to interact with it, thus avoiding the overhead of interprocess
-communication.
-</p></dd>
+<dd>If the app runs in multiple processes, this attribute determines whether
+multiple instances of the content provder are created. If <code>true</code>,
+each of the app's processes has its own content provider object. If
+<code>false</code>, the app's processes share only one content provider object.
+The default value is <code>false</code>.
+
+<p>Setting this flag to <code>true</code> may improve performance by reducing
+the overhead of interprocess communication, but it also increases the memory
+footprint of each process.</p></dd>
<dt><a name="nm"></a>{@code android:name}</dt>
<dd>The name of the class that implements the content provider, a subclass of
diff --git a/docs/html/guide/topics/ui/drag-drop.jd b/docs/html/guide/topics/ui/drag-drop.jd
index 4a87cd4938cb..8e4297f8ce1b 100644
--- a/docs/html/guide/topics/ui/drag-drop.jd
+++ b/docs/html/guide/topics/ui/drag-drop.jd
@@ -321,7 +321,7 @@ DraggableDot.java</a> in <a href="{@docRoot}resources/samples/ApiDemos/index.htm
<p>
If the listener wants to continue receiving drag events for this operation, it must
return boolean <code>true</code> to the system.
- <\p>
+ </p>
</td>
</tr>
<tr>
diff --git a/docs/html/guide/topics/ui/multi-window.jd b/docs/html/guide/topics/ui/multi-window.jd
index dede557ecc9a..bab582dd0b8c 100644
--- a/docs/html/guide/topics/ui/multi-window.jd
+++ b/docs/html/guide/topics/ui/multi-window.jd
@@ -215,7 +215,7 @@ android:resizeableActivity=["true" | "false"]
Set this attribute in your manifest's <a href=
"{@docRoot}guide/topics/manifest/activity-element"><code>&lt;activity&gt;</code></a>
node to indicate whether the activity supports <a href=
- "{@docRoot}training/tv/playback/picture-in-picture.jd">Picture-in-Picture</a>
+ "{@docRoot}training/tv/playback/picture-in-picture.html">Picture-in-Picture</a>
display. This attribute is ignored if <code>android:resizeableActivity</code>
is false.
</p>
diff --git a/docs/html/training/monitoring-device-state/battery-monitoring.jd b/docs/html/training/monitoring-device-state/battery-monitoring.jd
index db75aaf1f899..bab9c9cf6baf 100644
--- a/docs/html/training/monitoring-device-state/battery-monitoring.jd
+++ b/docs/html/training/monitoring-device-state/battery-monitoring.jd
@@ -141,10 +141,11 @@ receiver. The receiver is triggered whenever the device battery becomes low or e
condition by listening for {@link android.content.Intent#ACTION_BATTERY_LOW} and {@link
android.content.Intent#ACTION_BATTERY_OKAY}.</p>
-<pre>&lt;receiver android:name=".BatteryLevelReceiver">
-&lt;intent-filter>
- &lt;action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
- &lt;action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
+<pre>
+&lt;receiver android:name=".BatteryLevelReceiver">
+ &lt;intent-filter>
+ &lt;action android:name="android.intent.action.BATTERY_LOW"/>
+ &lt;action android:name="android.intent.action.BATTERY_OKAY"/>
&lt;/intent-filter>
&lt;/receiver></pre>
diff --git a/docs/html/wear/images/partners/mkors.png b/docs/html/wear/images/partners/mkors.png
new file mode 100644
index 000000000000..2f1e8ec3aad4
--- /dev/null
+++ b/docs/html/wear/images/partners/mkors.png
Binary files differ
diff --git a/docs/html/wear/images/partners/nixon.png b/docs/html/wear/images/partners/nixon.png
new file mode 100644
index 000000000000..8674da27974d
--- /dev/null
+++ b/docs/html/wear/images/partners/nixon.png
Binary files differ
diff --git a/docs/html/wear/images/partners/polar.png b/docs/html/wear/images/partners/polar.png
new file mode 100644
index 000000000000..2faeb063e1ff
--- /dev/null
+++ b/docs/html/wear/images/partners/polar.png
Binary files differ
diff --git a/docs/html/wear/index.jd b/docs/html/wear/index.jd
index f9bdef5ce6ce..1eb08bec612c 100644
--- a/docs/html/wear/index.jd
+++ b/docs/html/wear/index.jd
@@ -267,6 +267,9 @@ nonavpage=true
<div class="col-4">
<img src="/wear/images/partners/mips.png" alt="MIPS">
</div>
+ <div class="col-4">
+ <img src="/wear/images/partners/mkors.png" alt=Michael Kors">
+ </div>
<div class="col-4">
<img src="/wear/images/partners/mobvoi.png" alt="Mobvoi">
</div>
@@ -277,6 +280,12 @@ nonavpage=true
<img src="/wear/images/partners/nb.png" alt="New Balance">
</div>
<div class="col-4">
+ <img src="/wear/images/partners/nixon.png" alt="Nixon">
+ </div>
+ <div class="col-4">
+ <img src="/wear/images/partners/polar.png" alt="Polar">
+ </div>
+ <div class="col-4">
<img src="/wear/images/partners/qualcomm.png" alt="Qualcomm">
</div>
<div class="col-4">
diff --git a/docs/html/wear/preview/_book.yaml b/docs/html/wear/preview/_book.yaml
index a231fb5daa24..54d5442ec631 100644
--- a/docs/html/wear/preview/_book.yaml
+++ b/docs/html/wear/preview/_book.yaml
@@ -8,18 +8,24 @@ toc:
- title: API Overview
path: /wear/preview/api-overview.html
section:
- - title: Notification Improvements
- path: /wear/preview/features/notifications.html
- - title: Input Method Framework
- path: /wear/preview/features/ime.html
- title: Complications
path: /wear/preview/features/complications.html
- title: Navigation and Actions
path: /wear/preview/features/ui-nav-actions.html
+ - title: Curved Layout
+ path: /wear/preview/features/wearable-recycler-view.html
+ - title: Notification Improvements
+ path: /wear/preview/features/notifications.html
- title: Bridging for Notifications
path: /wear/preview/features/bridger.html
+ - title: Input Method Framework
+ path: /wear/preview/features/ime.html
- title: Wrist Gestures
path: /wear/preview/features/gestures.html
+ - title: Standalone apps
+ path: /wear/preview/features/standalone-apps.html
+ - title: App Distribution
+ path: /wear/preview/features/app-distribution.html
- title: Get Started
path: /wear/preview/start.html
diff --git a/docs/html/wear/preview/api-overview.jd b/docs/html/wear/preview/api-overview.jd
index 0b3ac6bf4b2d..f4612a259958 100644
--- a/docs/html/wear/preview/api-overview.jd
+++ b/docs/html/wear/preview/api-overview.jd
@@ -13,15 +13,16 @@ page.image=images/cards/card-n-apis_2x.png
<ol>
<li><a href="#complications">Complications</a></li>
<li><a href="#drawers">Navigation and Action Drawers</a></li>
+ <li><a href="#wrv">Curved Layout</a></li>
</ol>
</li>
<li><a href="#notify">Notifications and Input</a>
<ol>
- <li><a href="#expanded">Expanded Notification</a></li>
- <li><a href="#messaging">Messaging Style Notification</a></li>
+ <li><a href="#expanded">Expanded Notifications</a></li>
+ <li><a href="#messaging">Messaging Style Notifications</a></li>
+ <li><a href="#inline-action">Inline Action</a></li>
<li><a href="#smart-replies">Smart Reply</a></li>
- <li><a href="#content-action">Notification Content Action</a>
<li><a href="#remote-input">Remote Input</a></li>
<li><a href="#bridging">Bridging Mode</a></li>
<li><a href="#imf">Input Method Framework</a></li>
@@ -40,308 +41,447 @@ page.image=images/cards/card-n-apis_2x.png
</div>
</div>
-
-
-<p>
- The Android Wear Preview API is still in active development, but you can try
- it now as part of the Wear 2.0 Developer Preview. The sections below
- highlight some of the new features for Android Wear developers.
-</p>
-
-
-<h2 id="ui">User Interface Improvements</h2>
-
-<p>
- The preview introduces powerful additions to the user interface, opening up
- exciting possibilities to developers. A complication
- is any feature in a watch face that displays more than hours and
- minutes. With the Complications API, watch faces can display extra information
- and separate apps can expose complication data. The navigation and action
- drawers provide users with new ways to interact with apps.
-</p>
-
-
-<h3 id="complications">Complications</h3>
-<img src="{@docRoot}wear/preview/images/complications-main-image.png"
- height="320" style="float:right;margin:10px 0 0 40px" />
-
-<p>
- A <a href=
- "https://en.wikipedia.org/wiki/Complication_(horology)">complication</a> is a
- feature of a watch face that displays more than hours and minutes, such as a
- battery indicator or a step counter. The Complications API thus helps watch face
- developers create visual features and the data connections they
- require.
-</p>
-
-<p>
- Watch faces that use this API can display extra information without needing
- code for getting the underlying data. Data providers can supply data to any
- watch face using the API.
-</p>
-
-<p>For information about this API,
-see <a href="{@docRoot}wear/preview/features/complications.html">
- Watch Face Complications</a>.
-</p>
-
-<h3 id="drawers">Navigation and Action drawers</h3>
-
-<p>Wear 2.0 introduces two new widgets, navigation drawer and action drawer. These
- widgets give your users new ways to interact with your app. The navigation drawer
- appears at the top of the screen and allows users to navigate between app views.
- The action drawer appears at the bottom of the screen and allows users to choose
- from a list of actions associated with the current usage context. These drawers
- are accessible to users when they edge swipe from the top or bottom of the
- screen; they peek when users scroll in an opposite direction.
-</p>
-
-<div class="cols">
- <div class="col-2of6">
- <img src="{@docRoot}wear/preview/images/nav_drawer.gif"
- height="240" alt="" style="padding:.5em">
- </div>
- <div class="col-2of6">
- <img src="{@docRoot}wear/preview/images/action_drawer.gif"
- height="240" alt="" style="padding:.5em;">
- </div>
-</div>
-
-<p>
- To learn how to add these widgets to your app, see
- <a href="{@docRoot}wear/preview/features/ui-nav-actions.html">
- Wear Navigation and Actions</a>.
-</p>
-
-
-<h2 id="notify">Notifications and Input</h2>
-
-<p>In Wear 2.0, we’ve redesigned the key experiences on the watch to be even more
- intuitive and provide users new ways to respond to messages. Some of the highlights
- are below; for a complete list of changes, see
- <a href="{@docRoot}wear/preview/features/notifications.html">Notification Changes in Wear 2.0</a>.
-
-
-<img src="{@docRoot}wear/preview/images/expanded_diagram.png" height="340"
- style="float:left;margin:10px 20px 0 0" />
-<h3 id="expanded">Expanded notifications</h3>
-
-<p>
- When a user taps on a notification that is bridged from the phone to the
- watch or that lacks a
- <a href="{@docRoot}reference/android/support/v4/app/NotificationCompat.Builder.html#setContentIntent(android.app.PendingIntent)">
- {@code contentIntent}</a>, the user will be taken to the expanded view of
- that notification. When you <a href=
- "{@docRoot}training/wearables/notifications/pages.html">specify additional
- content pages</a> and actions for a notification, those are available to the
- user within the expanded notification. Each expanded notification follows
- <a href="https://google.com/design/spec-wear">Material Design for Android
- Wear</a>, so the user gets an app-like experience.
-</p>
-
-
-<h3 id="messaging">Messaging Style notification</h3>
-<p> If you have a chat messaging app, your notifications should use
-{@code Notification.MessagingStyle}, which is new in Android 6.0. Wear 2.0 uses
-the chat messages included in a
-<a href="{@docRoot}preview/features/notification-updates.html#style">{@code MessagingStyle}</a>
- notification
-(see {@code addMessage()}) to provide a rich chat app-like experience in the
-expanded notification.
-</p>
-
-
-<h3 id="smart-replies">Smart Reply</h3>
-
-<p>Android Wear 2.0 introduces support for Smart Reply in
-<a href="{@docRoot}wear/preview/features/notifications.html#messaging">{@code MessagingStyle}</a>
- notifications. Smart Reply provides the user with contextually relevant,
- touchable choices in the expanded notification and in
- <a href="{@docRoot}reference/android/app/RemoteInput.html">{@code RemoteInput}</a>.
-</p>
-
-<p>By enabling Smart Reply for your {@code MessagingStyle} notifications, you provide
-users a fast (single tap), discreet (no speaking aloud), and reliable way to respond
- to chat messages they receive.
- </p>
-
-
-<img src="{@docRoot}wear/preview/images/remoteinput.png" height="350"
- style="float:right;margin:10px 0 0 40px" />
-
-<h3 id="remote-input">Remote Input</h3>
-
-<p>Wear 2.0 users can choose between various input options from
-<a href="{@docRoot}reference/android/app/RemoteInput.html">Remote Input</a>.
- These options include:
-</p>
-<ul>
-<li>Dictation</li>
-<li>Emoji</li>
-<li>Canned responses</li>
-<li>Smart Reply</i>
-<li>Default IME </i>
-</ul>
-
-<p>
-For messaging notifications with Smart Reply, the system-generated Smart Reply
- appears within <a href="{@docRoot}reference/android/app/RemoteInput.html">{@code RemoteInput}</a>
- above the developer-provided list of canned responses.
- You can also use the
- <a href="{@docRoot}reference/android/app/RemoteInput.Builder.html#setChoices(java.lang.CharSequence[])">setChoices()</a>
- method in the {@code RemoteInput} API to enable users to select from a list
- of canned responses.
-</p>
-
-<h3 id="bridging"> Bridging Mode </h3>
-<p>By default, notifications are
-<a href="{@docRoot}training/wearables/notifications/index.html">
-bridged</a> (shared) from an app on a companion phone
-to the watch. Since a phone app and a standalone watch app may be sources of the
- same notifications, the Android Wear 2.0 Preview includes a Bridging mode feature.
- Developers can begin planning to change the behavior of notifications with the
- following:
-</p>
-
-<ul>
-<li>Specifying in the standalone app's Android manifest file that notifications from
- the corresponding phone app should not be bridged to the watch. </li>
-<li>Setting a dismissal ID so notification dismissals (by users) are synced across
-devices.</li>
-</ul>
-
-<p>For an example of how to use this feature, see <a href="{@docRoot}wear/preview/features/bridger.html">
-Bridging Mode for Notifications</a>.</p>
-
-<h3 id="imf">Input Method Framework</h3>
-
-<p>Wear 2.0 extends the Android input method framework (IMF) to Android Wear.
-This allows users to enter text on Wear using the system default IME or third party
- IMEs. The Wear IME lets the user enter text via gesture typing as well as tapping
- individual keys. The IMF APIs used for Wear devices are the same as other form
- factors, though usage is slightly different due to limited screen real estate.
-</p>
-
-<p>Wear provides user settings on the watch that let the user:</p>
-<ul>
-<li>Enable multiple IMEs from the list of installed IMEs.</li>
-<li>Set a single default IME from the list of enabled IMEs.</li>
-<li>Change languages for various IMEs.</li>
-</ul>
-
-<p>To learn how to create an IME for Wear, see <a href="{@docRoot}wear/preview/features/ime.html">
-Input Method Framework</a>.
-</p>
-
-<h3 id="wrist-gestures">Wrist Gestures</h3>
-
-<p>
- Wrist gestures can enable quick, one-handed interactions with your app
- when use of a touch screen is inconvenient. The following
- <a href="https://support.google.com/androidwear/answer/6312406">wrist gestures</a>
- are available for use by apps:
-</p>
-
-<ul>
- <li>Flick wrist out</li>
- <li>Flick wrist in</li>
-</ul>
-
-<p>For more information, see
-<a href="{@docRoot}wear/preview/features/gestures.html">
- Wrist Gestures</a>.
-</p>
-
-<h2 id="stand-alone">Standalone Devices</h2>
-
-<p>Standalone watches will enable Android Wear apps to work independently of phone
- apps. This means your app can continue to offer full functionality even if the
- paired phone is far away or turned off. </p>
-
-<h3 id="wear-apk">Wear-Specific APKs</h3>
-
-<p>For delivery to a watch, an Android Wear app is currently embedded in its corresponding
-phone app. This delivery method can result in an increased download size for users,
- regardless of whether they have an Android Wear device.
-</p>
-
-<p>With standalone devices, the
-<a href ="{@docRoot}google/play/publishing/multiple-apks.html">Multi-APK</a>
- delivery method will be used. Developers will have the ability to release Android
- Wear apps independently of the corresponding phone apps. Please stay tuned for
- more information about this change.
-</p>
-
-<h3 id="network">Network Access</h3>
-
-<p>Since Android Wear apps will work independently of phone apps, Android Wear's
- network access will no longer require the
- <a href="{@docRoot}training/wearables/data-layer/index.html">
- Wearable Data Layer API</a>. Android Wear apps will have the ability to make
- their own network requests. Additionally, they will be able to directly use
- Google Cloud Messaging.
-</p>
-
-<p>No APIs for network access or GCM are specific to Android Wear; refer to the
-existing documentation about
-<a href="{@docRoot}training/basics/network-ops/connecting.html">
-Connecting to the Network</a> and
-<a href="https://developers.google.com/cloud-messaging/">Cloud Messaging</a>.
-</p>
-
-<p>We recommend using the following libraries:</p>
-<ul>
-<li><a href="{@docRoot}reference/android/app/job/JobScheduler.html">
-JobScheduler</a> for asynchronous jobs, including polling at regular intervals
-</li>
-<li>Multi-networking APIs if you need to connect to specific network types; see
-the <a href="{@docRoot}about/versions/android-5.0.html#Wireless">
-Multiple Network Connections</a>
-</li>
-</ul>
-
-<p>You will still be able to use the
-<a href="{@docRoot}training/wearables/data-layer/index.html">
- Wearable Data Layer API</a> to communicate with a phone app.
- However, use of this API to connect to a network will be discouraged.
- </p>
-
-
-<h3 id="auth">Authentication</h3>
-
-<p>Since Android Wear apps will work independently of phone apps, Android Wear's
- authentication capabilities will be more powerful; apps will have new ways to
- authenticate.</p>
-
-<h4>Users can enter a username and password on a watch</h4>
-
-<p>Google Keyboard will be standard on Android Wear, allowing for direct text
-entry. This feature will work as expected with standard
-<a href="{@docRoot}reference/android/widget/EditText.html">EditText widgets</a>.
-For passwords, the {@code textPassword} attribute will be used.</p>
-
-<h4>Utilizing Account Manager</h4>
-
-<p>Android Wear will include the
-<a href="{@docRoot}reference/android/accounts/AccountManager.html">
-AccountManager</a>, which will be accessible for syncing and storing account
-data, as it is on an Android phone.</p>
-
-<h4>Authentication tokens can be passed over the Wearable Data Layer</h4>
-
-<p>For Android-paired watches (only), a phone securely
-transfers authentication credentials to a watch app via the
-<a href="{@docRoot}training/wearables/data-layer/index.html">
-Wearable Data Layer API</a>. The credentials can be transferred as
-messages or data items.</p>
-
-<p>If your watch app needs to determine if your phone app is installed, you can
-advertise a capability on the phone app and retrieve the capability on the
-watch. For more information, see the following sections of
-<a href="{@docRoot}training/wearables/data-layer/messages.html">
-Sending and Receiving Messages</a>:</p>
-
-<ul>
- <li>Advertise Capabilities</li>
- <li>Retrieve the Nodes with the Required Capabilities</li>
-</ul>
+ <p>
+ Wear 2.0 is still in active development, but you can try it as part of
+ the Wear 2.0 Developer Preview. The sections below highlight some of the
+ new features for developers.
+ </p>
+
+ <h2 id="ui">
+ User Interface Improvements
+ </h2>
+
+ <p>
+ The preview introduces powerful additions to the user interface, opening
+ up exciting possibilities to developers.
+ </p>
+
+ <h3 id="complications">
+ Complications
+ </h3>
+
+ <img src="{@docRoot}wear/preview/images/complications-main-image.png"
+ height="320" style="float:right;margin:10px 0 0 40px">
+ <p>
+ A <a href=
+ "https://en.wikipedia.org/wiki/Complication_(horology)">complication</a>
+ is a feature of a watch face that displays more than hours and minutes,
+ such as a battery indicator or a step counter. The Complications API thus
+ helps watch face developers create visual features and the data
+ connections they require.
+ </p>
+
+ <p>
+ Watch faces that use this API can display extra information without
+ needing code for getting the underlying data. Data providers can supply
+ data to any watch face using the API.
+ </p>
+
+ <p>
+ For information about this API, see <a href=
+ "{@docRoot}wear/preview/features/complications.html">Watch Face
+ Complications</a>.
+ </p>
+
+ <h3 id="drawers">
+ Navigation and Action Drawers
+ </h3>
+
+ <p>
+ Wear 2.0 introduces two new widgets, navigation drawer and action drawer.
+ These widgets give your users new ways to interact with your app. The
+ navigation drawer appears at the top of the screen and allows users to
+ navigate between app views. The action drawer appears at the bottom of
+ the screen and allows users to choose from a list of actions associated
+ with the current usage context. These drawers are accessible to users
+ when they edge swipe from the top or bottom of the screen; they peek when
+ users scroll in an opposite direction.
+ </p>
+
+ <div class="cols">
+ <div class="col-2of6">
+ <img src="{@docRoot}wear/preview/images/nav_drawer.gif" height="240"
+ alt="" style="padding:.5em">
+ </div>
+
+ <div class="col-2of6">
+ <img src="{@docRoot}wear/preview/images/action_drawer.gif" height="240"
+ alt="" style="padding:.5em;">
+ </div>
+ </div>
+
+ <p>
+ To learn how to add these widgets to your app, see <a href=
+ "{@docRoot}wear/preview/features/ui-nav-actions.html">Wear Navigation and
+ Actions</a>.
+ </p>
+
+ <h3 id="wrv">
+ Curved Layout
+ </h3>
+
+ <p>
+ Wear 2.0 introduces the <code>WearableRecyclerView</code> class for
+ displaying and manipulating a vertical list of items,
+ optimized for round displays.
+ </p>
+
+ <p>
+ The key features include the following:
+ </p>
+
+ <ul>
+ <li>A curved layout on round devices
+ </li>
+
+ <li>A circular scrolling gesture, which can be toggled on and off
+ </li>
+ </ul>
+
+ <p>
+ To learn how to create a curved layout optimized for round devices, see
+ <a href=
+ "https://developer.android.com/wear/preview/features/wearable-recycler-view.html">
+ Curved Layout</a>.
+ </p>
+
+ <h2 id="notify">
+ Notifications and Input
+ </h2>
+
+ <p>
+ In Wear 2.0, we’ve redesigned the key experiences on the watch to be even
+ more intuitive and provide users new ways to respond to messages. Some of
+ the highlights are below; for a complete list of changes, see <a href=
+ "{@docRoot}wear/preview/features/notifications.html">Notification Changes
+ in Wear 2.0</a>. <img src=
+ "{@docRoot}wear/preview/images/expanded_diagram.png" height="340" style=
+ "float:left;margin:10px 20px 0 0">
+ </p>
+
+ <h3 id="expanded">
+ Expanded Notifications
+ </h3>
+
+ <p>
+ When a user taps on a notification that is bridged from the phone to the
+ watch or that lacks a <a href=
+ "{@docRoot}reference/android/support/v4/app/NotificationCompat.Builder.html#setContentIntent(android.app.PendingIntent)">
+ {@code contentIntent}</a>, the user will be taken to the expanded view of
+ that notification. When you <a href=
+ "{@docRoot}training/wearables/notifications/pages.html">specify
+ additional content pages</a> and actions for a notification, those are
+ available to the user within the expanded notification. Each expanded
+ notification follows <a href=
+ "https://google.com/design/spec-wear">Material Design for Android
+ Wear</a>, so the user gets an app-like experience.
+ </p>
+
+ <h3 id="messaging">
+ Messaging Style Notifications
+ </h3>
+
+ <p>
+ If you have a chat messaging app, your notifications should use {@code
+ Notification.MessagingStyle}, which is new in Android 6.0. Wear 2.0 uses
+ the chat messages included in a <a href=
+ "{@docRoot}preview/features/notification-updates.html#style">{@code
+ MessagingStyle}</a> notification (see {@code addMessage()}) to provide a
+ rich chat, app-like experience in the expanded notification.
+ </p>
+
+ <h3 id="inline-action">
+ Inline Action
+ </h3>
+
+ <p>
+ Wear 2.0 enables you to add an inline action within the notification
+ stream so that users can quickly take an action on a notification.
+ Examples of good use cases for an inline action within a notification stream
+ include replying to a text message, stopping a fitness activity, or
+ archiving an email message.
+ </p>
+
+ <p>
+ To learn how to add an inline action to your notification stream, see
+ <a href=
+ "https://developer.android.com/wear/preview/features/notifications.html#inline">
+ Inline Action</a>.
+ </p>
+
+ <h3 id="smart-replies">
+ Smart Reply
+ </h3>
+
+ <p>
+ Android Wear 2.0 introduces support for Smart Reply in <a href=
+ "{@docRoot}wear/preview/features/notifications.html#messaging">{@code
+ MessagingStyle}</a> notifications. Smart Reply provides the user with
+ contextually relevant, touchable choices in the expanded notification and
+ in <a href="{@docRoot}reference/android/app/RemoteInput.html">{@code
+ RemoteInput}</a>.
+ </p>
+
+ <p>
+ By enabling Smart Reply for your {@code MessagingStyle} notifications,
+ you provide users a fast (single tap), discreet (no speaking aloud), and
+ reliable way to respond to chat messages they receive.
+ </p>
+
+ <img src="{@docRoot}wear/preview/images/remoteinput.png" height="350"
+ style="float:right;margin:10px 0 0 40px">
+
+ <h3 id="remote-input">
+ Remote Input
+ </h3>
+
+ <p>
+ Wear 2.0 users can choose between various input options from <a href=
+ "{@docRoot}reference/android/app/RemoteInput.html">Remote Input</a>.
+ These options include:
+ </p>
+
+ <ul>
+ <li>Dictation
+ </li>
+
+ <li>Emoji
+ </li>
+
+ <li>Canned responses
+ </li>
+
+ <li>Smart Reply
+ </li>
+
+ <li>Default IME
+ </li>
+ </ul>
+
+ <p>
+ For messaging notifications with Smart Reply, the system-generated Smart
+ Reply appears within <a href=
+ "{@docRoot}reference/android/app/RemoteInput.html">{@code
+ RemoteInput}</a> above the developer-provided list of canned responses.
+ You can also use the <a href=
+ "{@docRoot}reference/android/app/RemoteInput.Builder.html#setChoices(java.lang.CharSequence[])">
+ setChoices()</a> method in the {@code RemoteInput} API to enable users to
+ select from a list of canned responses.
+ </p>
+
+ <h3 id="bridging">
+ Bridging Mode
+ </h3>
+
+ <p>
+ By default, notifications are <a href=
+ "{@docRoot}training/wearables/notifications/index.html">bridged</a>
+ (shared) from an app on a companion phone to the watch. Since a phone app
+ and a standalone watch app may be sources of the same notifications, the
+ Android Wear 2.0 Preview includes a Bridging mode feature.
+ </p>
+
+ <p>
+ For information about this feature, see <a href=
+ "{@docRoot}wear/preview/features/bridger.html">Bridging Mode for
+ Notifications</a>.
+ </p>
+
+ <h3 id="imf">
+ Input Method Framework
+ </h3>
+
+ <p>
+ Wear 2.0 extends the Android input method framework (IMF) to Android
+ Wear. This allows users to enter text on Wear using the system default
+ IME or third party IMEs. The Wear IME lets the user enter text via
+ gesture typing as well as tapping individual keys. The IMF APIs used for
+ Wear devices are the same as other form factors, though usage is slightly
+ different due to limited screen real estate.
+ </p>
+
+ <p>
+ Wear provides user settings on the watch that let the user:
+ </p>
+
+ <ul>
+ <li>Enable multiple IMEs from the list of installed IMEs.
+ </li>
+
+ <li>Set a single default IME from the list of enabled IMEs.
+ </li>
+
+ <li>Change languages for various IMEs.
+ </li>
+ </ul>
+
+ <p>
+ To learn how to create an IME for Wear, see <a href=
+ "{@docRoot}wear/preview/features/ime.html">Input Method Framework</a>.
+ </p>
+
+ <h3 id="wrist-gestures">
+ Wrist Gestures
+ </h3>
+
+ <p>
+ Wrist gestures can enable quick, one-handed interactions with your app
+ when use of a touch screen is inconvenient. The following <a href=
+ "https://support.google.com/androidwear/answer/6312406">wrist
+ gestures</a> are available for use by apps:
+ </p>
+
+ <ul>
+ <li>Flick wrist out
+ </li>
+
+ <li>Flick wrist in
+ </li>
+ </ul>
+
+ <p>
+ For more information, see <a href=
+ "{@docRoot}wear/preview/features/gestures.html">Wrist Gestures</a>.
+ </p>
+
+ <h2 id="stand-alone">
+ Standalone Devices
+ </h2>
+
+ <p>
+ Standalone watches enable Android Wear apps to work independently of
+ phone apps. This means your app can continue to offer full functionality
+ even if the paired phone is far away or turned off.
+ </p>
+
+ <h3 id="wear-apk">
+ Wear-Specific APKs
+ </h3>
+
+ <p>
+ For delivery to a watch, an Android Wear app is currently embedded in its
+ corresponding phone app. This delivery method can result in an increased
+ download size for users, regardless of whether they have an Android Wear
+ device.
+ </p>
+
+ <p>
+ For information about planning and building your standalone app
+ for Wear 2.0, see <a href=
+ "https://developer.android.com/wear/preview/features/standalone-apps.html">
+ Standalone Apps</a>.
+ </p>
+
+ <p>
+ For information about distributing your app, see <a href=
+ "https://developer.android.com/wear/preview/features/app-distribution.html">
+ App Distribution</a>.
+ </p>
+
+ <h3 id="network">
+ Network Access
+ </h3>
+
+ <p>
+ Since Android Wear apps will work independently of phone apps, Android
+ Wear's network access will no longer require the <a href=
+ "{@docRoot}training/wearables/data-layer/index.html">Wearable Data Layer
+ API</a>. Android Wear apps will have the ability to make their own
+ network requests. Additionally, they will be able to directly use Google
+ Cloud Messaging. For more information, see
+ <a href=
+ "https://developer.android.com/wear/preview/features/standalone-apps.html#network_access">
+ Network Access and Cloud Messaging</a>.
+ </p>
+
+ <p>
+ No APIs for network access or GCM are specific to Android Wear; refer to
+ the existing documentation about <a href=
+ "{@docRoot}training/basics/network-ops/connecting.html">Connecting to the
+ Network</a> and <a href=
+ "https://developers.google.com/cloud-messaging/">Cloud Messaging</a>.
+ </p>
+
+ <p>
+ We recommend using the following libraries:
+ </p>
+
+ <ul>
+ <li>
+ <a href=
+ "{@docRoot}reference/android/app/job/JobScheduler.html">JobScheduler</a>
+ for asynchronous jobs, including polling at regular intervals
+ </li>
+
+ <li>Multi-networking APIs, to connect to specific network
+ types; see <a href=
+ "{@docRoot}about/versions/android-5.0.html#Wireless">Multiple Network
+ Connections</a>
+ </li>
+ </ul>
+
+ <p>
+ The <a href=
+ "{@docRoot}training/wearables/data-layer/index.html">Wearable Data Layer
+ API</a> is available to communicate with a phone app.
+ However, use of this API to connect to a network will be discouraged.
+ </p>
+
+ <h3 id="auth">
+ Authentication
+ </h3>
+
+ <p>
+ Since Android Wear apps will work independently of phone apps, Android
+ Wear's authentication capabilities will be more powerful; apps will have
+ new ways to authenticate.
+ </p>
+
+ <h4>
+ Users can enter a username and password on a watch
+ </h4>
+
+ <p>
+ Google Keyboard will be standard on Android Wear, allowing for direct
+ text entry. This feature will work as expected with standard <a href=
+ "{@docRoot}reference/android/widget/EditText.html">EditText widgets</a>.
+ For passwords, the {@code textPassword} attribute will be used.
+ </p>
+
+ <h4>
+ Utilizing Account Manager
+ </h4>
+
+ <p>
+ Android Wear will include the <a href=
+ "{@docRoot}reference/android/accounts/AccountManager.html">AccountManager</a>,
+ which will be accessible for syncing and storing account data, as it is
+ on an Android phone.
+ </p>
+
+ <h4>
+ Authentication tokens can be passed over the Wearable Data Layer
+ </h4>
+
+ <p>
+ For Android-paired watches (only), a phone securely transfers
+ authentication credentials to a watch app via the <a href=
+ "{@docRoot}training/wearables/data-layer/index.html">Wearable Data Layer
+ API</a>. The credentials can be transferred as messages or data items.
+ </p>
+
+ <p>
+ If your watch app needs to determine if your phone app is installed, you
+ can advertise a capability on the phone app and retrieve the capability
+ on the watch. For more information, see the following sections of
+ <a href="{@docRoot}training/wearables/data-layer/messages.html">Sending
+ and Receiving Messages</a>:
+ </p>
+
+ <ul>
+ <li>Advertise Capabilities
+ </li>
+
+ <li>Retrieve the Nodes with the Required Capabilities
+ </li>
+ </ul>
diff --git a/docs/html/wear/preview/behavior-changes.jd b/docs/html/wear/preview/behavior-changes.jd
index 02146220dbdd..c93d337a0a8c 100644
--- a/docs/html/wear/preview/behavior-changes.jd
+++ b/docs/html/wear/preview/behavior-changes.jd
@@ -22,6 +22,8 @@ page.tags="preview", "developer preview"
<ul>
<li><a href="#activity-dismissal">Activity Dismissal</a></li>
+ <li><a href="#invalid-fields">Invalid Fields for a Complication Type</a></li>
+ <li><a href="#empty">Complication Types for Empty Data</a></li>
</ul>
</div>
@@ -61,3 +63,44 @@ page.tags="preview", "developer preview"
<a href="{@docRoot}wear/preview/features/ui-nav-actions.html">navigation
drawers</a>.
</p>
+
+<h2 id="invalid-fields">Invalid Fields for a Complication Type</h2>
+
+<p>
+ When a watch face uses the <a href="{@docRoot}wear/preview/features/complications.html">
+ Complications API</a>, the watch face requests data from a chosen provider.
+ A <code>ComplicationData</code> object, which contains
+ complication types, is returned.
+</p>
+
+<p>
+ A complication type determines the
+ kinds of data that a watch face can render. This section describes
+ a behavior change related to the <code>ComplicationData</code> object.
+</p>
+
+<p>
+ Starting with
+ <a href="https://developer.android.com/wear/preview/support.html#dp3">
+ Developer Preview 3</a>, when a watch face requests a field that is invalid
+ for a complication type, a default value for the field is returned.
+ For example, if a watch face tries to access a <code>Long text</code>
+ field in a <code>SHORT_TEXT</code> type, the default value for the
+ <code>Long text</code> field is returned.
+ In previous releases, such a request for an invalid field
+ (for a type) resulted in an exception.
+</p>
+
+<h2 id="empty">Complication Types for Empty Data</h2>
+
+<p>
+ Starting with
+ <a href="https://developer.android.com/wear/preview/support.html#dp3">
+ Developer Preview 3</a>, the complication types used for "empty" data are
+ changed. Apps that use the Complications API
+ may need to be updated to use
+ <code>TYPE_NO_DATA</code>. See the information
+ about <code>TYPE_NO_DATA</code> in the
+ <a href="{@docRoot}wear/preview/features/complications.html#types_and_fields">
+ Types and fields</a> section.
+</p>
diff --git a/docs/html/wear/preview/downloads.jd b/docs/html/wear/preview/downloads.jd
index 4bc401bae072..08ed233afc8c 100644
--- a/docs/html/wear/preview/downloads.jd
+++ b/docs/html/wear/preview/downloads.jd
@@ -171,7 +171,9 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement
<li>
<a href="#set_up_a_watch">Set Up a Watch</a>
</li>
-
+ <li>
+ <a href="#set_up_a_phone">Set Up a Phone</a>
+ </li>
<li>
<a href="#set_up_an_emulator">Set Up an Emulator</a>
</li>
@@ -180,7 +182,7 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement
</div>
<p>
- You can run and test your app with the Android Wear 2.0 Developer Preview
+ You can run and test your app with the Android Wear 2.0 Preview
in either of these ways:
</p>
@@ -237,6 +239,13 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement
following tables and flash it to the corresponding device.
</p>
+ <p class="caution"><strong>Caution:</strong>
+ After you flash an image to a watch, follow the steps for
+ <a href="#set_up_a_phone">setting up a phone</a> with the beta version of
+ the Android Wear companion app. To use a Wear 2.0 image on a watch,
+ you must have the beta companion app on a paired phone.
+ </p>
+
<p>
To restore your device to its original state during the preview,
you can flash the appropriate retail system image, below, to the device.
@@ -266,9 +275,9 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement
<td>
Preview image for testing
</td>
- <td><a href="#top" onclick="onDownload(this)">nemo-nvd83h-factory-48ac950c.tgz</a><br>
- MD5: dd351884cce9fb5bf1bdec0a8e5f56e3<br>
- SHA-1: 48ac950c48faef96a7770e3c1acb56d23a28d859
+ <td><a href="#top" onclick="onDownload(this)">nemo-nve68j-factory-302a33ea.tgz</a><br>
+ MD5: ddfccc3e050c7e2db8d657c82f7d6291<br>
+ SHA-1: 302a33eac348c401fcb165bad4b9aaa40c7beb2b
</td>
</tr>
@@ -276,9 +285,9 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement
<td>
Non-preview image (for after testing)
</td>
- <td><a href="#top" onclick="onDownload(this)">nemo-mnc40x-factory-fa528bec.tgz</a><br>
- MD5: 0b8ba3653d5a93cb854f4d7409d7b6c9<br>
- SHA-1: fa528bec8aba3bf6c7d901ba63cd6ea0a08dbeb0
+ <td><a href="#top" onclick="onDownload(this)">nemo-mfd18l-factory-3faf6f2d.tgz</a><br>
+ MD5: f3a0090c0e99da82ad095b5d2a9acc6d<br>
+ SHA-1: 3faf6f2d7f422a17a5f6c54cf5e1d2c5622689b0
</td>
</tr>
@@ -307,18 +316,18 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement
<td>
Preview image for testing
</td>
- <td><a href="#top" onclick="onDownload(this)">sturgeon-nvd83h-factory-cb5a11ab.tgz</a><br>
- MD5: 38c1047992b1d28f6833d9f6c8470cdc<br>
- SHA-1: cb5a11ab0260ea3ca7da5894e73e41f70357da6b
+ <td><a href="#top" onclick="onDownload(this)">sturgeon-nve68j-factory-6607cd31.tgz</a><br>
+ MD5: f78ac6ba8bb84038d163cc2d7ca85040<br>
+ SHA-1: 6607cd31858af1bfd50b905c68f7cf1f0b6e570e
</td>
</tr>
<tr id="sturgeon-non-preview">
<td>
Non-preview image (for after testing)
</td>
- <td><a href="#top" onclick="onDownload(this)">sturgeon-mec23l-factory-48003078.tgz</a><br>
- MD5: 417b5cbddb29a2262bce133e283d2732<br>
- SHA-1: 4800307843580f818557dd7c43d8ba2161e289b2
+ <td><a href="#top" onclick="onDownload(this)">sturgeon-m6e69f-factory-e659286a.tgz</a><br>
+ MD5: 12ce6cb0b0e43b67ea46a886eae052ae<br>
+ SHA-1: e659286aa9004f4555a476ede4e8b690f56cfefd
</td>
</tr>
</table>
@@ -437,13 +446,14 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement
<h4 id="set_up_watch">
- Set up the watch and begin testing
+ Set up the watch
</h4>
<p>
After the <code>flash-all</code> script finishes, your watch reboots.
- Pair the watch with a phone or tablet. The preview now is available
- for testing on the watch. Before installing an app, perform the
+ Only pair the watch with a phone (so you can begin testing the preview)
+ by using the instructions in <a href="#set_up_a_phone">Set Up a Phone</a>.
+ Additionally, before installing an app, perform the
following steps on the watch to re-secure the watch's bootloader:
</p>
@@ -483,7 +493,9 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement
</ol>
<p>
- Your watch is ready for you to <a href=
+ After you follow the instructions in
+ <a href="#set_up_a_phone">Set Up a Phone</a>,
+ your watch will be ready for you to <a href=
"{@docRoot}training/wearables/apps/creating.html#Install">install and run
your app</a>:
</p>
@@ -539,6 +551,97 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement
device reset and removes all user data on the device.
</p>
+ <h2 id="set_up_a_phone">
+ Set Up a Phone
+ </h2>
+
+ <p>
+ On a phone, follow the instructions in this section to install the beta
+ version of the Android Wear companion app. The beta version cannot be run
+ on a phone at the same time as the non-beta version. Additionally, the
+ beta version is English-only.
+ </p>
+
+ <p>
+ <p class="caution"><strong>Caution:</strong> If you have an existing
+ pairing of the phone to a Wear 1.x
+ watch, installation of the beta companion app will cause a loss of that
+ pairing.
+ </p>
+
+ <h3 id="join-the-wear-2-0-preview-group">
+ Join the Wear 2.0 preview group
+ </h3>
+
+ <p>
+ To access the beta companion app, you must <a href=
+ "https://groups.google.com/forum/#!forum/android-wear-developer-preview">join
+ the preview group in Google Groups</a>.
+ </p>
+
+ <h3>
+ Opt in for beta testing
+ </h3>
+
+ <p>
+ On the <a href=
+ "https://play.google.com/apps/testing/com.google.android.wearable.app">Testing
+ Opt-in</a> page, select <strong>Become a Tester</strong>.
+ </p>
+
+ <h3 id="download-and-install-the-beta-version-of-the-companion-app">
+ Download and install the beta version of the companion app
+ </h3>
+
+ <p>
+ On the Play Store on your phone, go to the <a href=
+ "https://play.google.com/store/apps/details?id=com.google.android.wearable.app">
+ Android Wear app listing</a>. Tap <strong>Update</strong> to download and
+ install the beta version of the app. After installation, confirm that
+ <strong>Auto-update</strong> is selected for the app (see
+ the "Set up automatic updates for specific apps" section of <a href=
+ "https://support.google.com/googleplay/answer/113412">Update downloaded
+ apps</a>). Tap <strong>Open</strong> to start the app.
+ </p>
+
+ <h3 id="pairing">
+ Pair the phone to the watch
+ </h3>
+
+ <p>
+ After you install the beta version of the companion app on a phone,
+ you can pair the phone to the watch:
+ </p>
+
+ <ol>
+ <li>On the phone, select your device name from the list of devices.
+ A pairing code is displayed on the phone and on the watch.
+ Ensure that the codes match.
+ </li>
+
+ <li>Tap <strong>Pair</strong> to
+ continue the pairing process. When the watch is connected to
+ the phone, a confirmation message is displayed.
+ On the phone, a screen is displayed that lists
+ the accounts on the phone.
+ </li>
+
+ <li>Choose a Google account to add and sync to your watch.
+ </li>
+
+ <li>Confirm the screen lock and enter the password to start the copying of
+ the account from the phone to the watch.
+ </li>
+
+ <li>Follow the instructions in the wizard to finish the
+ pairing process.
+ </li>
+ </ol>
+
+ <p>
+ You can begin testing your app with the preview.
+ </p>
+
<h2 id="set_up_an_emulator">
Set Up an Emulator
</h2>
@@ -564,11 +667,11 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement
Click <strong>Next</strong>.
</li>
- <li>Select an <strong>N</strong> image to download. The images may be on
+ <li>Select a <strong>Nougat</strong> image to download. The images may be on
the <strong>x86</strong> tab instead of the <strong>Recommended</strong>
tab, until installed. For example, select the image with the
- <strong>Release Name</strong> of N, the <strong>API Level</strong> of N,
- and the <strong>Target</strong> of "Android 6.X (with Android Wear)".
+ <strong>Release Name</strong> of Nougat, the <strong>API Level</strong> of 24,
+ and the <strong>Target</strong> of "Android 7.0 (with Android Wear)".
When the download and installation are complete, click
<strong>Finish</strong> and then click <strong>Next</strong>.
</li>
diff --git a/docs/html/wear/preview/features/app-distribution.jd b/docs/html/wear/preview/features/app-distribution.jd
new file mode 100644
index 000000000000..319efa6b6554
--- /dev/null
+++ b/docs/html/wear/preview/features/app-distribution.jd
@@ -0,0 +1,325 @@
+page.title=App Distribution
+meta.keywords="wear-preview"
+page.tags="wear-preview"
+page.image=images/cards/card-n-sdk_2x.png
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+
+ <ul>
+ <li><a href="#publish">Publish Your APKs</a></li>
+ <li><a href="#targeting">Setting Up Targeting for a Watch</a></li>
+ <li><a href="#console">Using the Play Developer Console</a></li>
+ </ul>
+
+</div>
+</div>
+
+ <p>
+ With Android Wear 2.0, a user can visit the Play Store on a watch and
+ download a Wear app directly to the watch.
+ </p>
+
+ <p>
+ Generally, a Wear 2.0 app in the Play Store needs
+ a minimum and target API level of 24 or higher in
+ the Android manifest file. The minimum SDK level can be 23
+ only if you are using the same APK
+ for Wear 1.0 and 2.0 (and thus have an embedded Wear 1.0 APK).
+ </p>
+
+ <h2 id="publish">
+ Publish Your APKs
+ </h2>
+
+ <p>
+ To make your app appear in the on-watch Play Store, upload
+ the watch APK in the Play Developer Console just as you would any other
+ APK. If you only have a watch APK and no phone APK, no other steps
+ are required.
+ </p>
+
+ <p>
+ If you have a phone APK in addition to a watch APK, you must use the
+ <a href="https://developer.android.com/google/play/publishing/multiple-apks.html">Multi-APK delivery method</a>.
+ </p>
+
+ <p>
+ <a href=
+ "https://developer.android.com/training/permissions/requesting.html">Run-time
+ permissions</a> are required.
+ </p>
+
+ <p>
+ Also see
+ <a href="{@docRoot}wear/preview/features/standalone-apps.html">
+ Standalone Apps</a>.
+ </p>
+
+ <h3>
+ Distribution to Wear 2.0 watches
+ </h3>
+
+ <p>
+ If you only want your app to be distributed to Wear 2.0 watches,
+ it is unnecessary to embed the watch APK inside the the phone APK.
+ </p>
+
+ <p>
+ If you want your app to
+ be distributed to Wear 1.0 watches, you need to embed the
+ watch APK inside the phone APK, as described directly below.
+ </p>
+
+ <h3>
+ Distribution to Wear 1.0 and 2.0 watches
+ </h3>
+
+ <p>
+ If you are already distributing your app to Wear 1.0 watches,
+ follow these steps:
+ </p>
+
+ <ol>
+ <li>Provide a Wear 2.0 (standalone) version of your watch APK that can be made
+ available in the Play Store on Wear.
+ </li>
+
+ <li>Continue embedding a Wear 1.0 APK in your phone APK,
+ for use by watches that do not have Wear 2.0.
+ </li>
+ </ol>
+
+ <h3>
+ Specifying a version code
+ </h3>
+
+ <p>
+ To ensure that a standalone APK acts as an upgrade to an embedded Wear APK, the
+ standalone Wear APK's <a href=
+ "https://developer.android.com/google/play/publishing/multiple-apks.html#VersionCodes">
+ version code</a> generally should be higher than the embedded Wear APK's version code.
+ (A phone APK's version code scheme can be independent from that of a watch
+ APK, although they must be unique.) However, the version codes
+ of the standalone APK and the embedded Wear APK can be the same if
+ the APKs are equivalent. If the APKs are not equivalent,
+ but the version code is the same, then when a watch updates from Wear 1.0
+ to 2.0, the watch may get the new APK only after waiting for a
+ longer-than-expected period of time.
+ </p>
+
+ <p>
+ Note that it currently is not possible to create a single APK that works
+ on a phone and watch.
+ </p>
+
+ <h3>
+ Support in the Gradle file
+ </h3>
+
+ <p>
+ If you have a Wear app that is intended for both Wear 1.0 and Wear 2.0,
+ consider using <a href=
+ "https://developer.android.com/studio/build/build-variants.html#product-flavors">
+ product flavors</a>. For example,
+ if you want to target both SDK version 23 and version 24,
+ update your Wear module's <code>build.gradle</code> file to include
+ the following if an existing embedded app has a minimum SDK version of 23:
+ </p>
+
+<pre>
+android {
+ ...
+ defaultConfig
+ {
+ // This is the minSdkVersion of the Wear 1.0 embedded app
+ minSdkVersion 23
+ ...
+ }
+ buildTypes {...}
+ productFlavors {
+ wear1 {
+ // Use the defaultConfig value
+ }
+ wear2 {
+ minSdkVersion 24
+ }
+ }
+</pre>
+
+ <p>
+ Then update your phone module’s <code>build.gradle</code> file, replacing
+ <code>wearApp</code> as follows:
+ </p>
+
+<pre>
+dependencies {
+ ...
+ wearApp project(path: ':wearable', configuration: 'wear1Release')
+}
+</pre>
+
+ <p>
+ A <a href=
+ "https://developer.android.com/studio/build/build-variants.html#product-flavors">
+ build variant</a> is a combination of the product flavor and build type.
+ In Android Studio, select the appropriate build variant when
+ debugging or publishing your app. For example, if <code>wear2</code> is a
+ product flavor, select <strong>wear2Release</strong> as the
+ release build variant.
+ </p>
+
+ <p>
+ For purposes of code that is Wear 2.0-specific or Wear 1.0-specific,
+ consider <a href=
+ "https://developer.android.com/studio/build/build-variants.html#sourcesets">
+ source sets for build variants</a>.
+ </p>
+
+
+ <h2 id="targeting">
+ Setting Up Targeting for a Watch
+ </h2>
+
+ <p>
+ In your Android Manifest file, you must specify the following feature
+ restriction: the <code>uses-feature</code> element is set to
+ <code>android.hardware.type.watch</code>. Do not set
+ the <code>required</code> attribute to <code>false</code>.
+ A single APK for Wear and non-Wear devices presently is not supported.
+ </p>
+
+ <p>
+ Thus, if an APK has the following setting, Google Play provides the APK
+ to watches only:
+ </p>
+
+<pre>
+&lt;manifest package=&quot;com.example.standalone&quot;
+ xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&gt;
+ &lt;uses-feature
+ android:name=&quot;android.hardware.type.watch&quot;
+ ...
+&lt;/manifest&gt;
+</pre>
+
+ <p>
+ The <code>android.hardware.type.watch</code> setting above can be
+ combined with other criteria such as SDK version, screen resolution, and
+ CPU architecture. Thus, different Wear APKs can target different hardware
+ configurations.
+ </p>
+
+ <h2 id="console">
+ Using the Play Developer Console
+ </h2>
+
+ <p>
+ Below is an introduction to <a href=
+ "https://support.google.com/googleplay/android-developer/answer/113469">uploading</a>
+ a standalone Wear APK to an application listing using the Play Developer
+ Console.
+ </p>
+
+ <p>
+ If your app supports both Wear 1.0 and Wear 2.0, continue embedding the
+ Wear 1.0 APK (minimum SDK version of 20, 21, or 22, or 23) in the phone
+ APK and upload the phone APK. In addition, upload your standalone Wear
+ 2.0 APK (which has a minimum SDK version of 24).
+ </p>
+
+ <p>
+ Also see <a href=
+ "https://developer.android.com/google/play/publishing/multiple-apks.html">
+ Multiple APK Support</a> and <a href=
+ "https://developer.android.com/distribute/googleplay/developer-console.html#manage">
+ Manage Your App</a>.
+ Before uploading an APK as described below, the APK
+ must be <a href=
+ "https://developer.android.com/studio/publish/app-signing.html#release-mode">
+ signed</a>.
+ </p>
+
+ <h3 id="uploading-apk">
+ Uploading your APK
+ </h3>
+
+ <p>
+ Go to the <a href="https://play.google.com/apps/publish">Play Developer
+ Console</a>, navigate to your application listing, and select
+ <strong>APK</strong> in the left-navigation panel. An APK screen similar to
+ the following is displayed:
+ </p>
+ <img src="../images/apk-tabs.png" width="" alt="alt_text">
+
+ <p>
+ You may need to use advanced mode for uploads, as follows:
+ </p>
+
+ <ul>
+ <li>Advanced mode is unnecessary if you only have a Wear 2.0 app and no
+ phone app. Instead of advanced mode, use simple mode.</li>
+
+ <li>Use advanced mode if you support Wear 1.0 or have a phone app.</li>
+ </ul>
+
+ <p>
+ Therefore, on the above APK screen, to determine whether to click
+ the <strong>Switch to advanced mode</strong>
+ button, consider the following:
+ </p>
+
+ <ul>
+ <li>If your app does not support Wear 1.0, and only has a watch APK,
+ upload it using simple mode.
+ </li>
+
+ <li>If your app does not support Wear 1.0 and has both a watch APK and a
+ phone APK, click <strong>Switch to advanced mode</strong>
+ to upload the watch and phone APKs.
+ </li>
+ </ul>
+
+ <p>
+ See <a href=
+ "https://developer.android.com/google/play/publishing/multiple-apks.html#SimpleAndAdvanced">
+ Simple mode and advanced mode</a> for more information about toggling
+ between modes.
+ </p>
+
+ <p>
+ Select the appropriate tab (<strong>Production</strong>, <strong>Beta
+ Testing</strong>, or <strong>Alpha Testing</strong>) for your upload.
+ Then click
+ the <strong>Upload New APK</strong> button and select your standalone
+ Wear APK for upload.
+ </p>
+
+ <h3>
+ Reviewing and publishing
+ </h3>
+
+ <p>
+ After you upload your standalone Wear APK and scroll down the resulting
+ page, the APK is shown in the <strong>Current APK</strong> table, with a
+ version number, in a similar way to the following:
+ </p>
+ <img src="../images/current-apk.png" width="" alt="alt_text">
+
+ <p>
+ Finally, in the <strong>Current APK</strong> table above, click the line
+ with the <strong>Version</strong> to review the APK. The <strong>APK
+ Details</strong> panel is displayed. You can verify, for example, that
+ the number in the <strong>Supported Android Devices</strong> line is far
+ fewer than the number would be for a typical phone APK:
+ </p>
+ <img src="../images/apk-details.png" width="" alt="alt_text">
+
+ <p>
+ When you are ready, <a href=
+ "https://support.google.com/googleplay/android-developer/answer/6334282">publish</a>
+ your app.
+ </p>
diff --git a/docs/html/wear/preview/features/bridger.jd b/docs/html/wear/preview/features/bridger.jd
index b7be093ed298..2d879caeccc2 100644
--- a/docs/html/wear/preview/features/bridger.jd
+++ b/docs/html/wear/preview/features/bridger.jd
@@ -6,19 +6,26 @@ page.tags="wear-preview"
<div id="qv-wrapper">
<div id="qv">
- <ol>
+ <ul>
<li>
<a href=
- "#preventing_bridging_with_the_bridging_mode_feature">Preventing
- Bridging with the Bridging Mode Feature</a>
+ "#using-an-entry-in-the-manifest-file">Specifying a Bridging Configuration in the Manifest File</a>
</li>
<li>
<a href=
- "#using_a_dismissal_id_to_sync_notification_dismissals">Using a
- Dismissal ID to Sync Notification Dismissals</a>
+ "#specifying-a-bridging-configuration-at-runtime">Specifying a Bridging Configuration at Runtime</a>
</li>
- </ol>
+ <li>
+ <a href=
+ "#existing-method-of-preventing-bridging">Existing Method of Preventing Bridging</a>
+ </li>
+
+ <li>
+ <a href=
+ "#using_a_dismissal_id_to_sync_notification_dismissals">Using a Dismissal ID to Sync Notification Dismissals</a>
+ </li>
+ </ul>
</div>
</div>
@@ -27,19 +34,20 @@ page.tags="wear-preview"
"{@docRoot}training/wearables/notifications/index.html">are bridged
(shared)</a> from an app on a companion phone to the watch. If you build
a standalone watch app and have a companion phone app, they may duplicate
- notifications. The Android Wear 2.0 Preview includes a Bridging mode
- feature to handle this problem of repeated notifications.
+ notifications. The Android Wear 2.0 Preview includes
+ features to handle this problem of repeated notifications.
</p>
<p>
- With the Android Wear 2.0 Preview, developers can change the
- behavior of notifications with the following:
+ With the Android Wear 2.0 Preview, developers can change the behavior of
+ notifications with one or more of the following:
</p>
<ul>
- <li>Specifying in the standalone app's Android manifest file that
- notifications from the corresponding phone app should not be
- bridged to the watch
+ <li>Specifying a bridging configuration in the manifest file
+ </li>
+
+ <li>Specifying a bridging configuration at runtime
</li>
<li>Setting a dismissal ID so notification dismissals are synced across
@@ -47,43 +55,201 @@ page.tags="wear-preview"
</li>
</ul>
- <h2 id="preventing_bridging_with_the_bridging_mode_feature">
- Preventing Bridging with the Bridging Mode Feature
+ <h2 id="using-an-entry-in-the-manifest-file">
+ Specifying a Bridging Configuration in the Manifest File
</h2>
<p>
- To prevent bridging of notifications from a phone app, you can use an
+ An app's Android manifest file can indicate that notifications from the
+ corresponding phone app should not be bridged to the watch. Specifically,
+ to prevent bridging of notifications from a phone app, you can use a
+ <code>&lt;meta-data&gt;</code>
entry in the manifest file of the watch app (e.g. the standalone watch
app), as follows:
</p>
- <pre>
+<pre>
com.google.android.wearable.notificationBridgeMode
- </pre>
+</pre>
<p>
Setting that entry to <code>NO_BRIDGING</code> will prevent bridging:
</p>
- <pre>
-&lt;meta-data android:name="com.google.android.wearable.notificationBridgeMode"
- android:value="NO_BRIDGING" /&gt;
+<pre>
+&lt;meta-data android:name=&quot;com.google.android.wearable.notificationBridgeMode&quot;
+ android:value=&quot;NO_BRIDGING&quot; /&gt;
</pre>
+
<p>
- The default bridging behavior occurs if you do not include the entry or
+ The default bridging behavior occurs if you do not
+ include the <code>&lt;meta-data&gt;</code> entry or
if you specify a value of <code>BRIDGING</code> instead of
<code>NO_BRIDGING</code>.
</p>
- <h3 id="existing_method_of_preventing_bridging">
- Existing method of preventing bridging
+ <p>
+ For an existing app, if you are using
+ Google Cloud Messaging (GCM) or Firebase Cloud
+ Messaging (FCM) to send notification alerts to devices,
+ you may already have disabled bridging in case a phone is not
+ connected at the time of receiving an alert.
+ In this case, you may still want to dismiss the notification
+ across other devices when it is dismissed in a watch app.
+ </p>
+
+ <p>
+ The bridging configuration that is set in the manifest takes effect as
+ soon as a watch app is installed.
+ </p>
+
+ <h2 id="specifying-a-bridging-configuration-at-runtime">
+ Specifying a Bridging Configuration at Runtime
+ </h2>
+
+ <p>
+ This section describes how to specify a bridging configuration at runtime
+ using the <code>BridgingManager</code> class
+ <code>(android.support.wearable.notifications.BridgingManager)</code>.
+ </p>
+
+ <p>
+ You can set a bridging mode, and optionally set tags for notifications
+ that are exempt from the bridging mode, using a
+ <code>BridgingManager</code> object. Specifically, create a
+ <code>BridgingConfig</code> object and set it as shown in this section,
+ optionally using the <code>setBridgingEnabled</code> method. If you
+ specify a bridging configuration at runtime, then if the
+ <code>setBridgingEnabled</code> method is not set, bridging is enabled by
+ default.
+ </p>
+
+ <p>
+ Specifying a bridging configuration at runtime overrides a
+ bridging-related setting in the Android manifest file.
+ </p>
+
+ <h3 id="disable-bridging-for-all-notifications">
+ Disable bridging for all notifications
+ </h3>
+
+ <p>
+ You can use the <code>setBridgingEnabled</code> method, as follows:
+ </p>
+
+<pre>
+BridgingManager.setConfig(context,
+ new BridgingConfig.Builder(context)
+ .setBridgingEnabled(false)
+ .build());
+</pre>
+ <p>
+ If the above setter is not called, the bridging mode defaults to true.
+ Here is an example of setting tags without using the
+ <code>setBridgingEnabled</code> method, excluding notifications with a
+ tag of <code>foo</code> or <code>bar</code>:
+ </p>
+
+<pre>
+BridgingManager.setConfig(context,
+ new BridgingConfig.Builder(context)
+ .addExcludedTag("foo")
+ .addExcludedTag("bar")
+ .build());
+</pre>
+ <h3 id="exempt-notifications-that-are-tagged">
+ Exempt notifications that are tagged
</h3>
<p>
+ You can disable bridging for all notifications except those with certain
+ tags.
+ </p>
+
+ <p>
+ For example, you can disable bridging, except for notifications tagged as
+ <code>foo</code> or <code>bar,</code> with the following:
+ </p>
+
+<pre>
+BridgingManager.setConfig(context,
+ new BridgingConfig.Builder(context)
+ .setBridgingEnabled(false)
+ .addExcludedTag("foo")
+ .addExcludedTag("bar")
+ .build());
+</pre>
+
+ <p>
+ As another example, you can disable bridging for all notifications except
+ for notifications tagged as <code>foo</code>, <code>bar</code> or
+ <code>baz</code>.
+ </p>
+
+ <pre>
+BridgingManager.setConfig(context,
+ new BridgingConfig.Builder(context)
+ .setBridgingEnabled(false)
+ .addExcludedTags(Arrays.asList("foo", "bar", "baz"))
+ .build());
+</pre>
+ <h3 id="enable-bridging-except-for-notifications-with-certain-tags">
+ Enable bridging except for notifications with certain tags
+ </h3>
+
+ <p>
+ You can enable bridging for all notifications except those with certain
+ tags.
+ </p>
+
+ <p>
+ For example, you can enable bridging for all notifications, except for
+ notifications tagged as <code>foo</code> or <code>bar</code>, with the
+ following:
+ </p>
+
+<pre>
+BridgingManager.setConfig(context,
+ new BridgingConfig.Builder(context)
+ .setBridgingEnabled(true)
+ .addExcludedTag("foo")
+ .addExcludedTag("bar")
+ .build());
+</pre>
+
+ <h3 id="setting-a-bridge-tag">
+ Setting a bridge tag
+ </h3>
+
+ <p>
+ A bridge tag can be set on a notification by calling the
+ <code>setNotificationBridgeTag</code> method as follows:
+ </p>
+
+<pre>
+BridgingManager.setNotificationBridgeTag(&lt;NotificationCompat.Builder&gt;, &lt;String&gt;);
+</pre>
+
+ <p>
+ For example:
+ </p>
+
+<pre>
+NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
+&lt;set other fields&gt;;
+BridgingManager.setNotificationBridgeTag(builder, &quot;foo&quot;);
+Notification notification = builder.build();
+</pre>
+
+ <h2 id="existing-method-of-preventing-bridging">
+ Existing Method of Preventing Bridging
+ </h2>
+
+ <p>
An existing way to prevent bridging is with the
<code>Notification.Builder</code> class; specify <code>true</code> in the
<a href=
- "{@docRoot}reference/android/app/Notification.Builder.html#setLocalOnly(boolean)">
+ "http://developer.android.com/reference/android/app/Notification.Builder.html#setLocalOnly(boolean)">
setLocalOnly</a> method.
</p>
@@ -95,12 +261,6 @@ com.google.android.wearable.notificationBridgeMode
the watch app may not be installed on all of them.
</p>
- <p>
- Thus, if bridging should be prevented when the watch app
- is installed, use the <a href=
- "#preventing_bridging_with_the_bridging_mode_feature">Bridging mode
- feature</a>.
- </p>
<h2 id="using_a_dismissal_id_to_sync_notification_dismissals">
Using a Dismissal ID to Sync Notification Dismissals
@@ -110,7 +270,7 @@ com.google.android.wearable.notificationBridgeMode
If you prevent bridging with the Bridging mode feature, dismissals
(cancellations) of notifications are not synced across a user's devices.
However, the following methods of the <a href=
- "{@docRoot}reference/android/support/v4/app/NotificationCompat.WearableExtender.html">
+ "http://developer.android.com/reference/android/support/v4/app/NotificationCompat.WearableExtender.html">
NotificationCompat.WearableExtender</a> class enable you to use dismissal
IDs:
</p>
@@ -118,7 +278,7 @@ com.google.android.wearable.notificationBridgeMode
<pre>
public WearableExtender setDismissalId(String dismissalId)
public String getDismissalId()
- </pre>
+</pre>
<p>
To enable a dismissal to be synced, use the <code>setDismissalId()</code>
method. For each notification, pass a globally unique ID, as a string,
@@ -135,12 +295,12 @@ public String getDismissalId()
<pre>
NotificationCompat.WearableExtender wearableExtender =
-new NotificationCompat.WearableExtender().setDismissalId(“abc123”);
+new NotificationCompat.WearableExtender().setDismissalId("abc123");
Notification notification = new NotificationCompat.Builder(context)
&lt;set other fields&gt;
.extend(wearableExtender)
.build();
- </pre>
+</pre>
<p>
Dismissal IDs work if a watch is paired to an Android phone, but not if a
watch is paired to an iPhone.
diff --git a/docs/html/wear/preview/features/complications.jd b/docs/html/wear/preview/features/complications.jd
index 3334cb79b143..c8661188eb0a 100644
--- a/docs/html/wear/preview/features/complications.jd
+++ b/docs/html/wear/preview/features/complications.jd
@@ -13,6 +13,13 @@ page.image=/wear/preview/images/complications-main-image.png
Complications to a Watch Face</a>
</li>
<li>
+ <a href="#permissions-for-complication-data">Permissions
+ for Complication Data</a>
+ </li>
+ <li>
+ <a href="#default-providers">Default Providers for Watch Faces</a>
+ </li>
+ <li>
<a href="#exposing_data_to_complications">Exposing Data to
Complications</a>
</li>
@@ -27,12 +34,14 @@ page.image=/wear/preview/images/complications-main-image.png
<a href="#api_additions">API Additions</a>
</li>
</ol>
+
<h2>See Also</h2>
<ol>
<li><a class="external-link"
href="https://github.com/googlesamples/android-WatchFace">Watch
Face sample app with complications</a></li>
</ol>
+
</div>
</div>
@@ -56,9 +65,12 @@ page.image=/wear/preview/images/complications-main-image.png
</p>
<p>
- Along with reviewing this page, download the Android Wear 2.0 Preview
- Reference (see the Complications API <a href=
- "#api_additions">additions</a>) and review the Javadoc for complications.
+ You can review the Javadoc for complications by downloading
+ the Android Wear 2.0 Preview
+ Reference. Also see the <a href="#api_additions">API additions for
+ complications</a> and the
+ <a href="https://developer.android.com/wear/preview/behavior-changes.html">
+ behavior changes</a> for Wear 2.0.
</p>
<p>
@@ -117,8 +129,8 @@ page.image=/wear/preview/images/complications-main-image.png
<code>WatchFaceService.Engine</code> class, with a list of watch face
complication IDs. A watch face creates these IDs to uniquely identify
slots on the watch face where complications can appear, and passes them
- to the <code>createProviderChooserIntent</code> method (of the
- <code>ProviderChooserIntent</code> class) to allow the user to decide
+ to the <code>createProviderChooserIntent</code> method
+ to allow the user to decide
which complication should go in which slot.
</p>
@@ -186,6 +198,406 @@ page.image=/wear/preview/images/complications-main-image.png
where possible.
</p>
+ <h2 id="permissions-for-complication-data">
+ Permissions for Complication Data
+ </h2>
+
+ <p>
+ A watch face must have the following <a href=
+ "https://developer.android.com/training/permissions/requesting.html">permission</a>
+ to receive complication data and open the provider chooser:
+ </p>
+
+<pre>
+com.google.android.wearable.permission.RECEIVE_COMPLICATION_DATA
+</pre>
+
+ <h3 id="opening-the-provider-chooser">
+ Opening the provider chooser
+ </h3>
+
+ <p>
+ A watch face that was not granted the above permission will be unable to
+ start the provider chooser.
+ </p>
+
+ <p>
+ To make it easier to request the permission and start the chooser, the
+ <code>ComplicationHelperActivity</code> class is available in the
+ wearable support library. This class should be used instead of
+ <code>ProviderChooserIntent</code> to start the chooser in almost all
+ cases.
+ </p>
+
+ <h4 id="requesting-the-necessary-permission">
+ Requesting the necessary permission
+ </h4>
+
+ <p>
+ To use <code>ComplicationHelperActivity</code>, add it to the watch face
+ in the <a href=
+ "https://developer.android.com/guide/topics/manifest/manifest-intro.html">
+ manifest file</a>:
+ </p>
+
+<pre>
+&lt;activity android:name=&quot;android.support.wearable.complications.ComplicationHelperActivity&quot;/&gt;
+</pre>
+
+ <p>
+ To start the provider chooser, call the
+ <code>ComplicationHelperActivity.createProviderChooserHelperIntent</code>
+ method, to obtain an intent.
+ </p>
+
+ <p>
+ The new intent can be used with either <code>startActivity</code> or
+ <code>startActivityForResult</code> to launch the chooser.
+ </p>
+
+ <p>
+ Here is an example of using the new intent with
+ <code>startActivityForResult</code>:
+ </p>
+
+ <pre>
+startActivityForResult(
+ ComplicationHelperActivity.createProviderChooserHelperIntent(
+ getActivity(),
+ watchFace,
+ complicationId,
+ ComplicationData.TYPE_LARGE_IMAGE),
+ PROVIDER_CHOOSER_REQUEST_CODE);
+</pre>
+ <p>
+ When the helper activity is started, the helper activity checks if the
+ permission was granted. If the permission was not granted, the helper
+ activity makes a runtime permission request. If the permission request is
+ accepted (or is unneeded), the provider chooser is shown.
+ </p>
+
+ <p>
+ If <code>startActivityForResult</code> was used with the intent, the
+ result delivered back to the calling Activity will have a result code of
+ <code>RESULT_OK</code> if a provider was successfully set, or a result
+ code of <code>RESULT_CANCELLED</code> if no provider was set.
+ </p>
+
+ <p>
+ In the case where a provider was set,
+ <code>ComplicationProviderInfo</code> for the chosen provider will be
+ included in the data intent of the result, as an extra with the key
+ <code>ProviderChooserIntent#EXTRA_PROVIDER_INFO</code>.
+ </p>
+
+ <h3 id="receiving-complication-data">
+ Receiving complication data
+ </h3>
+
+ <p>
+ In general, watch faces need the above permission in order to receive
+ complication data, but there are some exceptions. Specifically, a watch
+ face can only receive data from a provider if one of the following is
+ true:
+ </p>
+
+ <ul>
+ <li>The provider is a "safe" system provider,
+ </li>
+
+ <li>The provider and watch face are from the same app,
+ </li>
+
+ <li>The provider whitelists the watch face as a "safe" watch face, or
+ </li>
+
+ <li>The watch face has the permission
+ </li>
+ </ul>
+
+ <h4 id="lack-of-appropriate-permission">
+ Lack of appropriate permission
+ </h4>
+
+ <p>
+ If none of the above is true, then when <code>ComplicationData</code>
+ normally would be sent by a provider to a watch face, the system instead
+ sends data of the type <code>TYPE_NO_PERMISSION</code>. This type
+ includes an icon (an exclamation mark) and short text ("--") to allow it
+ to be rendered as if it were of the short text type or icon type, for
+ convenience.
+ </p>
+
+ <p>
+ When a watch face receives data of <code>TYPE_NO_PERMISSION</code>, the
+ watch face should render this appropriately, so the user can see that
+ action is needed for the complication to work. If possible, a tap on a
+ complication in this state should launch a permission request. This can
+ be done using
+ <code>ComplicationHelperActivity.createPermissionRequestHelperIntent</code>,
+ if the helper activity was added to the watch face app.
+ </p>
+
+ <p>
+ If a user accepts the permission request created by the helper activity,
+ updates are requested for all the active complications on the watch face
+ automatically, allowing the <code>TYPE_NO_PERMISSION</code> data to be
+ replaced by real data.
+ </p>
+
+ <h4 id="safe-providers">
+ Safe providers
+ </h4>
+
+ <p>
+ Some system providers are considered "safe", because they only supply
+ information that the watch face already could obtain itself.
+ </p>
+
+ <p>
+ These providers are listed in the new <code>SystemProviders</code> class
+ in the wearable support library. Whether a system provider is safe is
+ stated in the Javadoc (in the Android Wear 2.0 Preview Reference). Also
+ see <a href="#system-providers">System providers</a> for a list.
+ </p>
+
+ <h4 id="provider-specified-safe-watch-faces">
+ Provider-specified safe watch faces
+ </h4>
+
+ <p>
+ Providers can specify certain watch faces as "safe" to receive their
+ data. This is intended to be used only when the watch face will attempt
+ to use the provider as a default (see below),
+ and the provider trusts the watch face app.
+ </p>
+
+ <p>
+ To declare watch faces as safe, the provider adds metadata with a key of
+ <code>android.support.wearable.complications.SAFE_WATCH_FACES</code>. The
+ metadata value should be a comma-separated list (whitespace is ignored).
+ Entries in the list can be component names (of
+ <code>WatchFaceServices</code>, given as if
+ <code>ComponentName.flattenToString()</code> had been called), or they
+ can be package names (of apps, in which case every watch face within a
+ specified app is considered safe).
+ </p>
+
+ <p>
+ For example:
+ </p>
+
+<pre>
+&lt;meta-data
+ android:name=&quot;android.support.wearable.complications.SAFE_WATCH_FACES&quot;
+ android:value=&quot;
+ com.app.watchface/com.app.watchface.MyWatchFaceService,
+ com.anotherapp.anotherwatchface/com.something.WatchFaceService,
+ com.something.text
+ &quot;/&gt;
+</pre>
+
+ <h2 id="default-providers">
+ Default Providers for Watch Faces
+ </h2>
+
+ <p>
+ Watch faces can specify default providers that are used until a user
+ selects a provider.
+ </p>
+
+ <h3 id="setting-default-providers">
+ Setting default providers
+ </h3>
+
+ <p>
+ Set default providers using the
+ <code>setDefaultComplicationProvider</code> method in
+ <code>WatchFaceService.Engine</code>. This method may be called at any
+ time, but it does nothing if the user already chose a provider for the
+ given complication.
+ </p>
+
+ <h3 id="safe-providers2">
+ Safe providers
+ </h3>
+
+ <p>
+ For most providers, the <code>RECEIVE_COMPLICATION_DATA</code> permission
+ must be granted to a watch face before data can flow to it. However, some
+ system providers are considered "safe", and do not require the watch face
+ to have the permission for data to be sent (see <a href=
+ "#safe-providers">Safe Providers</a> and <a href=
+ "#system-providers">System providers</a>). These providers may be
+ preferable to use as defaults, as they can supply data immediately.
+ </p>
+
+ <p>
+ Alternatively, if a watch face has a partnership with a certain provider
+ and wishes to use it as a default, it can request that the provider list
+ it as a safe watch face (see <a href=
+ "#provider-specified-safe-watch-faces">Provider-specified safe watch
+ faces</a>).
+ </p>
+
+ <h3 id="system-providers">
+ System providers
+ </h3>
+
+ <p>
+ The system includes providers that can be used as defaults. These are
+ listed in the <code>SystemProviders</code> class in the wearable support
+ library.
+ </p>
+
+ <p>
+ The following table has details about providers that are considered safe:
+ </p>
+
+ <table>
+ <tr>
+ <th>
+ Method name in the SystemProviders class
+ </th>
+ <th>
+ Safety
+ </th>
+ <th>
+ Can be the default
+ </th>
+ <th>
+ Notes
+ </th>
+ </tr>
+
+ <tr>
+ <td>
+ <code>dateProvider()</code>
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ The standard system date provider. Tapping opens the standard Agenda
+ app.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <code>currentTimeProvider()</code>
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ The standard system "time and date" provider. No tap action.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <code>batteryProvider()</code>
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ The standard system battery provider. No tap action.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <code>stepCountProvider()</code>
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ Shows a daily total of steps, as reported by
+ <code>readDailyTotal</code>.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <code>unreadCountProvider()</code>
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ Shows the number of unread notifications in the stream.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <code>worldClockProvider()</code>
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ Will default to London or New York. Can be tapped to change the time
+ zone.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <code>appsProvider()</code>
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ Yes
+ </td>
+ <td>
+ Will show an "apps" icon at first, which can be tapped to choose an
+ app.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <code>nextEventProvider()</code>
+ </td>
+ <td>
+ No
+ </td>
+ <td>
+ Yes (but not a safe provider)
+ </td>
+ <td>
+ The standard system "next event" provider. Tapping opens
+ the standard Agenda app.
+ </p>
+ </td>
+ </tr>
+ </table>
+
+
<h2 id="exposing_data_to_complications">
Exposing Data to Complications
</h2>
@@ -203,6 +615,11 @@ page.image=/wear/preview/images/complications-main-image.png
be used to send data back to the system.
</p>
+ <p class="note"><strong>Note:</strong> When you provide data as a
+ complication data provider, the watch face receives the raw values
+ you send so it can draw them on the watch face.
+ </p>
+
<p>
In your app's manifest, declare the service and add an intent filter for
the following:
@@ -210,7 +627,8 @@ page.image=/wear/preview/images/complications-main-image.png
<pre>
android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST
-</pre>
+ </pre>
+
<p>
The service's manifest entry should also include an
<code>android:icon</code> attribute. The provided icon should be a
@@ -227,6 +645,21 @@ android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST
<a href="#api_additions">API Additions</a>).
</p>
+ <p>
+ Additionally, a permission for provider services ensures that only the Android Wear system
+ can bind to provider services. Only the Android Wear system can have this
+ permission.
+ </p>
+
+ <p>
+ Provider services should add the following to their service declarations
+ in the manifest:
+ </p>
+
+<pre>
+android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER"
+</pre>
+
<h3 id="update_period">
Update period
</h3>
@@ -371,6 +804,11 @@ METADATA_KEY_PROVIDER_CONFIG_ACTION
<p>
The following table describes the types and fields of the
<code>ComplicationData</code> object.
+ If a watch face requests a field that is invalid for a complication type,
+ a default value for the field is returned.
+ For example, if a watch face tries to access a <code>Long text</code>
+ field in a <code>SHORT_TEXT</code> type, the default value for the
+ <code>Long text</code> field is returned.
</p>
<table>
@@ -489,56 +927,80 @@ METADATA_KEY_PROVIDER_CONFIG_ACTION
</table>
<p>
- In addition, the following two types have no fields. These two types may
- be sent for any complication slot and do not need to be included in a
- list of supported types:
+ In addition, the types in the table below are for empty data and
+ may be sent for any complication slot. These types have no fields
+ and do not need to be included in a
+ list of supported types. These types enable watch
+ faces to differentiate among the following three cases:
+ </p>
+
+ <ul>
+ <li>No provider was chosen
+ </li>
+
+ <li>The user has selected "empty" for a slot
+ </li>
+
+ <li>A provider has no data to send
+ </li>
+ </ul>
+
+ <p>
+ Providers should not send <code>TYPE_EMPTY</code> in response to
+ update requests. Providers should send <code>TYPE_NO_DATA</code> instead.
+ </p>
+
+ <p>
+ Details on the complication types for "empty" data are in the
+ following table:
</p>
<table>
<tr>
- <th style="width:175px">
- Type
- </th>
- <th style="width:175px">
- Required fields
+ <th>Complication type
</th>
- <th style="width:175px">
- Optional fields
- </th>
- <th>
- Notes
+ <th>Description
</th>
</tr>
<tr>
<td>
- NOT_CONFIGURED
- </td>
- <td>
- None
- </td>
- <td>
- None
+ <code>TYPE_NOT_CONFIGURED</code>
</td>
<td>
- Sent when a provider has not yet been chosen for a complication.
+ Sent by the system when a complication is activated but the user has
+ not selected a provider, and no default was set.
+ <p>
+ Cannot be sent by providers.
+ </p>
</td>
</tr>
<tr>
<td>
- EMPTY
+ <code>TYPE_EMPTY</code>
</td>
<td>
- None
+ Sent by the system when a complication is activated and the user has
+ chosen "empty" instead of a provider, or when the watch face has
+ chosen no provider, and this type, as the default.
+ <p>
+ Cannot be sent by providers.
+ </p>
</td>
+ </tr>
+
+ <tr>
<td>
- None
+ <code>TYPE_NO_DATA</code>
</td>
<td>
- Sent by a provider when there is no data to display in a
- complication, or sent by the system when nothing should be shown in a
- complication.
+ Sent by the system when a complication (that has a provider) is
+ activated, to clear the complication before actual data is received
+ from the provider.
+ <p>
+ Should be sent by providers if they have no actual data to send.
+ </p>
</td>
</tr>
</table>
@@ -700,8 +1162,8 @@ METADATA_KEY_PROVIDER_CONFIG_ACTION
</h2>
<p>
- The Complications API includes new classes in the Wearable Support
- Library. For more information, download the <a href=
+ The Complications API includes new classes in the wearable support
+ library. For more information, download the <a href=
"{@docRoot}wear/preview/start.html#get_the_preview_reference_documentation">
Android Wear 2.0 Preview Reference</a>.
</p>
@@ -722,14 +1184,26 @@ METADATA_KEY_PROVIDER_CONFIG_ACTION
</li>
<li>
- <code>ComplicationText</code>
+ <code>ComplicationHelperActivity</code>
<ul>
- <li>Used to supply text-based values in a
- <code>ComplicationData</code> object
+ <li>Used to request the following permission: <br>
+<code>com.google.android.wearable.permission.RECEIVE_COMPLICATION_DATA</code>
</li>
- <li>Includes options for time-dependent values, whose text value
- depends on the current time
+ <li>Used instead of <code>ProviderChooserIntent</code>
+ to start the chooser in almost all cases
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <code>ComplicationManager</code>
+ <ul>
+ <li>A wrapper for the complication manager service, for use by
+ providers
+ </li>
+
+ <li>Allows providers to send complication data to the system
</li>
</ul>
</li>
@@ -747,13 +1221,14 @@ METADATA_KEY_PROVIDER_CONFIG_ACTION
</li>
<li>
- <code>ComplicationManager</code>
+ <code>ComplicationText</code>
<ul>
- <li>A wrapper for the complication manager service, for use by
- providers
+ <li>Used to supply text-based values in a
+ <code>ComplicationData</code> object
</li>
- <li>Allows providers to send complication data to the system
+ <li>Includes options for time-dependent values, whose text value
+ depends on the current time
</li>
</ul>
</li>
@@ -761,11 +1236,8 @@ METADATA_KEY_PROVIDER_CONFIG_ACTION
<li>
<code>ProviderChooserIntent</code>
<ul>
- <li>Non-instantiable utility class
- </li>
-
- <li>Includes a method that a watch face can call for starting a
- provider chooser (to allow a user to configure complications)
+ <li>Non-instantiable utility class that is not commonly used; use
+ <code>ComplicationHelperActivity</code> instead
</li>
</ul>
</li>
@@ -789,6 +1261,16 @@ METADATA_KEY_PROVIDER_CONFIG_ACTION
</li>
</ul>
</li>
+
+ <li>
+ <code>SystemProviders</code>
+ <ul>
+ <li>Lists system providers that are considered "safe",
+ because they only supply information that the watch face
+ already could obtain itself
+ </li>
+ </ul>
+ </li>
</ul>
<p>
diff --git a/docs/html/wear/preview/features/notifications.jd b/docs/html/wear/preview/features/notifications.jd
index dcc09709deb3..b546978a8b9c 100644
--- a/docs/html/wear/preview/features/notifications.jd
+++ b/docs/html/wear/preview/features/notifications.jd
@@ -1,6 +1,5 @@
page.title=Notification Changes in Android Wear 2.0
-meta.tags="wear", "wear-preview", "notifications"
-page.tags="wear"
+meta.tags="wear", "wear-preview", "notifications" page.tags="wear"
page.image=/wear/preview/images/expanded_diagram.png
@@ -12,6 +11,7 @@ page.image=/wear/preview/images/expanded_diagram.png
<h2>This document includes</h2>
<ol>
<li><a href="#visual">Visual Updates</a></li>
+ <li><a href="#inline">Inline Action</a></li>
<li><a href="#expanded">Expanded Notifications</a></li>
<li><a href="#messaging">MessagingStyle</a></li>
</ol>
@@ -67,7 +67,8 @@ material design</a> visual changes.
We recommended that you don't set color for bridged notifications.
When Wear apps post local notifications, you can work around this by checking
- <a href="{@docRoot}training/basics/supporting-devices/platforms.html#version-codes">the API level of the device</a> they're running on and using an appropriate color
+ <a href="{@docRoot}training/basics/supporting-devices/platforms.html#version-codes">the API level of the device</a>
+ they're running on and using an appropriate color
for Wear 1.x and a different color for Wear 2.0.
</li>
@@ -77,6 +78,85 @@ material design</a> visual changes.
you must update the text of your notification.
</li>
</ul>
+
+<h2 id="inline">Inline Action</h3>
+
+<img src="{@docRoot}wear/preview/images/inline_action.png" style="float:right;margin:10px 20px 0 0">
+<p>
+ Wear 2.0 now supports inline action, which allows users to take actions on a
+ notification from within the notification stream card. On Wear, the inline
+ action appears as an additional button displayed at the bottom of the notification.
+</p>
+<p>
+ Inline actions are optional but recommended for cases in which users are likely
+ to take an action on a notification after viewing the contents in the
+ notification stream card (without going to the
+ <a href= "{@docRoot}wear/preview/features/notifications.html#expanded">expanded notification</a>).
+ Examples of good use cases for inline action on a notification include: replying to a
+ text message, stopping a fitness activity, and archiving an email message.
+</p>
+
+<p>
+ A notification can provide only one inline action.
+ To display the inline action as an additional button in the notification, set
+ the <a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Action.WearableExtender.html#setHintDisplayActionInline(boolean)">{@code setHintDisplayActionInline()}</a>
+ method to true. When a user taps the inline action, the system invokes
+ the intent that you specified in the notification action.
+</p>
+
+<h3>Adding an inline action</h3>
+<p>
+ The following code example shows how to create a notification with an inline
+ reply action:
+</p>
+
+<ol>
+ <li>Create an instance of
+ <a href="https://developer.android.com/reference/android/support/v4/app/RemoteInput.Builder.html">{@code RemoteInput.Builder}</a></code>
+ that you can add to your notification action. This class's constructor accepts a
+ string that the system uses as the key for the text input. Later, your app
+ uses that key to retrieve the text of the input.
+
+<pre>
+String[] choices = context.getResources().getStringArray(R.array.notification_reply_choices);
+ choices = WearUtil.addEmojisToCannedResponse(choices);
+ RemoteInput remoteInput = new RemoteInput.Builder(Intent.EXTRA_TEXT)
+ .setLabel(context.getString(R.string.notification_prompt_reply))
+ .setChoices(choices)
+ .build();
+</pre>
+
+ </li>
+
+ <li>
+ Use the <a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Action.Builder.html#addRemoteInput(android.support.v4.app.RemoteInput)">{@code addRemoteInput()}</a>
+ method to attach the <ahref="https://developer.android.com/reference/android/support/v4/app/RemoteInput.html">{@code RemoteInput}</a>
+ object to an action.
+
+<pre>
+NotificationCompat.Action.Builder actionBuilder = new NotificationCompat.Action.Builder(
+ R.drawable.ic_full_reply, R.string.notification_reply, replyPendingIntent);
+ actionBuilder.addRemoteInput(remoteInput);
+ actionBuilder.setAllowGeneratedReplies(true);
+</pre>
+ </li>
+
+ <li>
+ Add a hint to display the reply action inline, and use the
+ <a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.WearableExtender.html#addAction(android.support.v4.app.NotificationCompat.Action)">{@code addAction}</a>
+ method to add this action to the notification.
+
+<pre>
+// Android Wear 2.0 requires a hint to display the reply action inline.
+ Action.WearableExtender actionExtender =
+ new Action.WearableExtender()
+ .setHintLaunchesActivity(true)
+ .setHintDisplayActionInline(true);
+ wearableExtender.addAction(actionBuilder.extend(actionExtender).build());
+</pre>
+ </li>
+</ol>
+
<h2 id="expanded">Expanded Notifications</h2>
<p>Android Wear 2.0 introduces <i>expanded notifications</i>, which provide
substantial additional content and actions for each notification.
@@ -152,51 +232,52 @@ action in the notification unless a different action is specified using
</p>
<h2 id="messaging">MessagingStyle</h2>
-<p>If you have a chat messaging app, your notifications should use
-<a href="{@docRoot}preview/features/notification-updates.html#style">{@code Notification.MessagingStyle}</a>,
- which is new in Android N. Wear 2.0 uses the chat messages included
- in a <a href="{@docRoot}preview/features/notification-updates.html#style">{@code MessagingStyle}</a> notification
-
- (see <a href="{@docRoot}preview/features/notification-updates.html#style">{@code addMessage()}</a>) to provide
- a rich chat app-like experience in the expanded notification.
+<p>
+ If you have a chat messaging app, your notifications should use
+ <a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.MessagingStyle.html">{@code NotificationCompat.MessagingStyle}</a>,
+ which is new in Android 7.0. Wear 2.0 uses the chat messages included in a
+ {@code MessagingStyle} notification
+ (see <a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.MessagingStyle.html#addMessage(android.support.v4.app.NotificationCompat.MessagingStyle.Message)">{@code addMessage()}</a>)
+ to provide a rich chat app-like experience in the expanded notification.
</p>
-<p class="note">Note: <a href="{@docRoot}preview/features/notification-updates.html#style">{@code MessagingStyle}</a>
+<p class="note">Note: <a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.MessagingStyle.html">{@code MessagingStyle}</a>
expanded notifications require that you have at least version 1.5.0.2861804 of the
<a href="https://play.google.com/store/apps/details?id=com.google.android.wearable.app">Android Wear app</a>
- on your paired Android phone. That version will be available within the next
- few weeks in the Play Store.
+ on your paired Android phone.
</p>
<h3 id="smart-reply">Smart Reply</h3>
<img src="{@docRoot}wear/preview/images/messaging_style.png" height="420"
style="float:right;margin:10px 20px 0 0" />
-<p>Wear 2.0 also introduces <i>Smart Reply</i>
-for <a href="{@docRoot}preview/features/notification-updates.html#style">{@code MessagingStyle}</a> notifications.
+<p>Wear 2.0 also introduces <i>Smart Reply</i> for
+ <a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.MessagingStyle.html">{@code MessagingStyle}</a> notifications.
Smart Reply provides the user with contextually relevant, touchable choices in
the expanded notification and in {@code RemoteInput}. These augment the fixed
list of choices that the developer provides in
- <a href="http://developer.android.com/reference/android/support/v4/app/RemoteInput.html">{@code RemoteInput}</a>
- using the
- <a href="{@docRoot}reference/android/support/v4/app/RemoteInput.Builder.html#setChoices(java.lang.CharSequence[])">{@code setChoices()}</a> method.
+ <a href="http://developer.android.com/reference/android/support/v4/app/RemoteInput.html">{@code RemoteInput}</a>
+ using the
+ <a href="{@docRoot}reference/android/support/v4/app/RemoteInput.Builder.html#setChoices(java.lang.CharSequence[])">{@code setChoices()}</a> method.
</p>
-<p>By enabling Smart Reply for your MessagingStyle notifications,
- you provide users with a fast (single tap), discreet (no speaking aloud), and
- reliable way to respond to chat messages.
+<p> Smart Reply provides users with a fast (single tap), discreet (no speaking aloud),
+ private (messages received by a user never leave the watch), and reliable (no
+ internet connection needed) way to respond to chat messages.
</p>
-<p>Responses generated by Smart Reply are shown in addition to those set using the
- <a href="{@docRoot}reference/android/support/v4/app/RemoteInput.Builder.html#setChoices(java.lang.CharSequence[])">{@code setChoices()}</a> method.
+<p>
+ Smart Reply responses are generated by an entirely on-watch machine learning
+ model using the context provided by the MessagingStyle notification. No user
+ notification data is sent to Google servers to generate Smart Reply responses.
</p>
+
<p>To enable Smart Reply for your notification action, you need to do the
following:
</p>
<ol>
- <li>Use <a href="{@docRoot}preview/features/notification-updates.html#style">{@code Notification.MessagingStyle}</a>.
+ <li>Use <a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.MessagingStyle.html">{@code NotificationCompat.MessagingStyle}</a>.
</li>
- <li>Call the method {@code setAllowGeneratedReplies()} for the notification action.
- For more information, see the downloadable
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API reference</a>.
+ <li>Call the method <a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Action.Builder.html#setAllowGeneratedReplies(boolean)">{@code setAllowGeneratedReplies(true)}</a>
+ for the notification action.
</li>
<li>Ensure that the notification action has a
<a href="{@docRoot}reference/android/app/RemoteInput.html">{@code RemoteInput}</a>
@@ -236,3 +317,29 @@ Notification noti = new NotificationCompat.Builder()
// 3) add an action with RemoteInput
.extend(new WearableExtender().addAction(action)).build();
</pre>
+
+<h3 id="images">Adding images to a MessagingStyle notification</h3>
+<p>
+ You can add images to a notification message by setting the appropriate MIME
+ type and placing the URI to the image in {@code NotificationCompat.MessagingStyle.Message.}
+ <a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.MessagingStyle.Message.html#setData(java.lang.String, android.net.Uri)">{@code setData()}</a> method.
+</p>
+<p>
+ Here is the code snippet to set data of type image in a notification:
+</p>
+<pre>
+NotificationCompat.MessagingStyle.Message message = new Message("sticker", 1, "Jeff")
+ .setData("image/png", stickerUri);
+
+ NotificationCompat notification = new NotificationCompat.Builder()
+ .setStyle(new NotificationComapt.MessagingStyle("Me")
+ .addMessage(message)
+ .build());
+
+</pre>
+<p>
+ In the above code snippet the variable <code>stickerUri </code>is a Uri that
+ points to a publicly-accessible location, as described <a
+ href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.MessagingStyle.Message.html">here
+ </a>.
+</p> \ No newline at end of file
diff --git a/docs/html/wear/preview/features/standalone-apps.jd b/docs/html/wear/preview/features/standalone-apps.jd
new file mode 100644
index 000000000000..5c1930dedf86
--- /dev/null
+++ b/docs/html/wear/preview/features/standalone-apps.jd
@@ -0,0 +1,499 @@
+page.title=Standalone Apps
+meta.keywords="wear-preview"
+page.tags="wear-preview"
+page.image=images/cards/card-n-sdk_2x.png
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+
+ <ul>
+ <li><a href="#planning_apps">Planning Your Phone and Watch Apps</a></li>
+ <li><a href="#network_access">Network Access and Cloud Messaging</a></li>
+ <li><a href="#background_services">Using Background Services</a></li>
+ <li><a href="#fcm">Cloud Notifications Using FCM</a></li>
+ <li><a href="#fcm-phone">Notifications from a Companion Phone</a></li>
+ </ul>
+
+</div>
+</div>
+
+ <p>
+ In Android Wear 2.0, apps can work independently of a phone. Users can
+ complete more tasks on a watch, without access to an Android or iOS
+ phone.
+ </p>
+
+ <h2 id="planning_apps">
+ Planning Your Phone and Watch Apps
+ </h2>
+
+ <p>
+ A watch APK targeting Wear 2.0 should not be embedded in a phone APK.
+ For more information, see
+ <a href="{@docRoot}wear/preview/features/app-distribution.html">
+ App Distribution</a>.
+ </p>
+
+ <p>
+ Generally, the minimum and target API level for a standalone app, and
+ for Wear 2.0, is level 24. The minimum SDK level can be 23
+ only if you are using the same APK
+ for Wear 1.0 and 2.0 (and thus have an embedded Wear 1.0 APK).
+ </p>
+
+ <p>
+ If you build a standalone Wear 2.0 APK and will continue to have a
+ Wear 1.0 APK, please do both of the following:
+ </p>
+
+ <ul>
+ <li>Provide a standalone version of the Wear APK, and
+ </li>
+
+ <li>Continue embedding a version of the Wear APK in your phone APK
+ </li>
+ </ul>
+
+ <p>
+ <strong>Caution</strong>: For the Wear 2.0 Developer Preview, if you
+ publish an update to your production phone APK that has removed an embedded
+ Wear APK, production users who update the phone APK before installing
+ your standalone Wear APK will lose their existing Wear app and its data.
+ Therefore, it's important that you continue to embed
+ your watch APK into your phone APK.
+ </p>
+
+ <p>
+ <a href=
+ "https://developer.android.com/training/articles/wear-permissions.html">
+ Run-time permissions</a> are required for standalone apps.
+ </p>
+
+ <h3>
+ Shared code and data storage
+ </h3>
+
+ <p>
+ Code can be shared between a Wear app and a phone app. Optionally, code
+ that is specific to a form factor can be in a separate module.
+ </p>
+
+ <p>
+ For example, common code for networking can be in a shared library.
+ </p>
+
+ <p>
+ You can use standard Android storage APIs to store data locally.
+ For example, you can use
+ the <a href=
+ "https://developer.android.com/reference/android/content/SharedPreferences.html">
+ SharedPreferences APIs</a>, SQLite, or internal storage (as you would in
+ the case of a phone).
+ </p>
+
+ <h3>
+ Detecting your phone app or watch app
+ </h3>
+
+ <p>
+ If a user of your watch app needs your phone app, your watch app can
+ detect if the phone app is available. Using the <a href=
+ "https://developers.google.com/android/reference/com/google/android/gms/wearable/CapabilityApi">
+ CapabilityApi</a>, your phone app or watch app can advertise its presence
+ to a paired device. It can do so statically and dynamically. When an app
+ is on a node in a user's Wear network (i.e., on a phone, paired watch, or
+ in the cloud), the <code>CapabilityApi</code> enables another
+ app to detect if it is installed. For more information, see <a href=
+ "https://developer.android.com/training/wearables/data-layer/messages.html#AdvertiseCapabilities">
+ Advertise capabilities</a>.
+ </p>
+
+ <p>
+ If your phone app is unavailable, your can check if the Play Store is
+ available on the phone, as described below, before directing the user to
+ go to the Play Store (to install your phone app).
+ </p>
+
+ <h4>
+ Checking for Play Store availability on a phone
+ </h4>
+
+ <p>
+ iPhones and some Android phones lack the Play Store. A standalone Wear
+ app can check if the paired phone has the Play Store, before directing a
+ user to go there to install your phone app. The
+ <code>PlayStoreAvailability</code> class contains a
+ <code>getPlayStoreAvailabilityOnPhone()</code> method that enables your
+ Wear app to check if a companion phone has the Play Store.
+ </p>
+
+ <p>
+ More information about the <code>PlayStoreAvailability</code> class is
+ available when you <a href=
+ "https://developer.android.com/wear/preview/start.html#get_the_preview_reference_documentation">
+ download the Android Wear 2.0 Preview Reference</a>. Here is a snippet
+ that uses the <code>getPlayStoreAvailabilityOnPhone()</code> method to
+ determine if the paired phone has the Play Store:
+ </p>
+
+<pre>
+int playStoreAvailabilityOnPhone =
+PlayStoreAvailability.getPlayStoreAvailabilityOnPhone(context);
+</pre>
+
+ <p>
+ The value returned by the <code>getPlayStoreAvailabilityOnPhone()</code>
+ method is one of the following:
+ </p>
+
+ <table>
+ <tr>
+ <th>
+ <strong>Return value</strong>
+ </th>
+ <th>
+ <strong>Description</strong>
+ </th>
+ </tr>
+
+ <tr>
+ <td>
+ <code>PLAY_STORE_ON_PHONE_AVAILABLE</code>
+ </td>
+ <td>
+ The Play Store is available on the companion phone.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <code>PLAY_STORE_ON_PHONE_UNAVAILABLE</code>
+ </td>
+ <td>
+ The Play Store is not available on the companion phone.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <code>PLAY_STORE_ON_PHONE_ERROR_UNKNOWN</code>
+ </td>
+ <td>
+ An error occurred in the check for the Play Store; another check
+ should be made later.
+ </td>
+ </tr>
+ </table>
+
+ <h2 id="network_access">
+ Network Access and Cloud Messaging
+ </h2>
+
+ <p>
+ Android Wear apps can make their own network requests. When a watch has a
+ Bluetooth connection to a phone, the watch's network traffic is proxied
+ through the phone. When a phone is unavailable, Wi-Fi and cellular
+ networks are used, depending on the hardware. The Wear platform handles
+ transitions between networks. A watch's network access thus does not
+ require the <a href=
+ "https://developer.android.com/training/wearables/data-layer/index.html">
+ Wearable Data Layer API</a>.
+ </p>
+
+ <p>
+ For sending notifications, apps can directly use Firebase Cloud Messaging
+ (FCM), which replaces Google Cloud Messaging, or continue to use GCM.
+ </p>
+
+ <p>
+ No APIs for network access or FCM are specific to Android Wear.
+ Refer to the existing documentation about <a href=
+ "https://developer.android.com/training/basics/network-ops/connecting.html">
+ connecting to a network</a> and <a href=
+ "https://developers.google.com/cloud-messaging/">cloud messaging</a>.
+ </p>
+
+ <p>
+ You can use protocols such as HTTP, TCP, and UDP. However,
+ the <a href="https://developer.android.com/reference/android/webkit/package-summary.html">
+ android.webkit</a> APIs are not available. Therefore,
+ use of cookies is available by reading and writing headers on
+ requests and responses, but the <a href=
+ "https://developer.androidcom/reference/android/webkit/CookieManager.html">
+ CookieManager</a> class is not available.
+ </p>
+
+ <p>
+ FCM works well with
+ <a href="https://developer.android.com/training/monitoring-device-state/doze-standby.html">
+ Doze</a>.
+ </p>
+
+ <p>
+ Additionally, we recommend using the following:
+ </p>
+
+ <ul>
+ <li>The <a href=
+ "https://developer.android.com/reference/android/app/job/JobScheduler.html">
+ JobScheduler</a> API for asynchronous jobs, including polling at
+ regular intervals (described below)
+ </li>
+
+ <li>Multi-networking APIs if you need to connect to specific network
+ types; see <a href=
+ "https://developer.android.com/about/versions/android-5.0.html#Wireless">
+ Multiple Network Connections</a>
+ </li>
+ </ul>
+
+ <p>
+ For foreground use cases, we currently recommend that you make a
+ request for an unmetered network. Here is an example of using
+ the multi-networking APIs to request an unmetered network:
+ </p>
+
+<pre>
+ConnectivityManager.NetworkCallback networkCallback =
+ new ConnectivityManager.NetworkCallback() {
+ &#64;Override
+ public void onAvailable(Network network) {
+ // access network
+ }
+ };
+ConnectivityManager connectivityManager =
+ (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+
+connectivityManager.requestNetwork(new NetworkRequest.Builder()
+ .addCapability(NET_CAPABILITY_NOT_METERED)
+ .build(), networkCallback);
+</pre>
+
+ <p>
+ We also recommend setting a timer for frontend scenarios
+ to prevent a user from potentially waiting for a long time.
+ When the network is no longer needed, or if the timer fires,
+ the network callback needs to be unregistered:
+ </p>
+
+<pre>
+connectivityManager.unregisterNetworkCallback(networkCallback):
+</pre>
+
+ <p>
+ A Wear app can communicate with a phone app using the <a href=
+ "https://developer.android.com/training/wearables/data-layer/index.html">Wearable
+ Data Layer API</a>, but connecting to a network using that API is
+ discouraged.
+ </p>
+
+ <h3 id="necessary_data">
+ Obtaining only the necessary data
+ </h3>
+
+ <p>
+ When obtaining data from the cloud, get only the necessary data.
+ Otherwise, you may introduce unnecessary latency, memory use, and battery
+ use.
+ </p>
+
+ <p>
+ When a watch is connected over a Bluetooth LE connection, your app may
+ have access to a bandwidth of only 10 kilobytes per second. Therefore,
+ the following steps are recommended:
+ </p>
+
+ <ul>
+ <li>Audit your network requests and responses for extra data that only is
+ for a phone app
+ </li>
+
+ <li>Shrink large images before sending them over a network to a watch
+ </li>
+ </ul>
+
+ <h2 id="background_services">
+ Using Background Services
+ </h2>
+
+ <p>
+ To ensure that background tasks are correctly executed, they must account
+ for <a href=
+ "https://developer.android.com/training/monitoring-device-state/doze-standby.html">
+ Doze</a>. In Android 6.0, Doze and App Standby resulted in significant
+ improvements to battery life by allowing devices to enter deep sleep when
+ idle and stationary.
+ </p>
+
+ <p>
+ Doze is <a href=
+ "https://developer.android.com/preview/behavior-changes.html#doze">enhanced</a>
+ in Android Nougat and Android Wear 2.0. When a screen turns off or enters
+ ambient mode for a long enough time, a subset of Doze can occur and
+ background tasks may be deferred for certain periods. Later, when a
+ device is stationary for an extended time, regular Doze occurs.
+ </p>
+
+ <p>
+ You should schedule jobs with the <a href=
+ "https://developer.android.com/reference/android/app/job/JobScheduler.html">
+ JobScheduler</a> API, which enables your app to register for Doze-safe
+ code execution. When scheduling jobs, you can select constraints such as
+ periodic execution and the need for connectivity or device charging.
+ It is important to configure jobs in a way that does not adversely
+ impact battery life. Jobs should use a
+ <a href="https://developer.android.com/reference/android/app/job/JobInfo.Builder.html">
+ JobInfo.Builder</a> object to provide constraints and metadata, e.g. with
+ one or more of the following methods for a task:
+ </p>
+
+ <ul>
+ <li>To schedule a task that requires networking, use
+ <code>setRequiredNetworkType(int networkType)</code>, specifying
+ <code>NETWORK_TYPE_ANY</code> or <code>NETWORK_TYPE_UNMETERED</code>;
+ note that <code>NETWORK_TYPE_UNMETERED</code> is for large data transfers
+ while <code>NETWORK_TYPE_ANY</code> is for small transfers
+ </li>
+
+ <li>To schedule a task while charging, use
+ <code>setRequiresCharging(boolean requiresCharging)</code>
+ </li>
+
+ <li>For specifying that a device is idle for a task, use
+ <code>setRequiresDeviceIdle(boolean requiresDeviceIdle)</code>; this
+ method can be useful for lower-priority background work or
+ synchronization, especially when used with
+ <code>setRequiresCharging</code>
+ </li>
+ </ul>
+
+ <p>
+ Note that some low-bandwidth networks, such as Bluetooth LE, are
+ considered metered.
+ </p>
+
+ <h3>
+ Scheduling with constraints
+ </h3>
+
+ <p>
+ You can schedule a task that requires constraints. In the example below,
+ a <code>JobScheduler</code> object activates <code>MyJobService</code>
+ when the following constraints are met:
+ </p>
+
+ <ul>
+ <li>Unmetered networking
+ </li>
+
+ <li>Device charging
+ </li>
+ </ul>
+
+ <p>
+ You can use the builder method <code>setExtras</code> to attach a bundle
+ of app-specific metadata to the job request. When your job executes, this
+ bundle is provided to your job service. Note the <code>MY_JOB_ID</code>
+ value passed to the <code>JobInfo.Builder</code> constructor. This
+ <code>MY_JOB_ID</code> value is an app-provided identifier. Subsequent
+ calls to cancel, and subsequent jobs created with that same value, will
+ update the existing job:
+ </p>
+
+<pre>
+JobInfo jobInfo = new JobInfo.Builder(MY_JOB_ID,
+ new ComponentName(this, MyJobService.class))
+ .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
+ .setRequiresCharging(true)
+ .setExtras(extras)
+ .build();
+((JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE))
+ .schedule(jobInfo);
+</pre>
+
+ <p>
+ Below is an implementation of <a href=
+ "https://developer.android.com/reference/android/app/job/JobService.html">
+ JobService</a> to handle the job above. When the job executes, a
+ <code>JobParameters</code> object is passed into the
+ <code>onStartJob</code> method. The <code>JobParameters</code> object
+ enables you to get the job ID value along with any extras bundle provided
+ when scheduling the job. The <code>onStartJob</code> method is called on
+ the main application thread, and therefore any expensive logic should be
+ run from a separate thread. In the example, an <code>AsyncTask</code> is
+ used to run code in the background. When work is complete, you would call
+ the <code>jobFinished</code> method to notify <code>JobScheduler</code>
+ that the task is done:
+ </p>
+
+<pre>
+public class MyJobService extends JobService {
+ &#64;Override public boolean onStartJob(JobParameters params) {
+ new JobAsyncTask().execute(params);
+ return true;
+ }
+
+ private class JobAsyncTask extends AsyncTask
+</pre>
+
+ <h2 id="fcm">
+ Cloud Notifications Using FCM
+ </h2>
+
+ <p>
+ FCM is the recommended way to send notifications to a watch.
+ </p>
+
+ <p>
+ Provide for messages from FCM by collecting a registration token for a
+ device when your Wear app runs. Then include the token as part of the
+ destination when your server sends messages to the FCM REST endpoint. FCM
+ sends messages to the device identified by the token.
+ </p>
+
+ <p>
+ An FCM message is in JSON format and can include one or both of the
+ following payloads:
+ </p>
+
+ <ul>
+ <li>
+ <strong>Notification payload.</strong> When a notification payload is
+ received by a watch, the data is displayed to a user directly in the
+ notification stream. When the user taps the notification, your app is
+ launched.
+ </li>
+
+ <li>
+ <strong>Data payload</strong>. The payload has a set of custom
+ key/value pairs. The payload and is delivered as data to your Wear app.
+ </li>
+ </ul>
+
+ <p>
+ For more information and examples of payloads, see <a href=
+ "https://firebase.google.com/docs/cloud-messaging/concept-options">About
+ FCM Messages</a>.
+ </p>
+
+ <h2 id="fcm-phone">
+ Notifications from a Companion Phone
+ </h2>
+
+ <p>
+ By default, notifications are bridged (shared) from a phone app to a
+ watch. If you have a standalone Wear app and a corresponding phone app,
+ duplicate notifications can occur. For example, the same notification
+ from FCM, received by both a phone and a watch, could be
+ displayed by both devices independently.
+ </p>
+
+ <p>
+ For information about preventing duplicate notifications, see <a href=
+ "https://developer.android.com/wear/preview/features/bridger.html">Bridging
+ Mode for Notifications</a>.
+ </p>
diff --git a/docs/html/wear/preview/features/wearable-recycler-view.jd b/docs/html/wear/preview/features/wearable-recycler-view.jd
new file mode 100644
index 000000000000..f28a4722377e
--- /dev/null
+++ b/docs/html/wear/preview/features/wearable-recycler-view.jd
@@ -0,0 +1,223 @@
+
+page.title=Curved Layout
+meta.tags="wear", "wear-preview", "RecyclerView"
+page.tags="wear"
+
+@jd:body
+
+
+<div id="qv-wrapper">
+<div id="qv">
+
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#creating">Creating a Curved Layout</a></li>
+ <li><a href="#adding">Adding a Circular Scrolling Gesture</a></li>
+ <li><a href="#aligning">Anchoring Children to the Curve</a></li>
+ </ol>
+
+</div>
+</div>
+
+
+<p>
+ Wear 2.0 introduces the {@code WearableRecyclerView} class for displaying
+ and manipulating a vertical list of items optimized for round displays.
+ {@code WearableRecyclerView} extends the existing
+ <a href="{@docRoot}reference/android/support/v7/widget/RecyclerView.html">{@code RecyclerView}</a>
+ class to provide a curved layout and a circular scrolling gesture in wearable apps.
+</p>
+<img src="https://android-dot-devsite.googleplex.com/wear/preview/images/wrv_new.png"
+ style="float:right;margin:10px 20px 0 0">
+
+<p>
+ You can adapt to this interface in your wearable app by creating a new
+ {@code WearableRecyclerView} container.
+</p>
+
+<p>
+ You should decide whether to use a {@code WearableRecyclerView}, based on
+ the kind of user experience you want to provide. We recommend using the
+ {@code WearableRecyclerView} for a simple, long list of items, such as an
+ application launcher, or a list contacts. Each item might have a short string
+ and an associated icon. Alternatively, each item might have only a string or
+ an icon. We do not recommend using a {@code WearableRecyclerView} for short
+ or complex lists.
+</p>
+
+<p>
+ This document describes how to create a curved layout for your scrollable items
+ and properly align them along the curve.
+</p>
+
+
+<h2 id="creating">Creating a Curved Layout</h2>
+<p>To create a curved layout for scrollable items in your wearable app:
+</p>
+<ul>
+ <li>Use {@code WearableRecyclerView} as your main container in the relevant
+ xml layout.
+ </li>
+
+ <li>By default, {@code WearableRecyclerView} uses the {@code
+ DefaultOffsettingHelper} class to offset items in a curved layout on round
+ devices. If you wish to implement your own offsetting logic, you can extend the
+ abstract {@code WearableRecyclerView.OffsettingHelper} class and attach it to
+ the {@code WearableRecyclerView} using {@code
+ WearableRecyclerView.setOffsettingHelper} method.
+
+ <pre>
+ CircularOffsettingHelper circularHelper = new CircularOffsettingHelper();
+ mRecyclerView.setOffsettingHelper(circularHelper);
+ </pre>
+
+ <pre>
+ public class CircularOffsettingHelper extends OffsettingHelper {
+
+ &#64;Override
+ public void updateChild(View child, WearableRecyclerView parent) {
+ int progress = child.getTop() / parent.getHeight();
+ child.setTranslationX(-child.getHeight() * progress);
+ }
+ }
+ </pre>
+
+ </li>
+
+</ul>
+
+<p class="note">
+ <strong>Note:</strong> {@code DefaultOffsettingHelper} class
+ offsets the child items
+ along a predefined UX curve, but the operation can cut off part of the child
+ view if it is not scaled down accordingly. This is because the default curve
+ attempts to fit 5 items on the screen, regardless of their size.
+ If you do not wish to scale your items, you should consider additional padding.
+</p>
+
+<h3>Examples</h3>
+<p>
+ The following code example demonstrates how to add {@code WearableRecyclerView}
+ to a layout:
+</p>
+<pre>
+&lt;android.support.wearable.view.WearableRecyclerView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="&#64;+id/recycler_launcher_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:scrollbars="vertical" /&gt;
+ </pre>
+
+
+<p>
+ To customize the appearance of the children while scrolling (for example,
+ scale the icons and text while the items scroll away from the center), extend
+ the {@code DefaultOffsettingHelper} and override the {@code updateChild }
+ method. It is important to call the {@code super.updateChild(child, parent)} to
+ offset the children along the curve. However, if for any particular child you do
+ not wish them to follow a curve, you can chose not to call the super method for
+ that particular child.
+</p>
+
+<pre>
+
+public class MyOffsettingHelper extends DefaultOffsettingHelper {
+
+ /** How much should we scale the icon at most. */
+ private static final float MAX_ICON_PROGRESS = 0.65f;
+
+ private float mProgressToCenter;
+
+ public OffsettingHelper() {}
+
+ &#64;Override
+
+ public void updateChild(View child, WearableRecyclerView parent) {
+ super.updateChild(child, parent);
+
+
+ // Figure out % progress from top to bottom
+ float centerOffset = ((float) child.getHeight() / 2.0f) / (float) mParentView.getHeight();
+ float yRelativeToCenterOffset = (child.getY() / mParentView.getHeight()) + centerOffset;
+
+ // Normalize for center
+ mProgressToCenter = Math.abs(0.5f - yRelativeToCenterOffset);
+ // Adjust to the maximum scale
+ mProgressToCenter = Math.min(mProgressToCenter, MAX_ICON_PROGRESS);
+
+ child.setScaleX(1 - mProgressToCenter);
+ child.setScaleY(1 - mProgressToCenter);
+ }
+}
+
+
+</pre>
+
+
+<h2 id="adding">Adding a Circular Scrolling Gesture</h2>
+
+<p>
+ By default, circular scrolling is disabled in the {@code
+ WearableRecyclerView}. If you want to enable circular scrolling gesture
+ in your child view, use the {@code WearavleRecyclerView}’s {@code
+ setCircularScrollingGestureEnabled()} method. You can also customize the
+ circular scrolling gesture by defining one or both of the following:
+</p>
+
+<ul>
+ <li>How many degrees the user has to rotate by to scroll through one screen height.
+ This effectively influences the speed of the scolling -
+ {@code setScrollDegreesPerScreen} - the default value is set at 180 degrees.
+ </li>
+
+ <li>
+ The width of a virtual ‘bezel’ near the the edge of the screen in which the
+ gesture will be recognized - {@code setBezelWidth} - the default value is set
+ at 1. This is expressed as a fraction of the radius of the view.
+</ul>
+
+
+<p>The following code snippet shows how to set these methods:</p>
+
+<pre>
+ setCircularScrollingGestureEnabled(true);
+ setBezelWidth(0.5f);
+ setScrollDegreesPerScreen(90);
+</pre>
+
+<h2 id="aligning"> Anchoring Children to the Curve </h2>
+
+<p>
+ To ensure that the layout for WearableRecyclerView is adaptable to different
+ types of child views, the WearableRecyclerView class, by default, chooses the
+ middle left edge (X=0, Y=Half the child height) as the anchor coordinates for
+ the child item. Using the default anchor coordinates can result in offsetting
+ the child items from the left edge of the watch face. To customize the anchor
+ coordinates of your child view along the curve, you can overwrite the
+ {@code adjustAnchorOffsetXY()} method. You can calculate the X (horizontal)
+ and Y (vertical) offset of the child item, and set it using the
+ {@code adjustAnchorOffsetXY()} method to properly align items
+ along the curve. The coordinates should be with relation to the child view.
+</p>
+
+<p><img src="{@docRoot}wear/preview/images/alignment.png"/></p>
+<p><b>Figure 1</b>. Imaginary UX curve and anchor points on the curve.</p>
+
+<p>
+ The code snippet below, calculates the X offset for a child item in which the
+ width of the icon is same as the height of the child item. In this case, the
+ anchor coordinates for the child item are at the center of the icon.
+
+</p>
+<img src="{@docRoot}wear/preview/images/center_align.png" style="float:left;margin:10px 20px 0 0"/>
+
+<pre>
+ &#64;Override
+ protected void adjustAnchorOffsetXY(View child, float[] anchorOffsetXY) {
+ anchorOffsetXY[0] = child.getHeight() / 2.0f;
+ }
+</pre>
+
+
diff --git a/docs/html/wear/preview/images/alignment.png b/docs/html/wear/preview/images/alignment.png
new file mode 100644
index 000000000000..525b3341789a
--- /dev/null
+++ b/docs/html/wear/preview/images/alignment.png
Binary files differ
diff --git a/docs/html/wear/preview/images/apk-details.png b/docs/html/wear/preview/images/apk-details.png
new file mode 100644
index 000000000000..eb3b8591f53f
--- /dev/null
+++ b/docs/html/wear/preview/images/apk-details.png
Binary files differ
diff --git a/docs/html/wear/preview/images/apk-tabs.png b/docs/html/wear/preview/images/apk-tabs.png
new file mode 100644
index 000000000000..949b98f75b7d
--- /dev/null
+++ b/docs/html/wear/preview/images/apk-tabs.png
Binary files differ
diff --git a/docs/html/wear/preview/images/center_align.png b/docs/html/wear/preview/images/center_align.png
new file mode 100644
index 000000000000..ca88ad77bac4
--- /dev/null
+++ b/docs/html/wear/preview/images/center_align.png
Binary files differ
diff --git a/docs/html/wear/preview/images/current-apk.png b/docs/html/wear/preview/images/current-apk.png
new file mode 100644
index 000000000000..2545f925f608
--- /dev/null
+++ b/docs/html/wear/preview/images/current-apk.png
Binary files differ
diff --git a/docs/html/wear/preview/images/inline_action.png b/docs/html/wear/preview/images/inline_action.png
new file mode 100644
index 000000000000..7ecaafeb2544
--- /dev/null
+++ b/docs/html/wear/preview/images/inline_action.png
Binary files differ
diff --git a/docs/html/wear/preview/images/wrv_new.png b/docs/html/wear/preview/images/wrv_new.png
new file mode 100644
index 000000000000..c413c59a77c3
--- /dev/null
+++ b/docs/html/wear/preview/images/wrv_new.png
Binary files differ
diff --git a/docs/html/wear/preview/program.jd b/docs/html/wear/preview/program.jd
index e2bf92f80c6c..4f2fb5cecfb1 100644
--- a/docs/html/wear/preview/program.jd
+++ b/docs/html/wear/preview/program.jd
@@ -143,8 +143,9 @@ page.image=images/cards/card-n-sdk_2x.png
<p>
At milestone 4, you'll have access to the final Android Wear 2.0
APIs and SDK to develop with, as well as near-final system images to test
- system behaviors and features. Android Wear 2.0 will use the Android N
- API level at this time. You can begin final compatibility testing of your
+ system behaviors and features. Android Wear 2.0 will use the
+ Android 7.0 API level at this time.
+ You can begin final compatibility testing of your
legacy apps and refine any new code that is using the Android Wear 2.0
APIs or features.
</p>
diff --git a/docs/html/wear/preview/start.jd b/docs/html/wear/preview/start.jd
index 8fccdc82cd5a..c9720dceb842 100644
--- a/docs/html/wear/preview/start.jd
+++ b/docs/html/wear/preview/start.jd
@@ -29,7 +29,7 @@ page.image=images/cards/card-n-sdk_2x.png
<p>
If you want an environment for basic compatibility
- testing of your app, you can use your current APK and a
+ testing, you can use your current APK and a
supported watch or an emulator. You don't necessarily need to update your
full development environment to do basic testing. To simply test your
app's compatibility with a preview system image, see <a href=
@@ -48,10 +48,8 @@ page.image=images/cards/card-n-sdk_2x.png
</h2>
<p>
- 1. For compatibility with the <a href="{@docRoot}preview/overview.html">N
- Developer Preview</a>, follow the <a href=
- "{@docRoot}preview/setup-sdk.html">setup instructions</a> for installing
- the latest version of Android Studio.
+ 1. For compatibility with Android 7.0, install the latest version of
+ <a href="https://developer.android.com/studio/index.html">Android Studio</a>.
</p>
<p>
@@ -63,7 +61,7 @@ page.image=images/cards/card-n-sdk_2x.png
<ul>
<li>Under the <strong>SDK Platforms tab</strong>:
<ul>
- <li>Android N Preview
+ <li>Android 7.0 (Nougat)
</li>
</ul>
</li>
@@ -107,10 +105,10 @@ page.image=images/cards/card-n-sdk_2x.png
<tr>
<td>
- <a href="http://storage.googleapis.com/androiddevelopers/shareables/wear-preview/wearable-support-preview-2-docs.zip">wearable-support-preview-2-docs.zip</a>
+ <a href="http://storage.googleapis.com/androiddevelopers/shareables/wear-preview/wearable-support-preview-3-docs.zip">wearable-support-preview-3-docs.zip</a>
</td>
- <td>MD5: afb770c9c5c0431bbcbdde186f1eae06<br>
- SHA-1: 81d681e61cee01f222ea82e83297d23c4e55b8f3
+ <td>MD5: 22bae00e473e39e320aae8ea09a001a5<br>
+ SHA-1: 474502cc7092bcf0bd671441b8654aa8d6c155ed
</td>
</tr>
</table>
@@ -163,7 +161,7 @@ page.image=images/cards/card-n-sdk_2x.png
following, which requires that your the Google Repository <a href=
"#install_android_studio_and_the_latest_packages">is the latest
version</a>:
- <code>compile 'com.google.android.support:wearable:2.0.0-alpha2'</code>
+ <code>compile 'com.google.android.support:wearable:2.0.0-alpha3'</code>
</li>
</ul>
</li>
@@ -190,12 +188,12 @@ page.image=images/cards/card-n-sdk_2x.png
</li>
<li>Optionally, select the <strong>Phone and Tablet</strong> option. If
- you plan to use N Preview APIs in a phone app, then the Minimum SDK
- option list, select <strong>API N: Android 6.x (N Preview)</strong>.
+ you plan to use Android 7.0 APIs in a phone app, then the Minimum SDK
+ option list, select <strong>API 24: Android 7.0 (Nougat)</strong>.
</li>
<li>Select the <strong>Wear</strong> option, and in the Minimum SDK
- option list, select the latest available (<strong>N Preview</strong>)
+ option list, select the latest available (<strong>API Nougat</strong>)
option. Click <strong>Next</strong> until you exit the Create New Project
wizard.
</li>
@@ -215,7 +213,7 @@ page.image=images/cards/card-n-sdk_2x.png
following, which requires that your the Google Repository <a href=
"#install_android_studio_and_the_latest_packages">is the latest
version</a>:
- <code>compile 'com.google.android.support:wearable:2.0.0-alpha2'</code>
+ <code>compile 'com.google.android.support:wearable:2.0.0-alpha3'</code>
</li>
</ul>
</li>
diff --git a/docs/html/wear/preview/support.jd b/docs/html/wear/preview/support.jd
index 78b4e4b854ac..7636d863aa8c 100644
--- a/docs/html/wear/preview/support.jd
+++ b/docs/html/wear/preview/support.jd
@@ -23,7 +23,9 @@ page.tags="preview", "developer preview"
<ul>
<li><a href="#general">General Advisories</a></li>
+ <li><a href="#platform-version">Platform API Version</a></li>
<li><a href="#deprecations">Deprecations</a></li>
+ <li><a href="#dp3">Developer Preview 3</a></li>
<li><a href="#dp2">Developer Preview 2</a></li>
<li><a href="#dp1">Developer Preview 1</a></li>
</ul>
@@ -46,10 +48,25 @@ page.tags="preview", "developer preview"
panics and crashes.
</li>
<li>Some apps <strong>may not function as expected</strong> on the new
- platform version. This includes Google’s apps and other apps.
+ platform version. This includes Google's apps and other apps.
</li>
</ul>
+<h2 id="platform-version">
+ Platform API Version
+</h2>
+
+<p>
+ The Android Platform API version is incremented to 24 to match Android 7.0.
+ You can update the following in your Android Wear 2.0 Preview project
+ to <strong>24</strong>:
+</p>
+
+<ul>
+ <li><code>compileSdkVersion</code></li>
+ <li><code>targetSdkVersion</code></li>
+</ul>
+
<h2 id="deprecations">Deprecations</h2>
<p>The following fields are deprecated in the preview:</p>
@@ -64,6 +81,275 @@ page.tags="preview", "developer preview"
</li>
</ul>
+<h2 id="dp3">Developer Preview 3</h2>
+
+<div class="wrap">
+ <div class="cols">
+ <div class="col-6of12">
+ <p><em>Date: September 2016<br />
+ Builds: Wearable Support 2.0.0-alpha3, NVE68J<br/>
+ Emulator support: x86 & ARM (32-bit)<br/>
+ </em></p>
+ </div>
+ </div>
+</div>
+
+<h3 id="new-in-fdp3">
+ New in Preview 3
+</h3>
+
+ <p>
+ For access to system images and the companion app for Preview 3, see
+ <a href="https://developer.android.com/wear/preview/downloads.html">
+ Download and Test with a Device</a>.
+ </p>
+
+ <h4>
+ Additions for standalone apps and the Play Store on Wear
+ </h4>
+
+ <p>
+ For information about planning your Wear 2.0 app, see <a href=
+ "https://developer.android.com/wear/preview/features/standalone-apps.html">
+ Standalone Apps</a>.
+ </p>
+
+ <p>
+ Generally, the minimum and target SDK level for Wear 2.0, and for a
+ standalone APK, is level 24. The minimum SDK level can be 23
+ only if you are using the same APK
+ for Wear 1.0 and 2.0 (and thus have an embedded Wear 1.0 APK).
+ </p>
+
+ <p>
+ Run-time permissions are required.
+ </p>
+
+ <p>
+ For information about distributing your Wear 2.0 app, see <a href=
+ "https://developer.android.com/wear/preview/features/app-distribution.html">
+ App Distribution</a>.
+ </p>
+
+ <h4 id="additions-to-the-complications-api">
+ Complications API additions
+ </h4>
+
+ <p>
+ For Preview 3, additions and changes have been made to the Complications
+ API. The <a href=
+ "https://developer.android.com/wear/preview/features/complications.html">documentation</a>
+ includes information about the following additions and changes:
+ </p>
+
+ <ul>
+ <li>To receive complication data and open the provider chooser, a watch
+ face must have the <code>RECEIVE_COMPLICATION_DATA</code> permission.
+ </li>
+
+ <li>To ease a request for the new permission and the starting of the
+ chooser, the <code>ComplicationHelperActivity</code> class is available
+ in the wearable support library. This class should be used instead of
+ <code>ProviderChooserIntent</code> to start the chooser in almost all
+ cases.
+ </li>
+
+ <li>Watch faces can specify default providers that are used until a user
+ selects a provider.
+ </li>
+
+ <li>The complication types used for "empty" data are changed.
+ </li>
+
+ <li>A new permission was added to ensure that only the Android Wear
+ system can bind to provider services.
+ </li>
+ </ul>
+
+ <p>
+ For changes related to the <code>ComplicationData</code> object, see
+ <a href=
+ "https://developer.android.com/wear/preview/behavior-changes.html">Behavior
+ Changes</a>.
+ </p>
+
+ <h4 id="wearable-recycler-view-api">
+ Curved Layout
+ </h4>
+
+ <p>
+ For information about creating a curved layout using
+ the <code>WearableRecyclerView</code> API in your Wear 2.0 app, see
+ <a href="https://developer.android.com/wear/preview/features/wearable-recycler-view.html">
+ Curved Layout</a>.
+ </p>
+
+ <h4 id="notifications-features-fdp3">
+ Notifications features
+ </h4>
+
+ <p>
+ To learn about adding an inline action to a notification,
+ see <a href="https://developer.android.com/wear/preview/notifications.html#inline">Inline
+ Action</a>.
+ </p>
+
+ <p>
+ To learn about adding images to a notification, see
+ <a href=
+ "https://developer.android.com/wear/preview/notifications.html#images">Adding
+ images to a notification</a>.
+ </p>
+
+ <p>
+ For additions related to the bridging of notifications from a companion
+ app to a watch, see <a href=
+ "https://developer.android.com/wear/preview/features/bridger.html">Bridging
+ Mode for Notifications</a>.
+ </p>
+
+ <h4 id="additions-for-smart-reply">
+ Smart Reply additions
+ </h4>
+
+ <p>
+ Smart Reply responses are generated by an entirely on-watch,
+ machine-learning model using the context provided by <a href=
+ "https://developer.android.com/wear/preview/features/notifications.html#messaging">
+ MessagingStyle</a> notifications. Use the <a href=
+ "https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Action.Builder.html#setAllowGeneratedReplies(boolean)">
+ setAllowGeneratedReplies(boolean)</a> method to enable Smart Reply for
+ your <code>MessagingStyle</code> notification.
+ </p>
+
+ <h3 id="known-issues-3">
+ Known Issues
+ </h3>
+
+ <h4 id="notifications">
+ Notifications
+ </h4>
+
+ <ul>
+ <li>The <code>MessagingStyle</code> <a href=
+ "https://developer.android.com/wear/preview/features/notifications.html#images">
+ notifications with images</a> posted by standalone apps don't show
+ images in the notification (i.e., bridged notifications show images,
+ but standalone notifications don't).
+ </li>
+
+ <li>This preview release does not include support for notification
+ groups.
+ </li>
+
+ <li>With Wear 2.0, a watch can receive notifications directly from
+ Firebase Cloud Messaging (FCM), which replaces Google Cloud Messaging
+ (GCM). However, in Preview 3 of Wear 2.0, FCM does not function with
+ iOS-paired watches.
+ </li>
+
+ <li>Smart Reply responses are only shown in <code>RemoteInput</code> when
+ <code>RemoteInput</code> is called from a <code>MessagingStyle</code>
+ expanded notification. Smart Reply responses are not shown in
+ <code>RemoteInput</code> when <code>RemoteInput</code> is called from an
+ <a href=
+ "https://developer.android.com/wear/preview/features/notifications.html#inline">
+ inline action</a> within the stream&#8212;an action set with the <a href=
+ "https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Action.WearableExtender.html#setHintDisplayActionInline(boolean)">
+ setHintDisplayActionInline(true)</a> method.
+ </li>
+ </ul>
+
+ <h4 id="companion-app">
+ Companion app
+ </h4>
+
+ <ul>
+ <li>The preview companion app is not compatible with Android 4.3
+ (Jelly Bean MR2), which has an SDK build version code of:
+ <code>JELLY_BEAN_MR2</code></li>
+ </ul>
+
+ <ul>
+ <li>In permission screens in the preview companion app:
+ If you deny a permission, you cannot
+ proceed. Instead of denying a permission, tap <strong>Skip</strong>.
+ </li>
+ </ul>
+
+
+ <h4 id="developer-console">
+ Developer Console
+ </h4>
+
+ <ul>
+ <li>If you set a minimum SDK version of 24, the Play Developer Console
+ states that there are few supported devices.
+ </li>
+ </ul>
+
+ <h4 id="system-user-interface">
+ System user interface and apps
+ </h4>
+
+ <ul>
+ <li>Dismissing multiple notifications can cause an app to forcibly close.
+ </li>
+
+ <li>The "Ok Google" detection and voice transcription may not work
+ reliably.
+ </li>
+
+ <li>Google Fit is not available with Preview 3.
+ </li>
+
+ <li>Syncing for embedded apps is not enabled for the preview. Therefore,
+ to test an app on a device, add it to the Play Store or side-load it
+ onto a watch. Some existing Wear apps, e.g. Google Maps, are only
+ using the embedded apps mechanism currently, and are therefore not
+ installable on the preview (and therefore do not appear on the watch).
+ </li>
+
+ <li>In Play Store search results on the watch,
+ results other than apps sometimes appear.
+ </li>
+
+ <li>Media controls/notifications are not bridged
+ to the watch from an Android KitKat phone.
+ </li>
+ </ul>
+
+ <h4 id="devices">
+ Devices
+ </h4>
+
+ <ul>
+ <li>In Android Wear emulators, the Play Store app requires that an
+ account is synced to the device before the app can be opened.
+ </li>
+
+ <li>On the Huawei Watch, selecting the language, followed by multiple
+ acknowledgement dialogues, results in a black screen.
+ </li>
+
+ <li>On the LG Watch Urbane 2nd Edition, when answering a call from the
+ watch, the watch does not provide audio from the caller.
+ </li>
+ </ul>
+
+ <h4 id="smart-reply">
+ Smart Reply
+ </h4>
+
+ <ul>
+ <li>Smart Reply is only available if your watch's system language is
+ English.
+ </li>
+
+ <li>Smart Reply responses are not generated for all messages.
+ </li>
+ </ul>
+
<h2 id="dp2">Developer Preview 2</h2>
<div class="wrap">
@@ -78,24 +364,9 @@ page.tags="preview", "developer preview"
</div>
<h3 id="new-in-fdp2">
- <strong>New in Preview 2</strong>
+ New in Preview 2
</h3>
-<h4 id="platform-version-24">
- Platform API Version
-</h4>
-
-<p>
- The Android Platform API version is incremented to 24 to match Android Nougat.
- You can update the following in your Android Wear 2.0 Preview project
- to <strong>24</strong>:
-</p>
-
-<ul>
- <li><code>compileSdkVersion</code></li>
- <li><code>targetSdkVersion</code></li>
-</ul>
-
<h4 id="wearable-drawers">
Wearable drawers
</h4>
@@ -174,7 +445,7 @@ page.tags="preview", "developer preview"
</p>
<h3 id="known-issues-2">
- <strong>Known Issues</strong>
+ Known Issues
</h3>
<h4 id="notifications-2">
@@ -239,6 +510,10 @@ page.tags="preview", "developer preview"
<li>Unable to turn off the Wi-Fi on a wearable.
</li>
+
+ <li>After music is played on a companion phone,
+ music card notifications are not mirrored to the watch.
+ </li>
</ul>
<h4 id="companion-app-2">
diff --git a/include/androidfw/AssetManager.h b/include/androidfw/AssetManager.h
index 914ac3d52421..0b2280239260 100644
--- a/include/androidfw/AssetManager.h
+++ b/include/androidfw/AssetManager.h
@@ -72,6 +72,13 @@ public:
static const char* RESOURCES_FILENAME;
static const char* IDMAP_BIN;
static const char* OVERLAY_DIR;
+ /*
+ * If OVERLAY_SUBDIR_PROPERTY is set, search for runtime resource overlay
+ * APKs in OVERLAY_SUBDIR/<value of OVERLAY_SUBDIR_PROPERTY>/ rather than in
+ * OVERLAY_DIR.
+ */
+ static const char* OVERLAY_SUBDIR;
+ static const char* OVERLAY_SUBDIR_PROPERTY;
static const char* TARGET_PACKAGE_NAME;
static const char* TARGET_APK_PATH;
static const char* IDMAP_DIR;
diff --git a/libs/androidfw/AssetManager.cpp b/libs/androidfw/AssetManager.cpp
index f50cff4387d2..6fb57fafe5c0 100644
--- a/libs/androidfw/AssetManager.cpp
+++ b/libs/androidfw/AssetManager.cpp
@@ -78,6 +78,8 @@ const char* AssetManager::IDMAP_BIN = "/system/bin/idmap";
const char* AssetManager::OVERLAY_DIR = "/vendor/overlay";
const char* AssetManager::TARGET_PACKAGE_NAME = "android";
const char* AssetManager::TARGET_APK_PATH = "/system/framework/framework-res.apk";
+const char* AssetManager::OVERLAY_SUBDIR = "/system/vendor/overlay-subdir";
+const char* AssetManager::OVERLAY_SUBDIR_PROPERTY = "ro.boot.vendor.overlay.subdir";
const char* AssetManager::IDMAP_DIR = "/data/resource-cache";
namespace {
diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
index 46e7fe0b3053..1922773c9cb8 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
@@ -612,13 +612,23 @@ public abstract class BaseActivity extends Activity
return;
}
- if (popDir()) {
+ if (!mState.hasLocationChanged()) {
+ super.onBackPressed();
+ return;
+ }
+
+ if (onBeforePopDir() || popDir()) {
return;
}
super.onBackPressed();
}
+ boolean onBeforePopDir() {
+ // Files app overrides this with some fancy logic.
+ return false;
+ }
+
public void onStackPicked(DocumentStack stack) {
try {
// Update the restored stack to ensure we have freshest data
diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
index 3b1ca77b680a..7186339dbfa6 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
@@ -60,6 +60,12 @@ public class FilesActivity extends BaseActivity {
public static final String TAG = "FilesActivity";
+ // See comments where this const is referenced for details.
+ private static final int DRAWER_NO_FIDDLE_DELAY = 1500;
+
+ // Track the time we opened the drawer in response to back being pressed.
+ // We use the time gap to figure out whether to close app or reopen the drawer.
+ private long mDrawerLastFiddled;
private DocumentClipper mClipper;
public FilesActivity() {
@@ -389,6 +395,34 @@ public class FilesActivity extends BaseActivity {
}
}
+ // Do some "do what a I want" drawer fiddling, but don't
+ // do it if user already hit back recently and we recently
+ // did some fiddling.
+ @Override
+ boolean onBeforePopDir() {
+ int size = mState.stack.size();
+
+ if (mDrawer.isPresent()
+ && (System.currentTimeMillis() - mDrawerLastFiddled) > DRAWER_NO_FIDDLE_DELAY) {
+ // Close drawer if it is open.
+ if (mDrawer.isOpen()) {
+ mDrawer.setOpen(false);
+ mDrawerLastFiddled = System.currentTimeMillis();
+ return true;
+ }
+
+ // Open the Close drawer if it is closed and we're at the top of a root.
+ if (size <= 1) {
+ mDrawer.setOpen(true);
+ // Remember so we don't just close it again if back is pressed again.
+ mDrawerLastFiddled = System.currentTimeMillis();
+ return true;
+ }
+ }
+
+ return false;
+ }
+
// Turns out only DocumentsActivity was ever calling saveStackBlocking.
// There may be a case where we want to contribute entries from
// Behavior here in FilesActivity, but it isn't yet obvious.
diff --git a/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java b/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java
index b3db037697f3..d2e9885edf14 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java
@@ -22,7 +22,6 @@ import android.annotation.IntDef;
import android.annotation.Nullable;
import android.content.Context;
import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
import android.os.UserHandle;
import android.preference.PreferenceManager;
@@ -86,15 +85,6 @@ public class LocalPreferences {
public @interface PermissionStatus {}
/**
- * Clears all preferences associated with a given package.
- *
- * <p>Typically called when a package is removed or when user asked to clear its data.
- */
- static void clearPackagePreferences(Context context, String packageName) {
- clearScopedAccessPreferences(context, packageName);
- }
-
- /**
* Methods below are used to keep track of denied user requests on scoped directory access so
* the dialog is not offered when user checked the 'Do not ask again' box
*
@@ -118,23 +108,6 @@ public class LocalPreferences {
getPrefs(context).edit().putInt(key, status).apply();
}
- private static void clearScopedAccessPreferences(Context context, String packageName) {
- final String keySubstring = "|" + packageName + "|";
- final SharedPreferences prefs = getPrefs(context);
- Editor editor = null;
- for (final String key : prefs.getAll().keySet()) {
- if (key.contains(keySubstring)) {
- if (editor == null) {
- editor = prefs.edit();
- }
- editor.remove(key);
- }
- }
- if (editor != null) {
- editor.apply();
- }
- }
-
private static String getScopedAccessDenialsKey(String packageName, String uuid,
String directory) {
final int userId = UserHandle.myUserId();
diff --git a/packages/DocumentsUI/src/com/android/documentsui/PackageReceiver.java b/packages/DocumentsUI/src/com/android/documentsui/PackageReceiver.java
index fd1183fda13d..aef63afcbcd7 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/PackageReceiver.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/PackageReceiver.java
@@ -23,7 +23,7 @@ import android.content.Intent;
import android.net.Uri;
/**
- * Cleans up {@link RecentsProvider} and {@link LocalPreferences} when packages are removed.
+ * Clean up {@link RecentsProvider} when packages are removed.
*/
public class PackageReceiver extends BroadcastReceiver {
@Override
@@ -31,19 +31,15 @@ public class PackageReceiver extends BroadcastReceiver {
final ContentResolver resolver = context.getContentResolver();
final String action = intent.getAction();
- final Uri data = intent.getData();
- final String packageName = data == null ? null : data.getSchemeSpecificPart();
-
if (Intent.ACTION_PACKAGE_FULLY_REMOVED.equals(action)) {
resolver.call(RecentsProvider.buildRecent(), RecentsProvider.METHOD_PURGE, null, null);
- if (packageName != null) {
- LocalPreferences.clearPackagePreferences(context, packageName);
- }
+
} else if (Intent.ACTION_PACKAGE_DATA_CLEARED.equals(action)) {
- if (packageName != null) {
+ final Uri data = intent.getData();
+ if (data != null) {
+ final String packageName = data.getSchemeSpecificPart();
resolver.call(RecentsProvider.buildRecent(), RecentsProvider.METHOD_PURGE_PACKAGE,
packageName, null);
- LocalPreferences.clearPackagePreferences(context, packageName);
}
}
}
diff --git a/packages/PrintSpooler/res/values-zh-rCN/strings.xml b/packages/PrintSpooler/res/values-zh-rCN/strings.xml
index d4e796339bc9..3debf8e60cdb 100644
--- a/packages/PrintSpooler/res/values-zh-rCN/strings.xml
+++ b/packages/PrintSpooler/res/values-zh-rCN/strings.xml
@@ -60,7 +60,7 @@
<item quantity="one">找到 <xliff:g id="COUNT_0">%1$s</xliff:g> 台打印机</item>
</plurals>
<string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
- <string name="printer_info_desc" msgid="7181988788991581654">"此打印机的详细信息"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"关于此打印机的更多信息"</string>
<string name="could_not_create_file" msgid="3425025039427448443">"无法创建文件"</string>
<string name="print_services_disabled_toast" msgid="9089060734685174685">"部分打印服务已停用"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"正在搜索打印机"</string>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 81af9415531b..c16e08a7c428 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi-verbinding het misluk"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Stawingsprobleem"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Nie binne ontvangs nie"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Geen internettoegang bespeur nie, sal nie outomaties herkoppel nie."</string>
<string name="saved_network" msgid="4352716707126620811">"Gestoor deur <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Gekoppel via Wi-Fi-assistent"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Gekoppel via %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Grootste"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Gepasmaak (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Hulp en terugvoer"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Kieslys"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 792c4349e442..6e9dcd7fc193 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"የWiFi ግንኙነት መሰናከል"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"የማረጋገጫ ችግር"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"በክልል ውስጥ የለም"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"ምንም የበይነ መረብ መዳረሻ ተፈልጎ አልተገኘም፣ በራስ-ሰር እንደገና እንዲገናኝ አይደረግም።"</string>
<string name="saved_network" msgid="4352716707126620811">"የተቀመጠው በ<xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"በWi‑Fi ረዳት አማካኝነት ተገናኝቷል"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"በ%1$s በኩል መገናኘት"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"በጣም ተለቅ ያለ"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ብጁ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"እገዛ እና ግብረመልስ"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"ምናሌ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index db9afeebeefd..ee579dc30b00 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"‏أخفق اتصال WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"حدثت مشكلة في المصادقة"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"ليست في النطاق"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"لم يتم اكتشاف اتصال بالإنترنت."</string>
<string name="saved_network" msgid="4352716707126620811">"تم الحفظ بواسطة <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"‏تم التوصيل عبر مساعد Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"‏تم الاتصال عبر %1$s"</string>
@@ -332,7 +329,7 @@
<string name="home" msgid="3256884684164448244">"الشاشة الرئيسية للإعدادات"</string>
<string-array name="battery_labels">
<item msgid="8494684293649631252">"٠‏٪"</item>
- <item msgid="8934126114226089439">"٥٠٪"</item>
+ <item msgid="8934126114226089439">"٪۵۰"</item>
<item msgid="1286113608943010849">"٪۱۰۰"</item>
</string-array>
<string name="charge_length_format" msgid="8978516217024434156">"قبل <xliff:g id="ID_1">%1$s</xliff:g>"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"أكبر مستوى"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"مخصص (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"المساعدة والتعليقات"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"القائمة"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-az-rAZ/strings.xml b/packages/SettingsLib/res/values-az-rAZ/strings.xml
index 130cd7534924..60d0169be4b0 100644
--- a/packages/SettingsLib/res/values-az-rAZ/strings.xml
+++ b/packages/SettingsLib/res/values-az-rAZ/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi Bağlantı Uğursuzluğu"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentifikasiya problemi"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Diapazonda deyil"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"İnternet bağlantısı tapılmadı, avtomatik olaraq yenidən qoşulmayacaq."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> tərəfindən saxlandı"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi köməkçisi vasitəsilə qoşulub"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s vasitəsilə qoşuludur"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Ən böyük"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Fərdi (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Yardım və rəy"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menyu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 5d7e852bf882..060a5fb15be3 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi veza je otkazala"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem sa potvrdom autentičnosti"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Nije u opsegu"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Pristup internetu nije otkriven, automatsko povezivanje nije moguće."</string>
<string name="saved_network" msgid="4352716707126620811">"Sačuvao/la je <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Povezano preko Wi‑Fi pomoćnika"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Veza je uspostavljena preko pristupne tačke %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Najveći"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Prilagođeni (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Pomoć i povratne informacije"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Meni"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-be-rBY/strings.xml b/packages/SettingsLib/res/values-be-rBY/strings.xml
index a8428f26c5e3..03de8bab32c1 100644
--- a/packages/SettingsLib/res/values-be-rBY/strings.xml
+++ b/packages/SettingsLib/res/values-be-rBY/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Збой падлучэння Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Праблема аўтэнтыфікацыі"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Не ў зоне дасягальнасці"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Доступ да інтэрнэту не выяўлены, аўтаматычнае перападлучэнне не адбудзецца."</string>
<string name="saved_network" msgid="4352716707126620811">"Хто захаваў: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Падлучана праз памочніка Wi‑Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Падлучана праз %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Найвялікшы"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Карыстальніцкі (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Даведка і водгукі"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index b356766cb68f..f6596dc48add 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Неуспешна връзка с Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблем при удостоверяването"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Извън обхват"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Не е открит достъп до интернет. Няма да се свърже отново автоматично."</string>
<string name="saved_network" msgid="4352716707126620811">"Запазено от <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Установена е връзка чрез помощника за Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Установена е връзка през „%1$s“"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Най-голямо"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Персонализирано (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Помощ и отзиви"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-bn-rBD/strings.xml b/packages/SettingsLib/res/values-bn-rBD/strings.xml
index 40895629e6ad..4a11198be5f9 100644
--- a/packages/SettingsLib/res/values-bn-rBD/strings.xml
+++ b/packages/SettingsLib/res/values-bn-rBD/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi সংযোগের ব্যর্থতা"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"প্রমাণীকরণ সমস্যা"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"পরিসরের মধ্যে নয়"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"কোনো ইন্টারনেট অ্যাক্সেস শনাক্ত হয়নি, স্বয়ংক্রিয়ভাবে পুনরায় সংযোগ স্থাপন করবে না৷"</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> দ্বারা সংরক্ষিত"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"ওয়াই-ফাই সহায়ক-এর মাধ্যমে সংযুক্ত হয়েছে"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s মাধ্যমে সংযুক্ত হয়েছে"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"বৃহত্তম"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"কাস্টম (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"সহায়তা ও মতামত"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"মেনু"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-bs-rBA/strings.xml b/packages/SettingsLib/res/values-bs-rBA/strings.xml
index 5115bbd41592..a11bf3212836 100644
--- a/packages/SettingsLib/res/values-bs-rBA/strings.xml
+++ b/packages/SettingsLib/res/values-bs-rBA/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Greška pri povezivanju na Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem pri provjeri vjerodostojnosti."</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Nije u dometu"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Pristup internetu nije pronađen. Neće se ponovo povezivati automatski."</string>
<string name="saved_network" msgid="4352716707126620811">"Sačuvao <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Povezani preko Wi-Fi pomoćnika"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Povezani preko %1$s"</string>
@@ -149,9 +146,9 @@
<string name="vpn_settings_not_available" msgid="956841430176985598">"VPN postavke nisu dostupne za ovog korisnika"</string>
<string name="tethering_settings_not_available" msgid="6765770438438291012">"Postavke za privezivanje nisu dostupne za ovog korisnika"</string>
<string name="apn_settings_not_available" msgid="7873729032165324000">"Postavke za naziv pristupne tačke nisu dostupne za ovog korisnika"</string>
- <string name="enable_adb" msgid="7982306934419797485">"Otklanjanje grešaka putem uređaja spojenog na USB"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB otklanjanje grešaka"</string>
<string name="enable_adb_summary" msgid="4881186971746056635">"Način rada za uklanjanje grešaka kada je povezan USB"</string>
- <string name="clear_adb_keys" msgid="4038889221503122743">"Ukini odobrenja otklanjanja grešaka putem uređaja spojenog na USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Ukini odobrenja otklanjanja grešaka USB-om"</string>
<string name="bugreport_in_power" msgid="7923901846375587241">"Prečica za izvještaj o greškama"</string>
<string name="bugreport_in_power_summary" msgid="1778455732762984579">"Prikaži tipku za prijavu grešaka u izborniku za potrošnju energije"</string>
<string name="keep_screen_on" msgid="1146389631208760344">"Ostani aktivan"</string>
@@ -188,9 +185,9 @@
<string name="allow_mock_location_summary" msgid="317615105156345626">"Dozvoli lažne lokacije"</string>
<string name="debug_view_attributes" msgid="6485448367803310384">"Omogući pregled atributa prikaza"</string>
<string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Uvijek drži mobilne podatke aktivnim, čak i kada je Wi-Fi je aktivan (za brzo prebacivanje između mreža)."</string>
- <string name="adb_warning_title" msgid="6234463310896563253">"Omogućiti otklanjanje grešaka putem uređaja spojenog na USB?"</string>
- <string name="adb_warning_message" msgid="7316799925425402244">"Otklanjanje grešaka putem uređaja spojenog na USB je namijenjeno samo u svrhe razvoja aplikacija. Koristite ga za kopiranje podataka između računara i uređaja, instaliranje aplikacija na uređaj bez obavještenja te čitanje podataka iz zapisnika."</string>
- <string name="adb_keys_warning_message" msgid="5659849457135841625">"Opozvati pristup otklanjanju grešaka putem uređaja spojenog na USB za sve računare koje ste prethodno ovlastili?"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Omogućiti USB otklanjanje grešaka?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB otklanjanje grešaka je namijenjeno samo u svrhe razvoja aplikacija. Koristite ga za kopiranje podataka između računara i uređaja, instaliranje aplikacija na uređaj bez obavještenja te čitanje podataka iz zapisnika."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Opozvati pristup otklanjanju grešaka USB-om za sve računare koje ste prethodno ovlastili?"</string>
<string name="dev_settings_warning_title" msgid="7244607768088540165">"Dopustiti postavke za razvoj?"</string>
<string name="dev_settings_warning_message" msgid="2298337781139097964">"Ove postavke su namijenjene samo za svrhe razvoja. Mogu izazvati pogrešno ponašanje uređaja i aplikacija na njemu."</string>
<string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifikuj aplikacije putem USB-a"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Najveće"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Prilagodi (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Pomoć i povratne informacije"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Meni"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index abc9390c7184..fb7180a0a3b8 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Error de connexió Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema d\'autenticació"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Fora de l\'abast"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"No s\'ha detectat accés a Internet, no s\'hi tornarà a connectar automàticament."</string>
<string name="saved_network" msgid="4352716707126620811">"Desat per <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Connectat mitjançant l\'assistent de Wi‑Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connectada mitjançant %1$s"</string>
@@ -114,7 +111,7 @@
<string name="tts_play_example_summary" msgid="8029071615047894486">"Reprodueix una breu demostració de síntesi de veu"</string>
<string name="tts_install_data_title" msgid="4264378440508149986">"Instal·la dades de veu"</string>
<string name="tts_install_data_summary" msgid="5742135732511822589">"Instal·la les dades de veu necessàries per a la síntesi de veu"</string>
- <string name="tts_engine_security_warning" msgid="8786238102020223650">"Pot ser que aquest motor de síntesi de la parla pugui recopilar tot el text que es dirà en veu alta, incloses les dades personals, com ara les contrasenyes i els números de les targetes de crèdit. Ve del motor <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>. Vols activar l\'ús d\'aquest motor de síntesi de la parla?"</string>
+ <string name="tts_engine_security_warning" msgid="8786238102020223650">"Pot ser que aquest motor de síntesi de la parla pugui recopilar tot el text que es dirà en veu alta, incloses les dades personals, com ara les contrasenyes i els números de les targetes de crèdit. Ve del motor <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>. Voleu activar l\'ús d\'aquest motor de síntesi de la parla?"</string>
<string name="tts_engine_network_required" msgid="1190837151485314743">"Aquest idioma requereix una connexió de xarxa activa per a la sortida de síntesi de veu."</string>
<string name="tts_default_sample_string" msgid="4040835213373086322">"Això és un exemple de síntesi de veu"</string>
<string name="tts_status_title" msgid="7268566550242584413">"Estat de l\'idioma predeterminat"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Màxim"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalitzat (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Ajuda i suggeriments"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menú"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index edc53ed5be37..361ba1f0cef2 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Selhání připojení Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problém s ověřením"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Mimo dosah"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Nebyl zjištěn žádný přístup k internetu, připojení nebude automaticky obnoveno."</string>
<string name="saved_network" msgid="4352716707126620811">"Uloženo uživatelem <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Připojeno pomocí asistenta připojení Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Připojeno prostřednictvím %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Největší"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Vlastní (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Nápověda a zpětná vazba"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Nabídka"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 571490174e62..98f41fc8945d 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi-forbindelsesfejl"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem med godkendelse"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Ikke inden for rækkevidde"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Der blev ikke fundet nogen internetadgang. Forbindelsen bliver ikke automatisk genoprettet."</string>
<string name="saved_network" msgid="4352716707126620811">"Gemt af <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Forbindelse via Wi-Fi-assistent"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Tilsluttet via %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Størst"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Tilpasset (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Hjælp og feedback"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 406523e7986d..c9da6c96c0ff 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WLAN-Verbindungsfehler"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentifizierungsproblem"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Nicht in Reichweite"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Keine Internetverbindung erkannt, es kann nicht automatisch eine Verbindung hergestellt werden."</string>
<string name="saved_network" msgid="4352716707126620811">"Gespeichert von <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Über WLAN-Assistenten verbunden"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Über %1$s verbunden"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Am größten"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Benutzerdefiniert (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Hilfe &amp; Feedback"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menü"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 117b9fed65c9..05e4e64c383f 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Αποτυχία σύνδεσης Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Πρόβλημα ελέγχου ταυτότητας"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Εκτός εμβέλειας"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Δεν εντοπίστηκε καμία πρόσβαση στο διαδίκτυο, δεν θα γίνει αυτόματη επανασύνδεση."</string>
<string name="saved_network" msgid="4352716707126620811">"Αποθηκεύτηκε από <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Σύνδεση μέσω βοηθού Wi‑Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Συνδέθηκε μέσω %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Μεγαλύτερα"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Προσαρμοσμένη (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Βοήθεια και σχόλια"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Μενού"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index 35ec15b6d564..799802b86b3a 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi Connection Failure"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentication problem"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Not in range"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"No Internet Access Detected, won\'t automatically reconnect."</string>
<string name="saved_network" msgid="4352716707126620811">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Connected via Wi‑Fi assistant"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Largest"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Help &amp; feedback"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index 35ec15b6d564..799802b86b3a 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi Connection Failure"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentication problem"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Not in range"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"No Internet Access Detected, won\'t automatically reconnect."</string>
<string name="saved_network" msgid="4352716707126620811">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Connected via Wi‑Fi assistant"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Largest"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Help &amp; feedback"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index 35ec15b6d564..799802b86b3a 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi Connection Failure"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentication problem"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Not in range"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"No Internet Access Detected, won\'t automatically reconnect."</string>
<string name="saved_network" msgid="4352716707126620811">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Connected via Wi‑Fi assistant"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Largest"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Help &amp; feedback"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 2874e61fbb4f..08e739a00f50 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Error de conexión Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticación"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Fuera de alcance"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"No se detectó el acceso a Internet. No se volverá a conectar de forma automática."</string>
<string name="saved_network" msgid="4352716707126620811">"Guardadas por <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Conexión por asistente de Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Conexión a través de %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Máximo"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizado (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Ayuda y comentarios"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menú"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 7d0097a9e9f3..3d2f6c132da0 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Error de conexión Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Error de autenticación"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Fuera de rango"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"No se ha detectado acceso a Internet, no se volverá a conectar automáticamente."</string>
<string name="saved_network" msgid="4352716707126620811">"Guardadas por <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Conectado a través de asistente Wi‑Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string>
@@ -176,7 +173,7 @@
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar el nivel de logging de Wi-Fi, mostrar por SSID RSSI en el selector Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Si está habilitada, la conexión Wi‑Fi será más agresiva al transferir la conexión de datos al móvil (si la señal Wi‑Fi no es estable)"</string>
<string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Permitir/No permitir búsquedas de Wi-Fi basadas en la cantidad de tráfico de datos presente en la interfaz"</string>
- <string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños de búfer de registrador"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños del búfer de Logger"</string>
<string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Elige el tamaño del Logger por búfer"</string>
<string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"¿Borrar almacenamiento continuo del registrador?"</string>
<string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Cuando ya no supervisamos la actividad con el registrador de forma continua, estamos obligados a borrar los datos del registrador almacenados en el dispositivo."</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Lo más grande posible"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizado (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Ayuda y sugerencias"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menú"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-et-rEE/strings.xml b/packages/SettingsLib/res/values-et-rEE/strings.xml
index 97fe73f192a3..a7b0f64f9a4d 100644
--- a/packages/SettingsLib/res/values-et-rEE/strings.xml
+++ b/packages/SettingsLib/res/values-et-rEE/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi-ühenduse viga"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentimise probleem"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Pole vahemikus"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Interneti-ühendust ei tuvastatud, seadet ei ühendata automaatselt."</string>
<string name="saved_network" msgid="4352716707126620811">"Salvestas: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Ühendatud WiFi-abi kaudu"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Ühendatud üksuse %1$s kaudu"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Suurim"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Kohandatud (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Abi ja tagasiside"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menüü"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-eu-rES/strings.xml b/packages/SettingsLib/res/values-eu-rES/strings.xml
index 9234f24600b2..f476511b8106 100644
--- a/packages/SettingsLib/res/values-eu-rES/strings.xml
+++ b/packages/SettingsLib/res/values-eu-rES/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Ezin izan da konektatu Wi-Fi sarera"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentifikazio-arazoa"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Urrunegi"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Ez da hauteman Interneterako sarbiderik. Ez da automatikoki berriro konektatuko."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> aplikazioak gorde du"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi laguntzailearen bidez konektatuta"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s bidez konektatuta"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Handiena"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Pertsonalizatua (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Laguntza eta iritziak"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menua"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index bb2e16662555..44918513bcd7 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"‏اتصال Wi-Fi برقرار نشد"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"مشکل احراز هویت"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"در محدوده نیست"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"دسترسی به اینترنت شناسایی نشد، به صورت خودکار وصل نمی‌شود."</string>
<string name="saved_network" msgid="4352716707126620811">"ذخیره‌شده توسط <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"‏متصل شده از طریق دستیار Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"‏متصل از طریق %1$s"</string>
@@ -186,7 +183,7 @@
<string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"‏انتخاب پیکربندی USB"</string>
<string name="allow_mock_location" msgid="2787962564578664888">"مکان‌های کاذب مجاز هستند"</string>
<string name="allow_mock_location_summary" msgid="317615105156345626">"مکان‌های کاذب مجاز هستند"</string>
- <string name="debug_view_attributes" msgid="6485448367803310384">"فعال کردن نمایش بازبینی ویژگی"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"فعال کردن بازبینی ویژگی بازدید"</string>
<string name="mobile_data_always_on_summary" msgid="8149773901431697910">"‏داده سلولی همیشه فعال نگه داشته می‌شود، حتی وقتی Wi-Fi فعال است (برای جابه‌جایی سریع شبکه)."</string>
<string name="adb_warning_title" msgid="6234463310896563253">"‏اشکال‌زدایی USB انجام شود؟"</string>
<string name="adb_warning_message" msgid="7316799925425402244">"‏اشکال‌زدایی USB فقط برای اهداف برنامه‌نویسی در نظر گرفته شده است. از آن برای رونوشت‌برداری داده بین رایانه و دستگاهتان، نصب برنامه‌ها در دستگاهتان بدون اعلان و خواندن داده‌های گزارش استفاده کنید."</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"بزرگ‌ترین"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"سفارشی (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"راهنما و بازخورد"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"منو"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index c04c97045786..cdef968d90aa 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi-yhteysvirhe"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Todennusvirhe"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Ei kantoalueella"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Internetyhteyttä ei havaittu, yhteyttä ei muodosteta automaattisesti uudelleen."</string>
<string name="saved_network" msgid="4352716707126620811">"Tallentaja: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Yhteys muodostettu Wi‑Fi-apurin kautta"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Yhdistetty seuraavan kautta: %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Suurin"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Muokattu (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Ohje ja palaute"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Valikko"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index 1b3490426403..958b8fd4d5d3 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Échec de connexion Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problème d\'authentification"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Hors de portée"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Aucun accès à Internet détecté, reconnexion automatique impossible"</string>
<string name="saved_network" msgid="4352716707126620811">"Enregistrés par <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Connecté à l\'aide de l\'assistant Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté par %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"La plus grande"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personnalisée (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Aide et commentaires"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 07398f3d87c1..cf08f3b5f237 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Échec de la connexion Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problème d\'authentification."</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Hors de portée"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Aucun accès à Internet détecté, reconnexion automatique impossible"</string>
<string name="saved_network" msgid="4352716707126620811">"Enregistré par <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Connecté via l\'assistant Wi‑Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté via %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Le plus grand"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personnalisé (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Aide et commentaires"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-gl-rES/strings.xml b/packages/SettingsLib/res/values-gl-rES/strings.xml
index 5207a731b8d9..cdc4581ca80c 100644
--- a/packages/SettingsLib/res/values-gl-rES/strings.xml
+++ b/packages/SettingsLib/res/values-gl-rES/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Erro na conexión wifi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticación"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Non está dentro da zona de cobertura"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Non se detectou acceso a Internet e non se volverá conectar automaticamente."</string>
<string name="saved_network" msgid="4352716707126620811">"Redes gardadas por <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Conectado ao asistente de wifi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"O máis grande"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizado (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Axuda e suxestións"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menú"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-gu-rIN/strings.xml b/packages/SettingsLib/res/values-gu-rIN/strings.xml
index 3d0a02bf9ae7..1b40e01737d1 100644
--- a/packages/SettingsLib/res/values-gu-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-gu-rIN/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi કનેક્શન નિષ્ફળ"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"પ્રમાણીકરણ સમસ્યા"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"રેન્જમાં નથી"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"કોઈ ઇન્ટરનેટ અ‍ૅક્સેસ શોધાયું નથી, આપમેળે ફરીથી કનેક્ટ કરશે નહીં."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> દ્વારા સચવાયું"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi-Fi સહાયક દ્વારા કનેક્ટ થયું"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s દ્વારા કનેક્ટ થયેલ"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"સૌથી મોટું"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"કસ્ટમ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"સહાય અને પ્રતિસાદ"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"મેનુ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index 329a67082904..8dfbb4a58780 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"वाईफ़ाई कनेक्‍शन विफलता"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"प्रमाणीकरण समस्या"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"रेंज में नहीं"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"किसी इंटरनेट कनेक्‍शन का पता नहीं चला, अपने आप पुन: कनेक्‍ट नहीं हो सकता."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> के द्वारा सहेजा गया"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"वाई-फ़ाई सहायक के द्वारा कनेक्‍ट है"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s के द्वारा उपलब्ध"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"सबसे बड़ा"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"कस्टम (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"सहायता और फ़ीडबैक"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"मेनू"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 89b06530cd8c..07e492581d41 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Povezivanje s Wi-Fi-jem nije uspjelo"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem u autentifikaciji"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Nije u rasponu"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Pristup internetu nije otkriven. Nema automatskog ponovnog povezivanja."</string>
<string name="saved_network" msgid="4352716707126620811">"Spremljeno: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Povezani putem pomoćnika za Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Povezano putem %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Najveće"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Prilagođeno (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Pomoć i povratne informacije"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Izbornik"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index c33943a3c3fb..0d8ec26eb668 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi-kapcsolati hiba"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Azonosítási probléma"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Hatókörön kívül"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Nincs érzékelhető internet-hozzáférés, ezért nem kapcsolódik újra automatikusan."</string>
<string name="saved_network" msgid="4352716707126620811">"Mentette: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Csatlakozva Wi‑Fi-segéddel"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Csatlakozva a következőn keresztül: %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Legnagyobb"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Egyéni (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Súgó és visszajelzés"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menü"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-hy-rAM/strings.xml b/packages/SettingsLib/res/values-hy-rAM/strings.xml
index 32b0dd6e6c94..cb12fbfaf502 100644
--- a/packages/SettingsLib/res/values-hy-rAM/strings.xml
+++ b/packages/SettingsLib/res/values-hy-rAM/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi կապի ձախողում"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Նույնականացման խնդիր"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Ընդգրկույթից դուրս է"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Ինտերնետի հասանելիություն չկա. ավտոմատ կերպով կրկին չի միանա:"</string>
<string name="saved_network" msgid="4352716707126620811">"Պահել է հետևյալ օգտվողը՝ <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Կապակցված է Wi‑Fi Օգնականի միջոցով"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Կապակցված է %1$s-ի միջոցով"</string>
@@ -41,7 +38,7 @@
<string name="bluetooth_disconnecting" msgid="8913264760027764974">"Անջատվում է..."</string>
<string name="bluetooth_connecting" msgid="8555009514614320497">"Միանում է..."</string>
<string name="bluetooth_connected" msgid="6038755206916626419">"Միացված է"</string>
- <string name="bluetooth_pairing" msgid="1426882272690346242">"Զուգակցում..."</string>
+ <string name="bluetooth_pairing" msgid="1426882272690346242">"Զուգավորում..."</string>
<string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"Միացված (առանց հեռախոսի)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="4576188601581440337">"Միացված է (առանց մեդիա)"</string>
<string name="bluetooth_connected_no_map" msgid="6504436917057479986">"Միացված է (հաղորդագրությանը մուտք չկա)"</string>
@@ -75,7 +72,7 @@
<string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Զուգավորել"</string>
<string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"Զուգավորել"</string>
<string name="bluetooth_pairing_decline" msgid="4185420413578948140">"Չեղարկել"</string>
- <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Զուգակցում է մուտքի թույլտվությունը դեպի ձեր կոնտակտները և զանգերի պատմությունը, երբ միացված է:"</string>
+ <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Զուգավորում է մուտքի թույլտվությունը դեպի ձեր կոնտակտները և զանգերի պատմությունը, երբ միացված է:"</string>
<string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"Չհաջողվեց զուգավորել <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ի հետ:"</string>
<string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Հնարավոր չեղավ զուգավորվել <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ի հետ սխալ PIN-ի կամ անցաբառի պատճառով:."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Հնարավոր չէ կապ հաստատել <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ի հետ:"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Ամենամեծ"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Հատուկ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Օգնություն և հետադարձ կապ"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Ընտրացանկ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 33df1fe141be..ffdb60745571 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Kegagalan Sambungan Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Masalah autentikasi"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Tidak dalam jangkauan"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Akses Internet Tidak Terdeteksi, tidak akan menyambung ulang secara otomatis."</string>
<string name="saved_network" msgid="4352716707126620811">"Disimpan oleh <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Terhubung melalui Asisten Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Terhubung melalui %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Terbesar"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"(<xliff:g id="DENSITYDPI">%d</xliff:g>) khusus"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Bantuan &amp; masukan"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-is-rIS/strings.xml b/packages/SettingsLib/res/values-is-rIS/strings.xml
index 8cc408f0c4e3..25e13a4d69d8 100644
--- a/packages/SettingsLib/res/values-is-rIS/strings.xml
+++ b/packages/SettingsLib/res/values-is-rIS/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi-tengingarvilla"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Vandamál við auðkenningu"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Ekkert samband"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Enginn netaðgangur fannst; endurtengist ekki sjálfkrafa."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> vistaði"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Tengt í gegnum Wi-Fi aðstoð"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Tengt í gegnum %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Stærst"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Sérsniðið (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Hjálp og ábendingar"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Valmynd"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index 0bb26e199d2f..2907fabef70e 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Errore connessione Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema di autenticazione"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Fuori portata"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Nessun accesso a Internet rilevato, non verrà eseguita la riconnessione automatica."</string>
<string name="saved_network" msgid="4352716707126620811">"Salvata da <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Connesso tramite assistente Wi‑Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Collegato tramite %1$s"</string>
@@ -194,7 +191,7 @@
<string name="dev_settings_warning_title" msgid="7244607768088540165">"Consentire impostazioni di sviluppo?"</string>
<string name="dev_settings_warning_message" msgid="2298337781139097964">"Queste impostazioni sono utilizzabili solo a scopo di sviluppo. Possono causare l\'arresto o il comportamento anomalo del dispositivo e delle applicazioni su di esso."</string>
<string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifica app tramite USB"</string>
- <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Controlla che le app installate tramite ADB/ADT non abbiano un comportamento dannoso."</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Controlla che le applicazioni installate tramite ADB/ADT non abbiano un comportamento dannoso."</string>
<string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Consente di disattivare la funzione del volume assoluto Bluetooth in caso di problemi con il volume dei dispositivi remoti, ad esempio un volume troppo alto o la mancanza di controllo."</string>
<string name="enable_terminal_title" msgid="95572094356054120">"Terminale locale"</string>
<string name="enable_terminal_summary" msgid="67667852659359206">"Abilita l\'app Terminale che offre l\'accesso alla shell locale"</string>
@@ -331,9 +328,9 @@
<string name="disabled_by_admin" msgid="3669999613095206948">"Disattivata dall\'amministratore"</string>
<string name="home" msgid="3256884684164448244">"Home page Impostazioni"</string>
<string-array name="battery_labels">
- <item msgid="8494684293649631252">"0%"</item>
- <item msgid="8934126114226089439">"50%"</item>
- <item msgid="1286113608943010849">"100%"</item>
+ <item msgid="8494684293649631252">"0%%"</item>
+ <item msgid="8934126114226089439">"50%%"</item>
+ <item msgid="1286113608943010849">"100%%"</item>
</string-array>
<string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> fa"</string>
<string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> rimanenti"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Massimo"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizzato (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Guida e feedback"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index 75109114168d..7c16e4276347 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"‏כשל בחיבור Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"בעיית אימות"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"מחוץ לטווח"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"אין גישה לאינטרנט. לא יתבצע חיבור מחדש באופן אוטומטי."</string>
<string name="saved_network" msgid="4352716707126620811">"נשמר על ידי <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"‏מחובר באמצעות אסיסטנט ה-Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"‏מחובר דרך %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"הכי גדול"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"מותאם אישית (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"עזרה ומשוב"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"תפריט"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index f657c1e21687..25f4152a22fa 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -28,8 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi接続エラー"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"認証に問題"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"圏外"</string>
- <string name="wifi_no_internet_no_reconnect" msgid="2211781637653149657">"インターネット アクセスを検出できないため、自動的に再接続されません。"</string>
- <string name="wifi_no_internet" msgid="5011955173375805204">"インターネットに接続していません。"</string>
+ <string name="wifi_no_internet" msgid="9151470775868728896">"インターネットアクセスを検出できないため、自動的に再接続されません。"</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g>で保存"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fiアシスタント経由で接続"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s経由で接続"</string>
@@ -344,5 +343,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"最大"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"カスタム(<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"ヘルプとフィードバック"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"メニュー"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ka-rGE/strings.xml b/packages/SettingsLib/res/values-ka-rGE/strings.xml
index f349c4f9657b..ffe194a0bc29 100644
--- a/packages/SettingsLib/res/values-ka-rGE/strings.xml
+++ b/packages/SettingsLib/res/values-ka-rGE/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi კავშირის შეფერხება"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ავთენტიკაციის პრობლემა"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"არ არის დიაპაზონში"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"ინტერნეტთან წვდომის ამოცნობა ვერ მოხერხდა. ავტომატურად ხელახლა დაკავშირება არ განხორციელდება."</string>
<string name="saved_network" msgid="4352716707126620811">"შენახული <xliff:g id="NAME">%1$s</xliff:g>-ის მიერ"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"დაკავშირებულია Wi-Fi თანაშემწით"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-ით დაკავშირებული"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"უდიდესი"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"მორგებული (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"დახმარება და გამოხმაურება"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"მენიუ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-kk-rKZ/strings.xml b/packages/SettingsLib/res/values-kk-rKZ/strings.xml
index 1141fcacb794..3dcc7eb50ced 100644
--- a/packages/SettingsLib/res/values-kk-rKZ/strings.xml
+++ b/packages/SettingsLib/res/values-kk-rKZ/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi байланысының қатесі"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Растау мәселесі"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Аумақта жоқ"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Интернетке қатынас анықталмады, автоматты түрде қайта қосылу орындалмайды."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> сақтаған"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi көмекшісі арқылы қосылу орындалды"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s арқылы қосылған"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Ең үлкен"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Арнаулы (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Анықтама және пікір"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Mәзір"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-km-rKH/strings.xml b/packages/SettingsLib/res/values-km-rKH/strings.xml
index 7d1c7979b1e3..aa0ce2498737 100644
--- a/packages/SettingsLib/res/values-km-rKH/strings.xml
+++ b/packages/SettingsLib/res/values-km-rKH/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"ការ​ភ្ជាប់​ WiFi បរាជ័យ"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"បញ្ហា​ក្នុង​ការ​ផ្ទៀងផ្ទាត់"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"នៅ​ក្រៅ​តំបន់"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"រក​មិន​ឃើញ​ការ​ចូល​ដំណើរការ​អ៊ីនធឺណិត, នឹង​មិន​ភ្ជាប់​ឡើង​វិញ​ដោយ​ស្វ័យ​ប្រវត្តិ​ទេ។"</string>
<string name="saved_network" msgid="4352716707126620811">"បានរក្សាទុកដោយ <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"បានភ្ជាប់តាមរយៈជំនួយការ Wi‑Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"បានភ្ជាប់តាមរយៈ %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ធំបំផុត"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ផ្ទាល់ខ្លួន (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"ជំនួយ និងមតិស្ថាបនា"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"ម៉ឺនុយ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-kn-rIN/strings.xml b/packages/SettingsLib/res/values-kn-rIN/strings.xml
index 9039e258b086..8578810daa2d 100644
--- a/packages/SettingsLib/res/values-kn-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-kn-rIN/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi ಸಂಪರ್ಕ ವಿಫಲತೆ"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ಪ್ರಮಾಣೀಕರಣ ಸಮಸ್ಯೆ"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"ವ್ಯಾಪ್ತಿಯಲ್ಲಿಲ್ಲ"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"ಯಾವುದೇ ಇಂಟರ್ನೆಟ್‌ ಪ್ರವೇಶ ಪತ್ತೆಯಾಗಿಲ್ಲ, ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಮರುಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> ರಿಂದ ಉಳಿಸಲಾಗಿದೆ"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi ಸಹಾಯಕದ ಮೂಲಕ ಸಂಪರ್ಕಿತಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
@@ -96,7 +93,7 @@
<string name="tether_settings_title_all" msgid="8356136101061143841">"ಟೆಥರಿಂಗ್ &amp; ಪೋರ್ಟಬಲ್ ಹಾಟ್‌ಸ್ಪಾಟ್"</string>
<string name="managed_user_title" msgid="8109605045406748842">"ಎಲ್ಲ ಕೆಲಸದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು"</string>
<string name="user_guest" msgid="8475274842845401871">"ಅತಿಥಿ"</string>
- <string name="unknown" msgid="1592123443519355854">"ಅಪರಿಚಿತ"</string>
+ <string name="unknown" msgid="1592123443519355854">"ಅಜ್ಞಾತ"</string>
<string name="running_process_item_user_label" msgid="3129887865552025943">"ಬಳಕೆದಾರ: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="launch_defaults_some" msgid="313159469856372621">"ಕೆಲವು ಡೀಫಾಲ್ಟ್‌ಗಳನ್ನು ಹೊಂದಿಸಲಾಗಿದೆ"</string>
<string name="launch_defaults_none" msgid="4241129108140034876">"ಡೀಫಾಲ್ಟ್‌ಗಳನ್ನು ಹೊಂದಿಸಲಾಗಿಲ್ಲ"</string>
@@ -315,7 +312,7 @@
<string name="power_charging_duration_usb_short" msgid="941854728040426399">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="power_charging_duration_wireless" msgid="1829295708243159464">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> ವೈರ್‌‌ಲೆಸ್‌ನಿಂದ ಪೂರ್ಣವಾಗುವವರೆಗೆ"</string>
<string name="power_charging_duration_wireless_short" msgid="1642664799869599476">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>"</string>
- <string name="battery_info_status_unknown" msgid="196130600938058547">"ಅಪರಿಚಿತ"</string>
+ <string name="battery_info_status_unknown" msgid="196130600938058547">"ಅಜ್ಞಾತ"</string>
<string name="battery_info_status_charging" msgid="1705179948350365604">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</string>
<string name="battery_info_status_charging_ac" msgid="2909861890674399949">"AC ನಲ್ಲಿ ಚಾರ್ಜ್‌"</string>
<string name="battery_info_status_charging_ac_short" msgid="7431401092096415502">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</string>
@@ -343,6 +340,5 @@
<string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"ಸ್ವಲ್ಪ ದೊಡ್ಡ"</string>
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ದೊಡ್ಡ"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ಕಸ್ಟಮ್ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
- <string name="help_feedback_label" msgid="6815040660801785649">"ಸಹಾಯ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆ"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"ಮೆನು"</string>
+ <string name="help_feedback_label" msgid="6815040660801785649">"ಸಹಾಯ &amp; ಪ್ರತಿಕ್ರಿಯೆ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index e33b989ee26b..aaf34631b7fb 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi 연결 실패"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"인증 문제"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"범위 내에 없음"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"감지된 인터넷 액세스가 없으며 자동으로 다시 연결되지 않습니다."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g>(으)로 저장됨"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi 도우미를 통해 연결됨"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s을(를) 통해 연결됨"</string>
@@ -343,6 +340,5 @@
<string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"더 크게"</string>
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"가장 크게"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"맞춤(<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
- <string name="help_feedback_label" msgid="6815040660801785649">"고객센터"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"메뉴"</string>
+ <string name="help_feedback_label" msgid="6815040660801785649">"도움말 및 의견"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ky-rKG/strings.xml b/packages/SettingsLib/res/values-ky-rKG/strings.xml
index 22622dd009fc..96c1ec024aa6 100644
--- a/packages/SettingsLib/res/values-ky-rKG/strings.xml
+++ b/packages/SettingsLib/res/values-ky-rKG/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi туташуусу бузулду"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Аутентификация маселеси бар"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Тейлөө аймагында эмес"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Интернетке кирүү мүмкүнчүлүгү табылган жок, андыктан автоматтык түрдө кайра туташпайт."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> тарабынан сакталды"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi жардамчысы аркылуу туташып турат"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s аркылуу жеткиликтүү"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Эң чоң"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Ыңгайлаштырылган (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Жардам жана жооп пикир"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-lo-rLA/strings.xml b/packages/SettingsLib/res/values-lo-rLA/strings.xml
index 716ee6fe3a57..24f0c16c4962 100644
--- a/packages/SettingsLib/res/values-lo-rLA/strings.xml
+++ b/packages/SettingsLib/res/values-lo-rLA/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"​ການ​ເຊື່ອມ​ຕໍ່ WiFi ລົ້ມ​ເຫຼວ"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ບັນຫາການພິສູດຢືນຢັນ"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"ບໍ່ຢູ່ໃນໄລຍະທີ່ເຊື່ອມຕໍ່ໄດ້"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"​ບໍ່​ພົບ​ການ​ເຊື່ອມ​ຕໍ່​ອິນ​ເຕີ​ເນັດ​, ຈະ​ບໍ່​ຖືກ​ເຊື່ອມ​ຕໍ່​ໃໝ່​ໂດຍ​ອັດ​ຕະ​ໂນ​ມັດ."</string>
<string name="saved_network" msgid="4352716707126620811">"ບັນທຶກ​​​ໂດຍ <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"ເຊື່ອມ​ຕໍ່​ຜ່ານ Wi‑Fi ຕົວ​ຊ່ວຍ​ແລ້ວ"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"​ເຊື່ອມຕໍ່​ຜ່ານ %1$s ​ແລ້ວ"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ໃຫຍ່ທີ່ສຸດ"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ປັບແຕ່ງເອງ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"ຊ່ວຍເຫຼືອ &amp; ຄຳຕິຊົມ"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"ເມນູ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 167e7568be37..4b8890d04d33 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"„Wi-Fi“ ryšio triktis"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentifikavimo problema"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Ne diapazone"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Neaptikta jokia prieiga prie interneto, nebus automatiškai iš naujo prisijungta."</string>
<string name="saved_network" msgid="4352716707126620811">"Išsaugojo <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Prisijungta naudojant „Wi‑Fi“ pagelbiklį"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Prisijungta naudojant „%1$s“"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Didžiausias"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Tinkintas (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Pagalba ir atsiliepimai"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Meniu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index 7f5e111a741f..4d76adc3e291 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi savienojuma kļūme"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentificēšanas problēma"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Nav diapazona ietvaros"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Nevar noteikt interneta savienojumu. Savienojums netiks izveidots vēlreiz automātiski."</string>
<string name="saved_network" msgid="4352716707126620811">"Saglabāja: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Izveidots savienojums ar Wi‑Fi palīgu"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Savienots, izmantojot %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Vislielākais"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Pielāgots (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Palīdzība un atsauksmes"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Izvēlne"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-mk-rMK/strings.xml b/packages/SettingsLib/res/values-mk-rMK/strings.xml
index 2a454d228257..953360a7aa00 100644
--- a/packages/SettingsLib/res/values-mk-rMK/strings.xml
+++ b/packages/SettingsLib/res/values-mk-rMK/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Поврзувањето преку Wi-Fi не успеа"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблем со автентикација"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Надвор од опсег"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Не е откриен пристап до интернет, нема автоматски повторно да се поврзете."</string>
<string name="saved_network" msgid="4352716707126620811">"Зачувано од <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Поврзано преку помошник за Wi-Fismile"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Поврзано преку %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Најголем"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Приспособен (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Помош и повратни информации"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Мени"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ml-rIN/strings.xml b/packages/SettingsLib/res/values-ml-rIN/strings.xml
index 56d14779322f..92c04487ace2 100644
--- a/packages/SettingsLib/res/values-ml-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-ml-rIN/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi കണക്ഷൻ പരാജയം"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ആധികാരികമാക്കുന്നതിലെ പ്രശ്‌നം"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"പരിധിയിലില്ല"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"ഇന്റർനെറ്റ് ആക്സസ്സൊന്നും കണ്ടെത്താത്തതിനാൽ സ്വയം വീണ്ടും കണക്‌റ്റുചെയ്യില്ല."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> സംരക്ഷിച്ചത്"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"വൈഫൈ അസിസ്റ്റന്റ് മുഖേന കണക്‌റ്റുചെയ്തു"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s വഴി ബന്ധിപ്പിച്ചു"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ഏറ്റവും വലുത്"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ഇഷ്ടാനുസൃതം ( <xliff:g id="DENSITYDPI">%d</xliff:g> )"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"സഹായവും പ്രതികരണവും"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"മെനു"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-mn-rMN/strings.xml b/packages/SettingsLib/res/values-mn-rMN/strings.xml
index 9848caedf814..4c98c04c07d4 100644
--- a/packages/SettingsLib/res/values-mn-rMN/strings.xml
+++ b/packages/SettingsLib/res/values-mn-rMN/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi холболт амжилтгүй"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Гэрчлэлийн асуудал"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Хүрээнд байхгүй"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Интернэт холболт илэрсэнгүй, автоматаар дахин холболт хийгдэхгүй"</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> хадгалсан"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi-Fi туслагчаар дамжуулан холбогдлоо"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-р холбогдсон"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Хамгийн том"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Тогтмол утга (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Тусламж, санал хүсэлт"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Цэс"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-mr-rIN/strings.xml b/packages/SettingsLib/res/values-mr-rIN/strings.xml
index 83ae6634430c..e3a7cc46cd44 100644
--- a/packages/SettingsLib/res/values-mr-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-mr-rIN/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi कनेक्शन अयशस्वी"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"प्रमाणीकरण समस्या"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"परिक्षेत्रामध्ये नाही"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"कोणताही इंटरनेट प्रवेश आढळला नाही, स्वयंचलितपणे रीकनेक्ट करणार नाही."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> द्वारे जतन केले"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi सहाय्यक द्वारे कनेक्ट केले"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s द्वारे कनेक्‍ट केले"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"सर्वात मोठा"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"सानुकूल करा (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"मदत आणि अभिप्राय"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"मेनू"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ms-rMY/strings.xml b/packages/SettingsLib/res/values-ms-rMY/strings.xml
index 217d82acef53..a1caa2a94419 100644
--- a/packages/SettingsLib/res/values-ms-rMY/strings.xml
+++ b/packages/SettingsLib/res/values-ms-rMY/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Kegagalan Sambungan WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Masalah pengesahan"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Tidak dalam liputan"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Tiada Akses Internet Dikesan, tidak akan menyambung secara automatik."</string>
<string name="saved_network" msgid="4352716707126620811">"Diselamatkan oleh <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Disambungkan melalui Pembantu Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Disambungkan melalui %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Terbesar"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Tersuai (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Bantuan &amp; maklum balas"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-my-rMM/strings.xml b/packages/SettingsLib/res/values-my-rMM/strings.xml
index fc977a9649df..6a1c33190486 100644
--- a/packages/SettingsLib/res/values-my-rMM/strings.xml
+++ b/packages/SettingsLib/res/values-my-rMM/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi ချိတ်ဆက်မှု မအောင်မြင်ပါ"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"စစ်မှန်ကြောင်းအတည်ပြုရန်၌ ပြသနာရှိခြင်း"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"စက်ကွင်းထဲတွင် မဟုတ်ပါ"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"မည်သည့် အင်တာနက်မျှမရှိပါ၊ အလိုအလျောက် ပြန်လည်မချိတ်ဆက်ပါ။"</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> မှသိမ်းဆည်းခဲ့သည်"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"ကြိုးမဲ့ကူညီသူမှတဆင့် ချိတ်ဆက်၏"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"အကြီးဆုံး"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"စိတ်ကြိုက် (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"အကူအညီနှင့် အကြံပြုချက်"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"မီနူး"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index bd6ae05766d0..5d8ae55fb592 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi-tilkoblingsfeil"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentiseringsproblem"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Utenfor område"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Ingen Internett-tilgang ble funnet. Kan ikke koble til på nytt automatisk."</string>
<string name="saved_network" msgid="4352716707126620811">"Lagret av <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Koblet til via en Wi-Fi-assistent"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Tilkoblet via %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Størst"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Egendefinert (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Hjelp og tilbakemelding"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Meny"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ne-rNP/strings.xml b/packages/SettingsLib/res/values-ne-rNP/strings.xml
index c671f90fca9c..15cc8ea87c72 100644
--- a/packages/SettingsLib/res/values-ne-rNP/strings.xml
+++ b/packages/SettingsLib/res/values-ne-rNP/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"वाईफाई जडान असफल"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"प्रमाणीकरण समस्या"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"दायराभित्र छैन"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"कुनै इन्टरनेट पहुँच पाईएन, स्वचालित रूपमा पुन: जडान छैन।"</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> द्वारा सुरक्षित गरियो"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi-Fi सहायक द्वारा जोडिएको"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s मार्फत जडित"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"सबैभन्दा ठूलो"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"अनुकूलन (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"मद्दत र प्रतिक्रिया"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"मेनु"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 330eb3072cd4..12bdb4f30c06 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wifi-verbinding mislukt"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authenticatieprobleem"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Niet binnen bereik"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Geen internettoegang gevonden. Er wordt niet automatisch opnieuw verbinding gemaakt."</string>
<string name="saved_network" msgid="4352716707126620811">"Opgeslagen door <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Verbonden via wifi-assistent"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Verbonden via %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Grootst"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Aangepast (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Help en feedback"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pa-rIN/strings.xml b/packages/SettingsLib/res/values-pa-rIN/strings.xml
index 982602364186..21d11b00cd4b 100644
--- a/packages/SettingsLib/res/values-pa-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-pa-rIN/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi ਕਨੈਕਸ਼ਨ ਅਸਫਲਤਾ"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ਪ੍ਰਮਾਣੀਕਰਨ ਸਮੱਸਿਆ"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"ਰੇਂਜ ਵਿੱਚ ਨਹੀਂ ਹੈ"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"ਕੋਈ ਇੰਟਰਨੈਟ ਪਹੁੰਚ ਨਹੀਂ ਮਿਲੀ, ਆਟੋਮੈਟਿਕਲੀ ਰੀਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾਏਗਾ।"</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> ਵੱਲੋਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi ਸਹਾਇਕ ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ਸਭ ਤੋਂ ਵੱਡਾ"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"ਮਦਦ ਅਤੇ ਪ੍ਰਤੀਕਰਮ"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"ਮੀਨੂ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 4dce1a4d0ac5..d5116a2e3d7c 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Błąd połączenia Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem z uwierzytelnianiem"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Poza zasięgiem"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Nie wykryto dostępu do internetu. Nie można automatycznie przywrócić połączenia."</string>
<string name="saved_network" msgid="4352716707126620811">"Zapisane przez: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Połączono przez Asystenta Wi‑Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Połączono przez %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Największy"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Niestandardowe (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Pomoc i opinie"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index 27332f909155..f0cfa23df334 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Falha de conexão Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticação"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Fora do alcance"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Nenhum acesso à Internet detectado. O dispositivo não conectará automaticamente."</string>
<string name="saved_network" msgid="4352716707126620811">"Salvas por <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Conectado via assistente de Wi‑Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado via %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Maior"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizada (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Ajuda e feedback"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index c48ccbad5e97..40dfc74806b3 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Falha de ligação Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticação"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Fora do alcance"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Nenhum acesso à Internet detetado; não será efetuada uma nova ligação automaticamente."</string>
<string name="saved_network" msgid="4352716707126620811">"Guardada por <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Ligado através do Assistente de Wi‑Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Ligado através de %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"O maior"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizado (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Ajuda e comentários"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 27332f909155..f0cfa23df334 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Falha de conexão Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticação"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Fora do alcance"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Nenhum acesso à Internet detectado. O dispositivo não conectará automaticamente."</string>
<string name="saved_network" msgid="4352716707126620811">"Salvas por <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Conectado via assistente de Wi‑Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado via %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Maior"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizada (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Ajuda e feedback"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index 8458557dfa00..6cc0f87e1b31 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Eroare de conexiune Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problemă la autentificare"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"În afara ariei de acoperire"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Nu s-a detectat acces la internet, nu se va efectua reconectarea automată."</string>
<string name="saved_network" msgid="4352716707126620811">"Salvată de <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Conexiune realizată printr-un asistent Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Conectată prin %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Cel mai mare"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizat (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Ajutor și feedback"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Meniu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index a89c5536de3c..ad4db89418b3 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -28,16 +28,13 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Ошибка подключения Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Ошибка аутентификации"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Недоступна"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Подключение к Интернету отсутствует и не будет восстановлено автоматически."</string>
<string name="saved_network" msgid="4352716707126620811">"Кто сохранил: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Установлено подключение через Ассистента Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Подключено к %1$s"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Доступно через %1$s"</string>
<string name="wifi_connected_no_internet" msgid="3149853966840874992">"Подключено, без Интернета"</string>
- <string name="bluetooth_disconnected" msgid="6557104142667339895">"Нет подключения"</string>
+ <string name="bluetooth_disconnected" msgid="6557104142667339895">"Отключено"</string>
<string name="bluetooth_disconnecting" msgid="8913264760027764974">"Отключение..."</string>
<string name="bluetooth_connecting" msgid="8555009514614320497">"Подключение..."</string>
<string name="bluetooth_connected" msgid="6038755206916626419">"Подключено"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Максимальный"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Другой (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Справка/отзыв"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-si-rLK/strings.xml b/packages/SettingsLib/res/values-si-rLK/strings.xml
index c8a0bad22bc1..5efb4001a638 100644
--- a/packages/SettingsLib/res/values-si-rLK/strings.xml
+++ b/packages/SettingsLib/res/values-si-rLK/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi සම්බන්ධතාව අසාර්ථකයි"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"සත්‍යාපනයේ ගැටලුවකි"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"පරාසයේ නැත"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"අන්තර්ජාල ප්‍රවේශය අනාවරණය වුයේ නැත, ස්වයංක්‍රිය නැවත සම්බන්ධ වීම වූ නැත"</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> විසින් සුරකින ලදී"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi සහායක හරහා සම්බන්ධ කරන ලදි"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s හරහා සම්බන්ධ විය"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"විශාලතම"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"අභිරුචි (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"උදව් සහ ප්‍රතිපෝෂණ"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"මෙනුව"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 958bae645f51..7a7e3d49d12d 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Zlyhanie pripojenia Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problém s overením totožnosti"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Mimo dosah"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Nenašiel sa žiadny prístup k internetu, preto nedôjde k automatickému opätovnému pripojeniu"</string>
<string name="saved_network" msgid="4352716707126620811">"Uložil(a) <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Pripojené pomocou Asistenta Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Pripojené prostredníctvom %1$s"</string>
@@ -176,8 +173,8 @@
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zvýšiť úroveň denníkov Wi-Fi, zobrazovať podľa SSID RSSI pri výbere siete Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Keď túto možnosť zapnete, Wi-Fi bude agresívnejšie odovzdávať dát. pripoj. na mob. sieť vtedy, keď bude slabý signál Wi-Fi"</string>
<string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Povoliť alebo zakázať funkciu Wifi Roam Scans na základe objemu prenosu údajov v rozhraní"</string>
- <string name="select_logd_size_title" msgid="7433137108348553508">"Vyrovnávacia pamäť nástroja denníkov"</string>
- <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Veľkosť vyrovnávacej pamäte nástroja denníkov"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Veľkosti vyrovnávacej pamäte denníka"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Veľkosť na vyrovnávaciu pamäť nástroja denníkov"</string>
<string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Vymazať trvalé úložisko zapisovača do denníka?"</string>
<string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Keď prestaneme monitorovať pomocou trvalého zapisovača do denníka, musíme vymazať jeho dáta, ktoré sa nachádzajú vo vašom zariadení."</string>
<string name="select_logpersist_title" msgid="7530031344550073166">"Natrvalo ukladať dáta zapisovača do denníka na zariadení"</string>
@@ -189,8 +186,8 @@
<string name="debug_view_attributes" msgid="6485448367803310384">"Kontrola atribútov zobrazenia"</string>
<string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Vždy ponechávať mobilné dáta aktívne, dokonca aj pri aktívnej sieti Wi‑Fi (na rýchle prepínanie sietí)"</string>
<string name="adb_warning_title" msgid="6234463310896563253">"Povoliť ladenie cez USB?"</string>
- <string name="adb_warning_message" msgid="7316799925425402244">"Ladenie cez USB je určené iba na účely vývoja. Možno ho použiť na kopírovanie dát medzi počítačom a zariadením, inštaláciu aplikácií do zariadenia bez upozornenia a čítanie dát denníka."</string>
- <string name="adb_keys_warning_message" msgid="5659849457135841625">"Chcete všetkým v minulosti autorizovaným počítačom odvolať prístup k ladeniu cez USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Ladenie prostredníctvom USB je určené iba na účely vývoja. Použite ho na kopírovanie dát medzi počítačom a zariadením, inštaláciu aplikácií do zariadenia bez upozornenia a čítanie údajov denníka."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Chcete odvolať prístup k ladeniu cez USB zo všetkých počítačov, ktoré ste predtým autorizovali?"</string>
<string name="dev_settings_warning_title" msgid="7244607768088540165">"Povoliť nastavenia pre vývojárov?"</string>
<string name="dev_settings_warning_message" msgid="2298337781139097964">"Tieto nastavenia sú určené len pre vývojárov. Môžu spôsobiť poruchu alebo nesprávne fungovanie zariadenia a nainštalovaných aplikácií."</string>
<string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Overovať aplikácie z USB"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Najväčšie"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Vlastné (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Pomocník a spätná väzba"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Ponuka"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index d4ad8022e34c..10bff6e038a9 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Povezava prek Wi-Fi-ja ni uspela"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Težava s preverjanjem pristnosti"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Ni v obsegu"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Ni zaznanega dostopa do interneta; samodejna vnovična vzpostavitev povezave se ne bo izvedla."</string>
<string name="saved_network" msgid="4352716707126620811">"Shranil(-a): <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Povezava vzpostavljena prek pomočnika za Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Vzpostavljena povezava prek: %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Največje"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Po meri (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Pomoč in povratne informacije"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Meni"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sq-rAL/strings.xml b/packages/SettingsLib/res/values-sq-rAL/strings.xml
index ba5d2833c71f..e4f0eaa29596 100644
--- a/packages/SettingsLib/res/values-sq-rAL/strings.xml
+++ b/packages/SettingsLib/res/values-sq-rAL/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Dështim i lidhjes WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem me vërtetimin"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Nuk është brenda rrezes"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Nuk u diktua qasje në internet. Lidhja nuk do të realizohet automatikisht."</string>
<string name="saved_network" msgid="4352716707126620811">"E ruajtur nga <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"I lidhur nëpërmjet ndihmësit të Wi‑Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"E lidhur përmes %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Më i madhi"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"I personalizuar (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Ndihma dhe komentet"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menyja"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index b04a4c2a1e53..fba58c50211c 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi веза је отказала"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблем са потврдом аутентичности"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Није у опсегу"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Приступ интернету није откривен, аутоматско повезивање није могуће."</string>
<string name="saved_network" msgid="4352716707126620811">"Сачувао/ла је <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Повезано преко Wi‑Fi помоћника"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Веза је успостављена преко приступне тачке %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Највећи"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Прилагођени (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Помоћ и повратне информације"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Мени"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index 7562ee08606a..ecc728a81eec 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi-anslutningsfel"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentiseringsproblem"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Utom räckhåll"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Ingen internetåtkomst hittades. Det går inte att återansluta automatiskt."</string>
<string name="saved_network" msgid="4352716707126620811">"Sparades av <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Ansluten via Wi-Fi-assistent"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Anslutet via %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Störst"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Anpassad (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Hjälp och feedback"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Meny"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 9e64b9169a27..435a1bdd99be 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Haikuweza Kuunganisha kwenye WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Tatizo la uthibitishaji"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Haiko karibu"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Hakuna Ufikiaji kwa Intaneti Uliogunduliwa, haitaweza kuunganisha kiotomatiki."</string>
<string name="saved_network" msgid="4352716707126620811">"Ilihifadhiwa na <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Imeunganishwa kupitia Kisaidizi cha Wi-Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Imeunganishwa kupitia %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Kubwa zaidi"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Kiwango maalum (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Usaidizi na maoni"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menyu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ta-rIN/strings.xml b/packages/SettingsLib/res/values-ta-rIN/strings.xml
index b9ff6bc9f2dc..033955c77e91 100644
--- a/packages/SettingsLib/res/values-ta-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-ta-rIN/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"வைஃபை இணைப்பில் தோல்வி"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"அங்கீகரிப்புச் சிக்கல்"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"தொடர்பு எல்லையில் இல்லை"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"இணைய அணுகல் இல்லை, மீண்டும் தானாக இணையாது."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> சேமித்தது"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"வைஃபை அசிஸ்டண்ட் மூலம் இணைக்கப்பட்டது"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s வழியாக இணைக்கப்பட்டது"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"மிகப் பெரியது"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"தனிப்பயன் (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"உதவி &amp; கருத்து"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"மெனு"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-te-rIN/strings.xml b/packages/SettingsLib/res/values-te-rIN/strings.xml
index 08bcbdaef593..57581765ae4e 100644
--- a/packages/SettingsLib/res/values-te-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-te-rIN/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi కనెక్షన్ వైఫల్యం"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ప్రామాణీకరణ సమస్య"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"పరిధిలో లేదు"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"ఇంటర్నెట్ ప్రాప్యత కనుగొనబడలేదు, స్వయంచాలకంగా మళ్లీ కనెక్ట్ చేయబడదు."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> ద్వారా సేవ్ చేయబడింది"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi సహాయకం ద్వారా కనెక్ట్ చేయబడింది"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ద్వారా కనెక్ట్ చేయబడింది"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"అతి పెద్దగా"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"అనుకూలం (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"సహాయం &amp; అభిప్రాయం"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"మెను"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index bd9d8d52f40f..4849e1955321 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"การเชื่อมต่อ Wi-Fi ล้มเหลว"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ปัญหาในการตรวจสอบสิทธิ์"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"ไม่อยู่ในพื้นที่ให้บริการ"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"ไม่พบการเข้าถึงอินเทอร์เน็ต ระบบจะไม่เชื่อมต่อใหม่โดยอัตโนมัติ"</string>
<string name="saved_network" msgid="4352716707126620811">"บันทึกโดย <xliff:g id="NAME">%1$s</xliff:g> แล้ว"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"เชื่อมต่อผ่านตัวช่วย Wi-Fi อยู่"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"เชื่อมต่อผ่าน %1$s แล้ว"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ใหญ่ที่สุด"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"กำหนดเอง (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"ความช่วยเหลือและความคิดเห็น"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"เมนู"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index 9c952f594abc..24f5499d4490 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Pagkabigo ng Koneksyon sa WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema sa pagpapatotoo"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Wala sa sakop"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Walang Natukoy na Access sa Internet, hindi awtomatikong muling kumonekta."</string>
<string name="saved_network" msgid="4352716707126620811">"Na-save ni <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Nakakonekta sa pamamagitan ng Wi‑Fi assistant"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Nakakonekta sa pamamagitan ng %1$s"</string>
@@ -149,7 +146,7 @@
<string name="vpn_settings_not_available" msgid="956841430176985598">"Hindi available ang mga setting ng VPN para sa user na ito"</string>
<string name="tethering_settings_not_available" msgid="6765770438438291012">"Hindi available ang mga setting ng pagte-theter para sa user na ito"</string>
<string name="apn_settings_not_available" msgid="7873729032165324000">"Hindi available ang mga setting ng Access Point Name para sa user na ito"</string>
- <string name="enable_adb" msgid="7982306934419797485">"Pag-debug ng USB"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Pagde-debug ng USB"</string>
<string name="enable_adb_summary" msgid="4881186971746056635">"Debug mode kapag nakakonekta ang USB"</string>
<string name="clear_adb_keys" msgid="4038889221503122743">"Bawiin ang mga pahintulot sa pag-debug ng USB"</string>
<string name="bugreport_in_power" msgid="7923901846375587241">"Shortcut ng ulat sa bug"</string>
@@ -189,8 +186,8 @@
<string name="debug_view_attributes" msgid="6485448367803310384">"I-enable ang pagsisiyasat sa attribute na view"</string>
<string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Palaging panatilihing aktibo ang mobile data, kahit na aktibo ang Wi‑Fi (para sa mabilis na paglipat ng network)."</string>
<string name="adb_warning_title" msgid="6234463310896563253">"Payagan ang pag-debug ng USB?"</string>
- <string name="adb_warning_message" msgid="7316799925425402244">"Ang pag-debug ng USB ay para lang sa mga layuning pag-develop. Gamitin ito upang kumopya ng data sa pagitan ng iyong computer at iyong device, mag-install ng mga app sa iyong device nang walang notification, at magbasa ng data ng log."</string>
- <string name="adb_keys_warning_message" msgid="5659849457135841625">"Bawiin ang access sa pag-debug ng USB mula sa lahat ng computer na dati mong pinahintulutan?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Ang pag-debug ng USB ay nilalayon para sa mga layuning pagpapabuti lamang. Gamitin ito upang kumopya ng data sa pagitan ng iyong computer at iyong device, mag-install ng apps sa iyong device nang walang notification, at magbasa ng data ng log."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Bawiin ang access sa pagde-debug ng USB mula sa lahat ng computer na dati mong pinahintulutan?"</string>
<string name="dev_settings_warning_title" msgid="7244607768088540165">"Payagan ang mga setting ng pag-develop?"</string>
<string name="dev_settings_warning_message" msgid="2298337781139097964">"Nilalayon ang mga setting na ito para sa paggamit sa pag-develop lamang. Maaaring magsanhi ang mga ito ng pagkasira o hindi paggana nang maayos ng iyong device at mga application na nandito."</string>
<string name="verify_apps_over_usb_title" msgid="4177086489869041953">"I-verify ang mga app sa USB"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Pinakamalaki"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Tulong at feedback"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index 889b6317d7e8..950e3221ff7c 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Kablosuz Bağlantı Hatası"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Kimlik doğrulama sorunu"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Kapsama alanı dışında"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"İnternet Erişimi algılanmadı, otomatik olarak tekrar bağlanmayacak."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> tarafından kaydedildi"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Kablosuz bağlantı yardımcısıyla bağlandı"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s üzerinden bağlı"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"En büyük"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Özel (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Yardım ve geri bildirim"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menü"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index cdf725f17465..6b49b14084e9 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Помилка з’єднання Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблема з автентифікацією"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Не в діапазоні"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Немає доступу до Інтернету. Спроба під’єднання не здійснюватиметься автоматично."</string>
<string name="saved_network" msgid="4352716707126620811">"Збережено додатком <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Під’єднано через Диспетчер Wi-Fi-з’єднання"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Під’єднано через %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Найбільші елементи"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Спеціальний масштаб (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Довідка й відгуки"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ur-rPK/strings.xml b/packages/SettingsLib/res/values-ur-rPK/strings.xml
index c5aaaab7a9a5..2ac8a6145797 100644
--- a/packages/SettingsLib/res/values-ur-rPK/strings.xml
+++ b/packages/SettingsLib/res/values-ur-rPK/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"‏WiFi کنکشن کی ناکامی"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"توثیق کا مسئلہ"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"رینج میں نہیں ہے"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"انٹرنیٹ تک کسی رسائی کا پتہ نہیں چلا، خود بخود دوبارہ منسلک نہیں ہوگا۔"</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> کی جانب سے محفوظ کردہ"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"‏Wi‑Fi اسسٹنٹ کے ذریعے منسلک ہے"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"‏منسلک بذریعہ ‎%1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"سب سے بڑا"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"حسب ضرورت (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"مدد اور تاثرات"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"مینو"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-uz-rUZ/strings.xml b/packages/SettingsLib/res/values-uz-rUZ/strings.xml
index e2c58a414509..9022ad31dacf 100644
--- a/packages/SettingsLib/res/values-uz-rUZ/strings.xml
+++ b/packages/SettingsLib/res/values-uz-rUZ/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi ulanishini o‘rnatib bo‘lmadi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Tasdiqdan o‘tishda muammo"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Aloqada emas"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Internetga ulanish aniqlanmadi, avtomatik ravishda qayta ulana olmaydi."</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> tomonidan saqlangan"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi yordamchisi orqali ulangan"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s orqali ulangan"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Eng katta"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Moslashtirilgan (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Yordam va fikr-mulohaza"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menyu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index fa4174b37046..c58f84993bb6 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Lỗi kết nối WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Sự cố xác thực"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Ngoài vùng phủ sóng"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Không phát hiện thấy truy cập Internet nào, mạng sẽ không được tự động kết nối lại."</string>
<string name="saved_network" msgid="4352716707126620811">"Được lưu bởi <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Được kết nối qua trình hỗ trợ Wi‑Fi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Được kết nối qua %1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Lớn nhất"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Tùy chỉnh (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Trợ giúp và phản hồi"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index 63199e8f84c3..18ae80e3d9b6 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WLAN 连接失败"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"身份验证出现问题"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"不在范围内"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"未检测到任何互联网连接,因此不会自动重新连接。"</string>
<string name="saved_network" msgid="4352716707126620811">"已通过<xliff:g id="NAME">%1$s</xliff:g>保存"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"已连接(通过 WLAN 助手)"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"已通过%1$s连接"</string>
@@ -189,7 +186,7 @@
<string name="debug_view_attributes" msgid="6485448367803310384">"启用视图属性检查功能"</string>
<string name="mobile_data_always_on_summary" msgid="8149773901431697910">"始终开启移动数据网络,即使 WLAN 网络已开启(便于快速切换网络)。"</string>
<string name="adb_warning_title" msgid="6234463310896563253">"是否允许USB调试?"</string>
- <string name="adb_warning_message" msgid="7316799925425402244">"USB 调试仅用于开发目的。该功能可用于在您的计算机和设备之间复制数据、在您的设备上安装应用(事先不发通知)以及读取日志数据。"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB调试仅适用于开发工作。该功能可用于在您的计算机和设备之间复制数据、在您的设备上安装应用而不发送通知以及读取日志数据。"</string>
<string name="adb_keys_warning_message" msgid="5659849457135841625">"是否针对您之前授权的所有计算机撤消USB调试的访问权限?"</string>
<string name="dev_settings_warning_title" msgid="7244607768088540165">"允许开发设置?"</string>
<string name="dev_settings_warning_message" msgid="2298337781139097964">"这些设置仅适用于开发工作。一旦启用,会导致您的设备以及设备上的应用崩溃或出现异常。"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"最大"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"自定义 (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"帮助和反馈"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"菜单"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index edbffc19503b..660071df7073 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi 連線失敗"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"驗證問題"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"超出可用範圍"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"未能偵測到互聯網連線,因此不會自動重新連線。"</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> 的儲存"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"已透過 Wi-Fi 小幫手連線"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"最大"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"自訂 (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"說明與意見反映"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"選單"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index b1c5f0632a66..bce6f244d1e4 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi 連線失敗"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"驗證問題"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"不在有效範圍內"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"未偵測到可用的網際網路連線,系統無法為您自動重新連線。"</string>
<string name="saved_network" msgid="4352716707126620811">"由<xliff:g id="NAME">%1$s</xliff:g>儲存"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"已透過 Wi‑Fi 小幫手連線"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"最大"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"自訂 (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"說明與意見回饋"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"選單"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index e4f0d59bfc15..07c6fce2c3f9 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -28,10 +28,7 @@
<string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Ukwehlulekla koxhumo le-WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Inkinga yokufakazela ubuqiniso"</string>
<string name="wifi_not_in_range" msgid="1136191511238508967">"Ayikho ebubanzini"</string>
- <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) -->
- <skip />
- <!-- no translation found for wifi_no_internet (5011955173375805204) -->
- <skip />
+ <string name="wifi_no_internet" msgid="9151470775868728896">"Ukufinyeela okungekhona kwe-inthanethi kutholakele, ngeke kuxhumeke ngokuzenzakalelayo."</string>
<string name="saved_network" msgid="4352716707126620811">"Kulondolozwe ngu-<xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="connected_via_wfa" msgid="3805736726317410714">"Ixhunywe ngomsizi we-Wi-FI"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Kuxhumeke nge-%1$s"</string>
@@ -344,5 +341,4 @@
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Okukhulu kakhulu"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Ngokwezifiso (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
<string name="help_feedback_label" msgid="6815040660801785649">"Usizo nempendulo"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"Imenyu"</string>
</resources>
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index cd2d6b337f73..08bf3a7f9f95 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -155,6 +155,9 @@
<!-- Default for Settings.Secure.LONG_PRESS_TIMEOUT_MILLIS -->
<integer name="def_long_press_timeout_millis">400</integer>
+ <!-- Default for Settings.Secure.MULTI_PRESS_TIMEOUT -->
+ <integer name="def_multi_press_timeout_millis">300</integer>
+
<!-- Default for Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD -->
<bool name="def_show_ime_with_hard_keyboard">false</bool>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index a43c398f04ad..e66e963c0179 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -2102,7 +2102,7 @@ public class SettingsProvider extends ContentProvider {
}
private final class UpgradeController {
- private static final int SETTINGS_VERSION = 130;
+ private static final int SETTINGS_VERSION = 131;
private final int mUserId;
@@ -2416,6 +2416,22 @@ public class SettingsProvider extends ContentProvider {
currentVersion = 130;
}
+ if (currentVersion == 130) {
+ // Initialize new multi-press timeout to default value
+ final SettingsState systemSecureSettings = getSecureSettingsLocked(userId);
+ final String oldValue = systemSecureSettings.getSettingLocked(
+ Settings.Secure.MULTI_PRESS_TIMEOUT).getValue();
+ if (TextUtils.equals(null, oldValue)) {
+ systemSecureSettings.insertSettingLocked(
+ Settings.Secure.MULTI_PRESS_TIMEOUT,
+ String.valueOf(getContext().getResources().getInteger(
+ R.integer.def_multi_press_timeout_millis)),
+ SettingsState.SYSTEM_PACKAGE_NAME);
+ }
+
+ currentVersion = 131;
+ }
+
if (currentVersion != newVersion) {
Slog.wtf("SettingsProvider", "warning: upgrading settings database to version "
+ newVersion + " left it at "
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index f1789ea03682..227d0e944e6e 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -114,6 +114,8 @@
<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
<!-- Permission needed to rename bugreport notifications (so they're not shown as Shell) -->
<uses-permission android:name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME" />
+ <!-- Permission needed to hold a wakelock in dumpstate.cpp (drop_root_user()) -->
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
<application android:label="@string/app_label"
android:defaultToDeviceProtectedStorage="true"
diff --git a/packages/SystemUI/res/values-bs-rBA-land/strings.xml b/packages/SystemUI/res/values-bs-rBA-land/strings.xml
index 56a4ad276d08..bdc652af8f1a 100644
--- a/packages/SystemUI/res/values-bs-rBA-land/strings.xml
+++ b/packages/SystemUI/res/values-bs-rBA-land/strings.xml
@@ -19,5 +19,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="toast_rotation_locked" msgid="7609673011431556092">"Ekran je sada zaključan u vodoravnom prikazu."</string>
+ <string name="toast_rotation_locked" msgid="7609673011431556092">"Ekran je sada zaključan u pejzažnom prikazu."</string>
</resources>
diff --git a/packages/SystemUI/res/values-it/strings_car.xml b/packages/SystemUI/res/values-it/strings_car.xml
index 19c4e2b02ad0..ae26c9e102bd 100644
--- a/packages/SystemUI/res/values-it/strings_car.xml
+++ b/packages/SystemUI/res/values-it/strings_car.xml
@@ -20,5 +20,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Guida in modo sicuro"</string>
- <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"È necessario essere sempre pienamente informati sulle condizioni della strada e rispettare la legislazione vigente. Le indicazioni stradali potrebbero essere imprecise, incomplete, pericolose, inadatte, vietate o richiedere l\'attraversamento di aree amministrative. Anche le informazioni sugli esercizi commerciali potrebbero essere imprecise o incomplete. I dati forniti non sono aggiornati in tempo reale e non è possibile garantire la precisione della geolocalizzazione. Non maneggiare dispositivi mobili e app non destinate ad Android Auto durante la guida."</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"È necessario essere sempre pienamente coscienti delle condizioni di guida e rispettare le leggi vigenti. Le indicazioni stradali potrebbero essere imprecise, incomplete, pericolose, non adatte, vietate o implicare l\'attraversamento di confini. Anche le informazioni sulle attività commerciali potrebbero essere imprecise o incomplete. I dati non vengono forniti in tempo reale e non è possibile garantire la precisione della geolocalizzazione. Non maneggiare il dispositivo mobile e non utilizzare app non progettate per Android Auto durante la guida."</string>
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
index 78e56c04ce9b..58d57f68d699 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
@@ -116,6 +116,8 @@ public class NotificationContentView extends FrameLayout {
private boolean mForceSelectNextLayout = true;
private PendingIntent mPreviousExpandedRemoteInputIntent;
private PendingIntent mPreviousHeadsUpRemoteInputIntent;
+ private RemoteInputView mCachedExpandedRemoteInput;
+ private RemoteInputView mCachedHeadsUpRemoteInput;
private int mContentHeightAtAnimationStart = UNDEFINED;
private boolean mFocusOnVisibilityChange;
@@ -298,6 +300,9 @@ public class NotificationContentView extends FrameLayout {
mExpandedRemoteInput.onNotificationUpdateOrReset();
if (mExpandedRemoteInput.isActive()) {
mPreviousExpandedRemoteInputIntent = mExpandedRemoteInput.getPendingIntent();
+ mCachedExpandedRemoteInput = mExpandedRemoteInput;
+ mExpandedRemoteInput.dispatchStartTemporaryDetach();
+ ((ViewGroup)mExpandedRemoteInput.getParent()).removeView(mExpandedRemoteInput);
}
}
if (mExpandedChild != null) {
@@ -310,6 +315,9 @@ public class NotificationContentView extends FrameLayout {
mHeadsUpRemoteInput.onNotificationUpdateOrReset();
if (mHeadsUpRemoteInput.isActive()) {
mPreviousHeadsUpRemoteInputIntent = mHeadsUpRemoteInput.getPendingIntent();
+ mCachedHeadsUpRemoteInput = mHeadsUpRemoteInput;
+ mHeadsUpRemoteInput.dispatchStartTemporaryDetach();
+ ((ViewGroup)mHeadsUpRemoteInput.getParent()).removeView(mHeadsUpRemoteInput);
}
}
if (mHeadsUpChild != null) {
@@ -963,22 +971,35 @@ public class NotificationContentView extends FrameLayout {
View bigContentView = mExpandedChild;
if (bigContentView != null) {
mExpandedRemoteInput = applyRemoteInput(bigContentView, entry, hasRemoteInput,
- mPreviousExpandedRemoteInputIntent);
+ mPreviousExpandedRemoteInputIntent, mCachedExpandedRemoteInput);
} else {
mExpandedRemoteInput = null;
}
+ if (mCachedExpandedRemoteInput != null
+ && mCachedExpandedRemoteInput != mExpandedRemoteInput) {
+ // We had a cached remote input but didn't reuse it. Clean up required.
+ mCachedExpandedRemoteInput.dispatchFinishTemporaryDetach();
+ }
+ mCachedExpandedRemoteInput = null;
View headsUpContentView = mHeadsUpChild;
if (headsUpContentView != null) {
mHeadsUpRemoteInput = applyRemoteInput(headsUpContentView, entry, hasRemoteInput,
- mPreviousHeadsUpRemoteInputIntent);
+ mPreviousHeadsUpRemoteInputIntent, mCachedHeadsUpRemoteInput);
} else {
mHeadsUpRemoteInput = null;
}
+ if (mCachedHeadsUpRemoteInput != null
+ && mCachedHeadsUpRemoteInput != mHeadsUpRemoteInput) {
+ // We had a cached remote input but didn't reuse it. Clean up required.
+ mCachedHeadsUpRemoteInput.dispatchFinishTemporaryDetach();
+ }
+ mCachedHeadsUpRemoteInput = null;
}
private RemoteInputView applyRemoteInput(View view, NotificationData.Entry entry,
- boolean hasRemoteInput, PendingIntent existingPendingIntent) {
+ boolean hasRemoteInput, PendingIntent existingPendingIntent,
+ RemoteInputView cachedView) {
View actionContainerCandidate = view.findViewById(
com.android.internal.R.id.actions_container);
if (actionContainerCandidate instanceof FrameLayout) {
@@ -991,15 +1012,22 @@ public class NotificationContentView extends FrameLayout {
if (existing == null && hasRemoteInput) {
ViewGroup actionContainer = (FrameLayout) actionContainerCandidate;
- RemoteInputView riv = RemoteInputView.inflate(
- mContext, actionContainer, entry, mRemoteInputController);
-
- riv.setVisibility(View.INVISIBLE);
- actionContainer.addView(riv, new LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.MATCH_PARENT)
- );
- existing = riv;
+ if (cachedView == null) {
+ RemoteInputView riv = RemoteInputView.inflate(
+ mContext, actionContainer, entry, mRemoteInputController);
+
+ riv.setVisibility(View.INVISIBLE);
+ actionContainer.addView(riv, new LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT)
+ );
+ existing = riv;
+ } else {
+ actionContainer.addView(cachedView);
+ cachedView.dispatchFinishTemporaryDetach();
+ cachedView.requestFocus();
+ existing = cachedView;
+ }
}
if (hasRemoteInput) {
int color = entry.notification.getNotification().color;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/RemoteInputController.java b/packages/SystemUI/src/com/android/systemui/statusbar/RemoteInputController.java
index 6cbaceaa00ff..66cc15d7cc8f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/RemoteInputController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/RemoteInputController.java
@@ -21,7 +21,9 @@ import com.android.systemui.statusbar.phone.StatusBarWindowManager;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.RemoteInputView;
+import android.util.ArrayMap;
import android.util.ArraySet;
+import android.util.Pair;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -31,8 +33,9 @@ import java.util.ArrayList;
*/
public class RemoteInputController {
- private final ArrayList<WeakReference<NotificationData.Entry>> mOpen = new ArrayList<>();
- private final ArraySet<String> mSpinning = new ArraySet<>();
+ private final ArrayList<Pair<WeakReference<NotificationData.Entry>, Object>> mOpen
+ = new ArrayList<>();
+ private final ArrayMap<String, Object> mSpinning = new ArrayMap<>();
private final ArrayList<Callback> mCallbacks = new ArrayList<>(3);
private final HeadsUpManager mHeadsUpManager;
@@ -41,36 +44,72 @@ public class RemoteInputController {
mHeadsUpManager = headsUpManager;
}
- public void addRemoteInput(NotificationData.Entry entry) {
+ /**
+ * Adds a currently active remote input.
+ *
+ * @param entry the entry for which a remote input is now active.
+ * @param token a token identifying the view that is managing the remote input
+ */
+ public void addRemoteInput(NotificationData.Entry entry, Object token) {
Preconditions.checkNotNull(entry);
+ Preconditions.checkNotNull(token);
boolean found = pruneWeakThenRemoveAndContains(
- entry /* contains */, null /* remove */);
+ entry /* contains */, null /* remove */, token /* removeToken */);
if (!found) {
- mOpen.add(new WeakReference<>(entry));
+ mOpen.add(new Pair<>(new WeakReference<>(entry), token));
}
apply(entry);
}
- public void removeRemoteInput(NotificationData.Entry entry) {
+ /**
+ * Removes a currently active remote input.
+ *
+ * @param entry the entry for which a remote input should be removed.
+ * @param token a token identifying the view that is requesting the removal. If non-null,
+ * the entry is only removed if the token matches the last added token for this
+ * entry. If null, the entry is removed regardless.
+ */
+ public void removeRemoteInput(NotificationData.Entry entry, Object token) {
Preconditions.checkNotNull(entry);
- pruneWeakThenRemoveAndContains(null /* contains */, entry /* remove */);
+ pruneWeakThenRemoveAndContains(null /* contains */, entry /* remove */, token);
apply(entry);
}
- public void addSpinning(String key) {
- mSpinning.add(key);
+ /**
+ * Adds a currently spinning (i.e. sending) remote input.
+ *
+ * @param key the key of the entry that's spinning.
+ * @param token the token of the view managing the remote input.
+ */
+ public void addSpinning(String key, Object token) {
+ Preconditions.checkNotNull(key);
+ Preconditions.checkNotNull(token);
+
+ mSpinning.put(key, token);
}
- public void removeSpinning(String key) {
- mSpinning.remove(key);
+ /**
+ * Removes a currently spinning remote input.
+ *
+ * @param key the key of the entry for which a remote input should be removed.
+ * @param token a token identifying the view that is requesting the removal. If non-null,
+ * the entry is only removed if the token matches the last added token for this
+ * entry. If null, the entry is removed regardless.
+ */
+ public void removeSpinning(String key, Object token) {
+ Preconditions.checkNotNull(key);
+
+ if (token == null || mSpinning.get(key) == token) {
+ mSpinning.remove(key);
+ }
}
public boolean isSpinning(String key) {
- return mSpinning.contains(key);
+ return mSpinning.containsKey(key);
}
private void apply(NotificationData.Entry entry) {
@@ -86,14 +125,16 @@ public class RemoteInputController {
* @return true if {@param entry} has an active RemoteInput
*/
public boolean isRemoteInputActive(NotificationData.Entry entry) {
- return pruneWeakThenRemoveAndContains(entry /* contains */, null /* remove */);
+ return pruneWeakThenRemoveAndContains(entry /* contains */, null /* remove */,
+ null /* removeToken */);
}
/**
* @return true if any entry has an active RemoteInput
*/
public boolean isRemoteInputActive() {
- pruneWeakThenRemoveAndContains(null /* contains */, null /* remove */);
+ pruneWeakThenRemoveAndContains(null /* contains */, null /* remove */,
+ null /* removeToken */);
return !mOpen.isEmpty();
}
@@ -101,17 +142,27 @@ public class RemoteInputController {
* Prunes dangling weak references, removes entries referring to {@param remove} and returns
* whether {@param contains} is part of the array in a single loop.
* @param remove if non-null, removes this entry from the active remote inputs
+ * @param removeToken if non-null, only removes an entry if this matches the token when the
+ * entry was added.
* @return true if {@param contains} is in the set of active remote inputs
*/
private boolean pruneWeakThenRemoveAndContains(
- NotificationData.Entry contains, NotificationData.Entry remove) {
+ NotificationData.Entry contains, NotificationData.Entry remove, Object removeToken) {
boolean found = false;
for (int i = mOpen.size() - 1; i >= 0; i--) {
- NotificationData.Entry item = mOpen.get(i).get();
- if (item == null || item == remove) {
+ NotificationData.Entry item = mOpen.get(i).first.get();
+ Object itemToken = mOpen.get(i).second;
+ boolean removeTokenMatches = (removeToken == null || itemToken == removeToken);
+
+ if (item == null || (item == remove && removeTokenMatches)) {
mOpen.remove(i);
} else if (item == contains) {
- found = true;
+ if (removeToken != null && removeToken != itemToken) {
+ // We need to update the token. Remove here and let caller reinsert it.
+ mOpen.remove(i);
+ } else {
+ found = true;
+ }
}
}
return found;
@@ -138,7 +189,7 @@ public class RemoteInputController {
// Make a copy because closing the remote inputs will modify mOpen.
ArrayList<NotificationData.Entry> list = new ArrayList<>(mOpen.size());
for (int i = mOpen.size() - 1; i >= 0; i--) {
- NotificationData.Entry item = mOpen.get(i).get();
+ NotificationData.Entry item = mOpen.get(i).first.get();
if (item != null && item.row != null) {
list.add(item);
}
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 4283eb85addb..26a85275c618 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -1719,7 +1719,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
protected void performRemoveNotification(StatusBarNotification n, boolean removeView) {
Entry entry = mNotificationData.get(n.getKey());
if (mRemoteInputController.isRemoteInputActive(entry)) {
- mRemoteInputController.removeRemoteInput(entry);
+ mRemoteInputController.removeRemoteInput(entry, null);
}
super.performRemoveNotification(n, removeView);
}
@@ -2667,7 +2667,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
private void removeRemoteInputEntriesKeptUntilCollapsed() {
for (int i = 0; i < mRemoteInputEntriesToRemoveOnCollapse.size(); i++) {
Entry entry = mRemoteInputEntriesToRemoveOnCollapse.valueAt(i);
- mRemoteInputController.removeRemoteInput(entry);
+ mRemoteInputController.removeRemoteInput(entry, null);
removeNotification(entry.key, mLatestRankingMap);
}
mRemoteInputEntriesToRemoveOnCollapse.clear();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
index ab2a8bc6e92b..7b1f7071b5c7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
@@ -69,6 +69,8 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
// A marker object that let's us easily find views of this class.
public static final Object VIEW_TAG = new Object();
+ public final Object mToken = new Object();
+
private RemoteEditText mEditText;
private ImageButton mSendButton;
private ProgressBar mProgressBar;
@@ -140,8 +142,8 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
mSendButton.setVisibility(INVISIBLE);
mProgressBar.setVisibility(VISIBLE);
mEntry.remoteInputText = mEditText.getText();
- mController.addSpinning(mEntry.key);
- mController.removeRemoteInput(mEntry);
+ mController.addSpinning(mEntry.key, mToken);
+ mController.removeRemoteInput(mEntry, mToken);
mEditText.mShowImeOnInputConnection = false;
mController.remoteInputSent(mEntry);
@@ -193,7 +195,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
}
private void onDefocus(boolean animate) {
- mController.removeRemoteInput(mEntry);
+ mController.removeRemoteInput(mEntry, mToken);
mEntry.remoteInputText = mEditText.getText();
// During removal, we get reattached and lose focus. Not hiding in that
@@ -232,11 +234,11 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
- if (mEntry.row.isChangingPosition()) {
+ if (mEntry.row.isChangingPosition() || isTemporarilyDetached()) {
return;
}
- mController.removeRemoteInput(mEntry);
- mController.removeSpinning(mEntry.key);
+ mController.removeRemoteInput(mEntry, mToken);
+ mController.removeSpinning(mEntry.key, mToken);
}
public void setPendingIntent(PendingIntent pendingIntent) {
@@ -265,7 +267,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
mEntry.notification.getPackageName());
setVisibility(VISIBLE);
- mController.addRemoteInput(mEntry);
+ mController.addRemoteInput(mEntry, mToken);
mEditText.setInnerFocusable(true);
mEditText.mShowImeOnInputConnection = true;
mEditText.setText(mEntry.remoteInputText);
@@ -290,7 +292,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
mEditText.setEnabled(true);
mSendButton.setVisibility(VISIBLE);
mProgressBar.setVisibility(INVISIBLE);
- mController.removeSpinning(mEntry.key);
+ mController.removeSpinning(mEntry.key, mToken);
updateSendButton();
onDefocus(false /* animate */);
@@ -432,6 +434,24 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
mRevealR = r;
}
+ @Override
+ public void dispatchStartTemporaryDetach() {
+ super.dispatchStartTemporaryDetach();
+ // Detach the EditText temporarily such that it doesn't get onDetachedFromWindow and
+ // won't lose IME focus.
+ detachViewFromParent(mEditText);
+ }
+
+ @Override
+ public void dispatchFinishTemporaryDetach() {
+ if (isAttachedToWindow()) {
+ attachViewToParent(mEditText, 0, mEditText.getLayoutParams());
+ } else {
+ removeDetachedView(mEditText, false /* animate */);
+ }
+ super.dispatchFinishTemporaryDetach();
+ }
+
/**
* An EditText that changes appearance based on whether it's focusable and becomes
* un-focusable whenever the user navigates away from it or it becomes invisible.
@@ -448,7 +468,15 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
}
private void defocusIfNeeded(boolean animate) {
- if (mRemoteInputView != null && mRemoteInputView.mEntry.row.isChangingPosition()) {
+ if (mRemoteInputView != null && mRemoteInputView.mEntry.row.isChangingPosition()
+ || isTemporarilyDetached()) {
+ if (isTemporarilyDetached()) {
+ // We might get reattached but then the other one of HUN / expanded might steal
+ // our focus, so we'll need to save our text here.
+ if (mRemoteInputView != null) {
+ mRemoteInputView.mEntry.remoteInputText = getText();
+ }
+ }
return;
}
if (isFocusable() && isEnabled()) {
diff --git a/packages/VpnDialogs/res/values-ro/strings.xml b/packages/VpnDialogs/res/values-ro/strings.xml
index e2e1e44021b0..4865e964fc74 100644
--- a/packages/VpnDialogs/res/values-ro/strings.xml
+++ b/packages/VpnDialogs/res/values-ro/strings.xml
@@ -25,5 +25,5 @@
<string name="duration" msgid="3584782459928719435">"Durată:"</string>
<string name="data_transmitted" msgid="7988167672982199061">"Trimise:"</string>
<string name="data_received" msgid="4062776929376067820">"Primite:"</string>
- <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> octeți/<xliff:g id="NUMBER_1">%2$s</xliff:g> pachete"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> (de) octeți/<xliff:g id="NUMBER_1">%2$s</xliff:g> (de) pachete"</string>
</resources>
diff --git a/services/core/java/com/android/server/AnyMotionDetector.java b/services/core/java/com/android/server/AnyMotionDetector.java
index f93c716ae162..d56492521276 100644
--- a/services/core/java/com/android/server/AnyMotionDetector.java
+++ b/services/core/java/com/android/server/AnyMotionDetector.java
@@ -97,6 +97,15 @@ public class AnyMotionDetector {
/** True if an orientation measurement is in progress. */
private boolean mMeasurementInProgress;
+ /** True if sendMessageDelayed() for the mMeasurementTimeout callback has been scheduled */
+ private boolean mMeasurementTimeoutIsActive;
+
+ /** True if sendMessageDelayed() for the mWakelockTimeout callback has been scheduled */
+ private boolean mWakelockTimeoutIsActive;
+
+ /** True if sendMessageDelayed() for the mSensorRestart callback has been scheduled */
+ private boolean mSensorRestartIsActive;
+
/** The most recent gravity vector. */
private Vector3 mCurrentGravityVector = null;
@@ -118,6 +127,9 @@ public class AnyMotionDetector {
mSensorManager = sm;
mAccelSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMeasurementInProgress = false;
+ mMeasurementTimeoutIsActive = false;
+ mWakelockTimeoutIsActive = false;
+ mSensorRestartIsActive = false;
mState = STATE_INACTIVE;
mCallback = callback;
mThresholdAngle = thresholdAngle;
@@ -146,6 +158,7 @@ public class AnyMotionDetector {
mWakeLock.acquire();
Message wakelockTimeoutMsg = Message.obtain(mHandler, mWakelockTimeout);
mHandler.sendMessageDelayed(wakelockTimeoutMsg, WAKELOCK_TIMEOUT_MILLIS);
+ mWakelockTimeoutIsActive = true;
startOrientationMeasurementLocked();
}
}
@@ -157,17 +170,20 @@ public class AnyMotionDetector {
mState = STATE_INACTIVE;
if (DEBUG) Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE.");
}
+ mHandler.removeCallbacks(mMeasurementTimeout);
+ mHandler.removeCallbacks(mSensorRestart);
+ mMeasurementTimeoutIsActive = false;
+ mSensorRestartIsActive = false;
if (mMeasurementInProgress) {
mMeasurementInProgress = false;
mSensorManager.unregisterListener(mListener);
}
- mHandler.removeCallbacks(mMeasurementTimeout);
- mHandler.removeCallbacks(mSensorRestart);
mCurrentGravityVector = null;
mPreviousGravityVector = null;
if (mWakeLock.isHeld()) {
- mWakeLock.release();
mHandler.removeCallbacks(mWakelockTimeout);
+ mWakelockTimeoutIsActive = false;
+ mWakeLock.release();
}
}
}
@@ -183,6 +199,7 @@ public class AnyMotionDetector {
}
Message measurementTimeoutMsg = Message.obtain(mHandler, mMeasurementTimeout);
mHandler.sendMessageDelayed(measurementTimeoutMsg, ACCELEROMETER_DATA_TIMEOUT_MILLIS);
+ mMeasurementTimeoutIsActive = true;
}
}
@@ -191,8 +208,9 @@ public class AnyMotionDetector {
mMeasurementInProgress);
int status = RESULT_UNKNOWN;
if (mMeasurementInProgress) {
- mSensorManager.unregisterListener(mListener);
mHandler.removeCallbacks(mMeasurementTimeout);
+ mMeasurementTimeoutIsActive = false;
+ mSensorManager.unregisterListener(mListener);
mMeasurementInProgress = false;
mPreviousGravityVector = mCurrentGravityVector;
mCurrentGravityVector = mRunningStats.getRunningAverage();
@@ -213,8 +231,9 @@ public class AnyMotionDetector {
if (DEBUG) Slog.d(TAG, "getStationaryStatus() returned " + status);
if (status != RESULT_UNKNOWN) {
if (mWakeLock.isHeld()) {
- mWakeLock.release();
mHandler.removeCallbacks(mWakelockTimeout);
+ mWakelockTimeoutIsActive = false;
+ mWakeLock.release();
}
if (DEBUG) {
Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE. status = " + status);
@@ -230,6 +249,7 @@ public class AnyMotionDetector {
" milliseconds.");
Message msg = Message.obtain(mHandler, mSensorRestart);
mHandler.sendMessageDelayed(msg, ORIENTATION_MEASUREMENT_INTERVAL_MILLIS);
+ mSensorRestartIsActive = true;
}
}
return status;
@@ -283,6 +303,7 @@ public class AnyMotionDetector {
}
if (status != RESULT_UNKNOWN) {
mHandler.removeCallbacks(mWakelockTimeout);
+ mWakelockTimeoutIsActive = false;
mCallback.onAnyMotionResult(status);
}
}
@@ -296,7 +317,10 @@ public class AnyMotionDetector {
@Override
public void run() {
synchronized (mLock) {
- startOrientationMeasurementLocked();
+ if (mSensorRestartIsActive == true) {
+ mSensorRestartIsActive = false;
+ startOrientationMeasurementLocked();
+ }
}
}
};
@@ -306,14 +330,18 @@ public class AnyMotionDetector {
public void run() {
int status = RESULT_UNKNOWN;
synchronized (mLock) {
- if (DEBUG) Slog.i(TAG, "mMeasurementTimeout. Failed to collect sufficient accel " +
- "data within " + ACCELEROMETER_DATA_TIMEOUT_MILLIS + " ms. Stopping " +
- "orientation measurement.");
- status = stopOrientationMeasurementLocked();
- }
- if (status != RESULT_UNKNOWN) {
- mHandler.removeCallbacks(mWakelockTimeout);
- mCallback.onAnyMotionResult(status);
+ if (mMeasurementTimeoutIsActive == true) {
+ mMeasurementTimeoutIsActive = false;
+ if (DEBUG) Slog.i(TAG, "mMeasurementTimeout. Failed to collect sufficient accel " +
+ "data within " + ACCELEROMETER_DATA_TIMEOUT_MILLIS + " ms. Stopping " +
+ "orientation measurement.");
+ status = stopOrientationMeasurementLocked();
+ if (status != RESULT_UNKNOWN) {
+ mHandler.removeCallbacks(mWakelockTimeout);
+ mWakelockTimeoutIsActive = false;
+ mCallback.onAnyMotionResult(status);
+ }
+ }
}
}
};
@@ -322,7 +350,10 @@ public class AnyMotionDetector {
@Override
public void run() {
synchronized (mLock) {
- stop();
+ if (mWakelockTimeoutIsActive == true) {
+ mWakelockTimeoutIsActive = false;
+ stop();
+ }
}
}
};
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 524c3cc87c8b..b7dfd1962717 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -5501,7 +5501,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
@Override
public String getCaptivePortalServerUrl() {
- return NetworkMonitor.getCaptivePortalServerUrl(mContext);
+ return NetworkMonitor.getCaptivePortalServerHttpUrl(mContext);
}
@Override
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index b623bc790139..41ce26c1763f 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -2313,6 +2313,9 @@ public final class ActivityManagerService extends ActivityManagerNative
} break;
case VR_MODE_CHANGE_MSG: {
VrManagerInternal vrService = LocalServices.getService(VrManagerInternal.class);
+ if (vrService == null) {
+ break;
+ }
final ActivityRecord r = (ActivityRecord) msg.obj;
boolean vrMode;
ComponentName requestedPackage;
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index f78f29c4ac6d..d3826acb7918 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -226,11 +226,12 @@ public final class BroadcastQueue {
}
public final boolean replaceParallelBroadcastLocked(BroadcastRecord r) {
+ final Intent intent = r.intent;
for (int i = mParallelBroadcasts.size() - 1; i >= 0; i--) {
- if (r.intent.filterEquals(mParallelBroadcasts.get(i).intent)) {
+ if (intent.filterEquals(mParallelBroadcasts.get(i).intent)) {
if (DEBUG_BROADCAST) Slog.v(TAG_BROADCAST,
"***** DROPPING PARALLEL ["
- + mQueueName + "]: " + r.intent);
+ + mQueueName + "]: " + intent);
mParallelBroadcasts.set(i, r);
return true;
}
@@ -239,11 +240,12 @@ public final class BroadcastQueue {
}
public final boolean replaceOrderedBroadcastLocked(BroadcastRecord r) {
+ final Intent intent = r.intent;
for (int i = mOrderedBroadcasts.size() - 1; i > 0; i--) {
- if (r.intent.filterEquals(mOrderedBroadcasts.get(i).intent)) {
+ if (intent.filterEquals(mOrderedBroadcasts.get(i).intent)) {
if (DEBUG_BROADCAST) Slog.v(TAG_BROADCAST,
"***** DROPPING ORDERED ["
- + mQueueName + "]: " + r.intent);
+ + mQueueName + "]: " + intent);
mOrderedBroadcasts.set(i, r);
return true;
}
diff --git a/services/core/java/com/android/server/am/CoreSettingsObserver.java b/services/core/java/com/android/server/am/CoreSettingsObserver.java
index 9dd07a9a9f90..73a17c613c4d 100644
--- a/services/core/java/com/android/server/am/CoreSettingsObserver.java
+++ b/services/core/java/com/android/server/am/CoreSettingsObserver.java
@@ -42,6 +42,7 @@ final class CoreSettingsObserver extends ContentObserver {
String, Class<?>>();
static {
sSecureSettingToTypeMap.put(Settings.Secure.LONG_PRESS_TIMEOUT, int.class);
+ sSecureSettingToTypeMap.put(Settings.Secure.MULTI_PRESS_TIMEOUT, int.class);
// add other secure settings here...
sSystemSettingToTypeMap.put(Settings.System.TIME_12_24, String.class);
diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
index 42d80fc6fc48..6eb89facca76 100644
--- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java
+++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
@@ -23,7 +23,6 @@ import static android.net.CaptivePortal.APP_RETURN_WANTED_AS_IS;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
-import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -37,14 +36,12 @@ import android.net.Uri;
import android.net.metrics.IpConnectivityLog;
import android.net.metrics.NetworkEvent;
import android.net.metrics.ValidationProbeEvent;
+import android.net.util.Stopwatch;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
-import android.net.util.Stopwatch;
import android.os.Handler;
import android.os.Message;
-import android.os.Process;
import android.os.SystemClock;
-import android.os.SystemProperties;
import android.os.UserHandle;
import android.provider.Settings;
import android.telephony.CellIdentityCdma;
@@ -66,27 +63,39 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.Protocol;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
-import com.android.internal.util.WakeupMessage;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.MalformedURLException;
-import java.net.UnknownHostException;
import java.net.URL;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicReference;
+import java.net.UnknownHostException;
import java.util.List;
import java.util.Random;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
/**
* {@hide}
*/
public class NetworkMonitor extends StateMachine {
- private static final boolean DBG = false;
private static final String TAG = NetworkMonitor.class.getSimpleName();
- private static final String DEFAULT_SERVER = "connectivitycheck.gstatic.com";
+ private static final boolean DBG = false;
+
+ // Default configuration values for captive portal detection probes.
+ // TODO: append a random length parameter to the default HTTPS url.
+ // TODO: randomize browser version ids in the default User-Agent String.
+ private static final String DEFAULT_HTTPS_URL = "https://www.google.com/generate_204";
+ private static final String DEFAULT_HTTP_URL =
+ "http://connectivitycheck.gstatic.com/generate_204";
+ private static final String DEFAULT_FALLBACK_URL = "http://www.google.com/gen_204";
+ private static final String DEFAULT_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) "
+ + "AppleWebKit/537.36 (KHTML, like Gecko) "
+ + "Chrome/52.0.2743.82 Safari/537.36";
+
private static final int SOCKET_TIMEOUT_MS = 10000;
+ private static final int PROBE_TIMEOUT_MS = 3000;
+
public static final String ACTION_NETWORK_CONDITIONS_MEASURED =
"android.net.conn.NETWORK_CONDITIONS_MEASURED";
public static final String EXTRA_CONNECTIVITY_TYPE = "extra_connectivity_type";
@@ -224,6 +233,9 @@ public class NetworkMonitor extends StateMachine {
private final Stopwatch mEvaluationTimer = new Stopwatch();
+ // This variable is set before transitioning to the mCaptivePortalState.
+ private CaptivePortalProbeResult mLastPortalProbeResult = CaptivePortalProbeResult.FAILED;
+
public NetworkMonitor(Context context, Handler handler, NetworkAgentInfo networkAgentInfo,
NetworkRequest defaultRequest) {
this(context, handler, networkAgentInfo, defaultRequest, new IpConnectivityLog());
@@ -389,6 +401,8 @@ public class NetworkMonitor extends StateMachine {
sendMessage(CMD_CAPTIVE_PORTAL_APP_FINISHED, response);
}
}));
+ intent.putExtra(ConnectivityManager.EXTRA_CAPTIVE_PORTAL_URL,
+ mLastPortalProbeResult.detectUrl);
intent.setFlags(
Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivityAsUser(intent, UserHandle.CURRENT);
@@ -412,14 +426,22 @@ public class NetworkMonitor extends StateMachine {
*/
@VisibleForTesting
public static final class CaptivePortalProbeResult {
- static final CaptivePortalProbeResult FAILED = new CaptivePortalProbeResult(599, null);
+ static final CaptivePortalProbeResult FAILED = new CaptivePortalProbeResult(599);
- final int mHttpResponseCode; // HTTP response code returned from Internet probe.
- final String mRedirectUrl; // Redirect destination returned from Internet probe.
+ private final int mHttpResponseCode; // HTTP response code returned from Internet probe.
+ final String redirectUrl; // Redirect destination returned from Internet probe.
+ final String detectUrl; // URL where a 204 response code indicates
+ // captive portal has been appeased.
- public CaptivePortalProbeResult(int httpResponseCode, String redirectUrl) {
+ public CaptivePortalProbeResult(
+ int httpResponseCode, String redirectUrl, String detectUrl) {
mHttpResponseCode = httpResponseCode;
- mRedirectUrl = redirectUrl;
+ this.redirectUrl = redirectUrl;
+ this.detectUrl = detectUrl;
+ }
+
+ public CaptivePortalProbeResult(int httpResponseCode) {
+ this(httpResponseCode, null, null);
}
boolean isSuccessful() { return mHttpResponseCode == 204; }
@@ -492,7 +514,8 @@ public class NetworkMonitor extends StateMachine {
transitionTo(mValidatedState);
} else if (probeResult.isPortal()) {
mConnectivityServiceHandler.sendMessage(obtainMessage(EVENT_NETWORK_TESTED,
- NETWORK_TEST_RESULT_INVALID, mNetId, probeResult.mRedirectUrl));
+ NETWORK_TEST_RESULT_INVALID, mNetId, probeResult.redirectUrl));
+ mLastPortalProbeResult = probeResult;
transitionTo(mCaptivePortalState);
} else {
final Message msg = obtainMessage(CMD_REEVALUATE, ++mReevaluateToken, 0);
@@ -500,7 +523,7 @@ public class NetworkMonitor extends StateMachine {
logNetworkEvent(NetworkEvent.NETWORK_VALIDATION_FAILED);
mConnectivityServiceHandler.sendMessage(obtainMessage(
EVENT_NETWORK_TESTED, NETWORK_TEST_RESULT_INVALID, mNetId,
- probeResult.mRedirectUrl));
+ probeResult.redirectUrl));
if (mAttempts >= BLAME_FOR_EVALUATION_ATTEMPTS) {
// Don't continue to blame UID forever.
TrafficStats.clearThreadStatsUid();
@@ -585,22 +608,33 @@ public class NetworkMonitor extends StateMachine {
}
}
- private static String getCaptivePortalServerUrl(Context context, boolean isHttps) {
- String server = Settings.Global.getString(context.getContentResolver(),
- Settings.Global.CAPTIVE_PORTAL_SERVER);
- if (server == null) server = DEFAULT_SERVER;
- return (isHttps ? "https" : "http") + "://" + server + "/generate_204";
+ private static String getCaptivePortalServerHttpsUrl(Context context) {
+ return getSetting(context, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL, DEFAULT_HTTPS_URL);
+ }
+
+ public static String getCaptivePortalServerHttpUrl(Context context) {
+ return getSetting(context, Settings.Global.CAPTIVE_PORTAL_HTTP_URL, DEFAULT_HTTP_URL);
}
- public static String getCaptivePortalServerUrl(Context context) {
- return getCaptivePortalServerUrl(context, false);
+ private static String getCaptivePortalFallbackUrl(Context context) {
+ return getSetting(context,
+ Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL, DEFAULT_FALLBACK_URL);
+ }
+
+ private static String getCaptivePortalUserAgent(Context context) {
+ return getSetting(context, Settings.Global.CAPTIVE_PORTAL_USER_AGENT, DEFAULT_USER_AGENT);
+ }
+
+ private static String getSetting(Context context, String symbol, String defaultValue) {
+ final String value = Settings.Global.getString(context.getContentResolver(), symbol);
+ return value != null ? value : defaultValue;
}
@VisibleForTesting
protected CaptivePortalProbeResult isCaptivePortal() {
- if (!mIsCaptivePortalCheckEnabled) return new CaptivePortalProbeResult(204, null);
+ if (!mIsCaptivePortalCheckEnabled) return new CaptivePortalProbeResult(204);
- URL pacUrl = null, httpUrl = null, httpsUrl = null;
+ URL pacUrl = null, httpsUrl = null, httpUrl = null, fallbackUrl = null;
// On networks with a PAC instead of fetching a URL that should result in a 204
// response, we instead simply fetch the PAC script. This is done for a few reasons:
@@ -621,20 +655,17 @@ public class NetworkMonitor extends StateMachine {
// results for network validation.
final ProxyInfo proxyInfo = mNetworkAgentInfo.linkProperties.getHttpProxy();
if (proxyInfo != null && !Uri.EMPTY.equals(proxyInfo.getPacFileUrl())) {
- try {
- pacUrl = new URL(proxyInfo.getPacFileUrl().toString());
- } catch (MalformedURLException e) {
- validationLog("Invalid PAC URL: " + proxyInfo.getPacFileUrl().toString());
+ pacUrl = makeURL(proxyInfo.getPacFileUrl().toString());
+ if (pacUrl == null) {
return CaptivePortalProbeResult.FAILED;
}
}
if (pacUrl == null) {
- try {
- httpUrl = new URL(getCaptivePortalServerUrl(mContext, false));
- httpsUrl = new URL(getCaptivePortalServerUrl(mContext, true));
- } catch (MalformedURLException e) {
- validationLog("Bad validation URL: " + getCaptivePortalServerUrl(mContext, false));
+ httpsUrl = makeURL(getCaptivePortalServerHttpsUrl(mContext));
+ httpUrl = makeURL(getCaptivePortalServerHttpUrl(mContext));
+ fallbackUrl = makeURL(getCaptivePortalFallbackUrl(mContext));
+ if (httpUrl == null || httpsUrl == null) {
return CaptivePortalProbeResult.FAILED;
}
}
@@ -680,7 +711,7 @@ public class NetworkMonitor extends StateMachine {
if (pacUrl != null) {
result = sendHttpProbe(pacUrl, ValidationProbeEvent.PROBE_PAC);
} else if (mUseHttps) {
- result = sendParallelHttpProbes(httpsUrl, httpUrl);
+ result = sendParallelHttpProbes(httpsUrl, httpUrl, fallbackUrl);
} else {
result = sendHttpProbe(httpUrl, ValidationProbeEvent.PROBE_HTTP);
}
@@ -710,6 +741,10 @@ public class NetworkMonitor extends StateMachine {
urlConnection.setConnectTimeout(SOCKET_TIMEOUT_MS);
urlConnection.setReadTimeout(SOCKET_TIMEOUT_MS);
urlConnection.setUseCaches(false);
+ final String userAgent = getCaptivePortalUserAgent(mContext);
+ if (userAgent != null) {
+ urlConnection.setRequestProperty("User-Agent", userAgent);
+ }
// Time how long it takes to get a response to our request
long requestTimestamp = SystemClock.elapsedRealtime();
@@ -755,28 +790,24 @@ public class NetworkMonitor extends StateMachine {
}
}
logValidationProbe(probeTimer.stop(), probeType, httpResponseCode);
- return new CaptivePortalProbeResult(httpResponseCode, redirectUrl);
+ return new CaptivePortalProbeResult(httpResponseCode, redirectUrl, url.toString());
}
- private CaptivePortalProbeResult sendParallelHttpProbes(URL httpsUrl, URL httpUrl) {
- // Number of probes to wait for. We might wait for all of them, but we might also return if
- // only one of them has replied. For example, we immediately return if the HTTP probe finds
- // a captive portal, even if the HTTPS probe is timing out.
+ private CaptivePortalProbeResult sendParallelHttpProbes(
+ URL httpsUrl, URL httpUrl, URL fallbackUrl) {
+ // Number of probes to wait for. If a probe completes with a conclusive answer
+ // it shortcuts the latch immediately by forcing the count to 0.
final CountDownLatch latch = new CountDownLatch(2);
- // Which probe result we're going to use. This doesn't need to be atomic, but it does need
- // to be final because otherwise we can't set it from the ProbeThreads.
- final AtomicReference<CaptivePortalProbeResult> finalResult = new AtomicReference<>();
-
final class ProbeThread extends Thread {
private final boolean mIsHttps;
- private volatile CaptivePortalProbeResult mResult;
+ private volatile CaptivePortalProbeResult mResult = CaptivePortalProbeResult.FAILED;
public ProbeThread(boolean isHttps) {
mIsHttps = isHttps;
}
- public CaptivePortalProbeResult getResult() {
+ public CaptivePortalProbeResult result() {
return mResult;
}
@@ -788,32 +819,66 @@ public class NetworkMonitor extends StateMachine {
mResult = sendHttpProbe(httpUrl, ValidationProbeEvent.PROBE_HTTP);
}
if ((mIsHttps && mResult.isSuccessful()) || (!mIsHttps && mResult.isPortal())) {
- // HTTPS succeeded, or HTTP found a portal. Don't wait for the other probe.
- finalResult.compareAndSet(null, mResult);
- latch.countDown();
+ // Stop waiting immediately if https succeeds or if http finds a portal.
+ while (latch.getCount() > 0) {
+ latch.countDown();
+ }
}
- // Signal that one probe has completed. If we've already made a decision, or if this
- // is the second probe, the latch will be at zero and we'll return a result.
+ // Signal this probe has completed.
latch.countDown();
}
}
- ProbeThread httpsProbe = new ProbeThread(true);
- ProbeThread httpProbe = new ProbeThread(false);
- httpsProbe.start();
- httpProbe.start();
+ final ProbeThread httpsProbe = new ProbeThread(true);
+ final ProbeThread httpProbe = new ProbeThread(false);
try {
- latch.await();
+ httpsProbe.start();
+ httpProbe.start();
+ latch.await(PROBE_TIMEOUT_MS, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
- validationLog("Error: probe wait interrupted!");
+ validationLog("Error: probes wait interrupted!");
return CaptivePortalProbeResult.FAILED;
}
- // If there was no deciding probe, that means that both probes completed. Return HTTPS.
- finalResult.compareAndSet(null, httpsProbe.getResult());
+ final CaptivePortalProbeResult httpsResult = httpsProbe.result();
+ final CaptivePortalProbeResult httpResult = httpProbe.result();
+
+ // Look for a conclusive probe result first.
+ if (httpResult.isPortal()) {
+ return httpResult;
+ }
+ // httpsResult.isPortal() is not expected, but check it nonetheless.
+ if (httpsResult.isPortal() || httpsResult.isSuccessful()) {
+ return httpsResult;
+ }
+ // If a fallback url is specified, use a fallback probe to try again portal detection.
+ if (fallbackUrl != null) {
+ CaptivePortalProbeResult result =
+ sendHttpProbe(fallbackUrl, ValidationProbeEvent.PROBE_FALLBACK);
+ if (result.isPortal()) {
+ return result;
+ }
+ }
+ // Otherwise wait until https probe completes and use its result.
+ try {
+ httpsProbe.join();
+ } catch (InterruptedException e) {
+ validationLog("Error: https probe wait interrupted!");
+ return CaptivePortalProbeResult.FAILED;
+ }
+ return httpsProbe.result();
+ }
- return finalResult.get();
+ private URL makeURL(String url) {
+ if (url != null) {
+ try {
+ return new URL(url);
+ } catch (MalformedURLException e) {
+ validationLog("Bad URL: " + url);
+ }
+ }
+ return null;
}
/**
diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
index 15ae846186fa..a3febd63e2ed 100644
--- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java
+++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
@@ -50,13 +50,7 @@ class AutomaticBrightnessController {
// If true, enables the use of the screen auto-brightness adjustment setting.
private static final boolean USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT = true;
- // Hysteresis constraints for brightening or darkening.
- // The recent lux must have changed by at least this fraction relative to the
- // current ambient lux before a change will be considered.
- private static final float BRIGHTENING_LIGHT_HYSTERESIS = 0.10f;
- private static final float DARKENING_LIGHT_HYSTERESIS = 0.20f;
-
- // How long the current sensor reading is assumed to be valid beyond the current time.
+ // How long the current sensor reading is assumed to be valid beyond the current time.
// This provides a bit of prediction, as well as ensures that the weight for the last sample is
// non-zero, which in turn ensures that the total weight is non-zero.
private static final long AMBIENT_LIGHT_PREDICTION_TIME_MILLIS = 100;
@@ -71,7 +65,7 @@ class AutomaticBrightnessController {
private static final int MSG_UPDATE_AMBIENT_LUX = 1;
private static final int MSG_BRIGHTNESS_ADJUSTMENT_SAMPLE = 2;
- // Callbacks for requesting updates to the the display's power state
+ // Callbacks for requesting updates to the display's power state
private final Callbacks mCallbacks;
// The sensor manager.
@@ -115,6 +109,9 @@ class AutomaticBrightnessController {
// weighting values positive.
private final int mWeightingIntercept;
+ // accessor object for determining thresholds to change brightness dynamically
+ private final HysteresisLevels mDynamicHysteresis;
+
// Amount of time to delay auto-brightness after screen on while waiting for
// the light sensor to warm-up in milliseconds.
// May be 0 if no warm-up is required.
@@ -190,7 +187,8 @@ class AutomaticBrightnessController {
int brightnessMin, int brightnessMax, float dozeScaleFactor,
int lightSensorRate, long brighteningLightDebounceConfig,
long darkeningLightDebounceConfig, boolean resetAmbientLuxAfterWarmUpConfig,
- int ambientLightHorizon, float autoBrightnessAdjustmentMaxGamma ) {
+ int ambientLightHorizon, float autoBrightnessAdjustmentMaxGamma,
+ HysteresisLevels dynamicHysteresis) {
mCallbacks = callbacks;
mTwilight = LocalServices.getService(TwilightManager.class);
mSensorManager = sensorManager;
@@ -206,6 +204,7 @@ class AutomaticBrightnessController {
mAmbientLightHorizon = ambientLightHorizon;
mWeightingIntercept = ambientLightHorizon;
mScreenAutoBrightnessAdjustmentMaxGamma = autoBrightnessAdjustmentMaxGamma;
+ mDynamicHysteresis = dynamicHysteresis;
mHandler = new AutomaticBrightnessHandler(looper);
mAmbientLightRingBuffer =
@@ -344,8 +343,8 @@ class AutomaticBrightnessController {
private void setAmbientLux(float lux) {
mAmbientLux = lux;
- mBrighteningLuxThreshold = mAmbientLux * (1.0f + BRIGHTENING_LIGHT_HYSTERESIS);
- mDarkeningLuxThreshold = mAmbientLux * (1.0f - DARKENING_LIGHT_HYSTERESIS);
+ mBrighteningLuxThreshold = mDynamicHysteresis.getBrighteningThreshold(lux);
+ mDarkeningLuxThreshold = mDynamicHysteresis.getDarkeningThreshold(lux);
}
private float calculateAmbientLux(long now) {
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 61af8edebb83..df5def9ad9b9 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -72,7 +72,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
private static final String TAG = "DisplayPowerController";
private static final String SCREEN_ON_BLOCKED_TRACE_NAME = "Screen on blocked";
- private static boolean DEBUG = false;
+ private static final boolean DEBUG = false;
private static final boolean DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT = false;
// If true, uses the color fade on animation.
@@ -102,9 +102,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// Trigger proximity if distance is less than 5 cm.
private static final float TYPICAL_PROXIMITY_THRESHOLD = 5.0f;
- // Brightness animation ramp rate in brightness units per second.
- private static final int BRIGHTNESS_RAMP_RATE_SLOW = 40;
-
private static final int REPORTED_TO_POLICY_SCREEN_OFF = 0;
private static final int REPORTED_TO_POLICY_SCREEN_TURNING_ON = 1;
private static final int REPORTED_TO_POLICY_SCREEN_ON = 2;
@@ -243,8 +240,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
private boolean mAppliedDimming;
private boolean mAppliedLowPower;
- // Brightness ramp rate fast.
+ // Brightness animation ramp rates in brightness units per second
private final int mBrightnessRampRateFast;
+ private final int mBrightnessRampRateSlow;
// The controller for the automatic brightness level.
private AutomaticBrightnessController mAutomaticBrightnessController;
@@ -307,6 +305,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mBrightnessRampRateFast = resources.getInteger(
com.android.internal.R.integer.config_brightness_ramp_rate_fast);
+ mBrightnessRampRateSlow = resources.getInteger(
+ com.android.internal.R.integer.config_brightness_ramp_rate_slow);
int lightSensorRate = resources.getInteger(
com.android.internal.R.integer.config_autoBrightnessLightSensorRate);
@@ -322,6 +322,15 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
com.android.internal.R.fraction.config_autoBrightnessAdjustmentMaxGamma,
1, 1);
+ int[] brightLevels = resources.getIntArray(
+ com.android.internal.R.array.config_dynamicHysteresisBrightLevels);
+ int[] darkLevels = resources.getIntArray(
+ com.android.internal.R.array.config_dynamicHysteresisDarkLevels);
+ int[] luxLevels = resources.getIntArray(
+ com.android.internal.R.array.config_dynamicHysteresisLuxLevels);
+ HysteresisLevels dynamicHysteresis = new HysteresisLevels(
+ brightLevels, darkLevels, luxLevels);
+
if (mUseSoftwareAutoBrightnessConfig) {
int[] lux = resources.getIntArray(
com.android.internal.R.array.config_autoBrightnessLevels);
@@ -358,8 +367,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
lightSensorWarmUpTimeConfig, screenBrightnessRangeMinimum,
mScreenBrightnessRangeMaximum, dozeScaleFactor, lightSensorRate,
brighteningLightDebounce, darkeningLightDebounce,
- autoBrightnessResetAmbientLuxAfterWarmUp,
- ambientLightHorizon, autoBrightnessAdjustmentMaxGamma);
+ autoBrightnessResetAmbientLuxAfterWarmUp, ambientLightHorizon,
+ autoBrightnessAdjustmentMaxGamma, dynamicHysteresis);
}
}
@@ -703,7 +712,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
if (!mPendingScreenOff) {
if (state == Display.STATE_ON || state == Display.STATE_DOZE) {
animateScreenBrightness(brightness,
- slowChange ? BRIGHTNESS_RAMP_RATE_SLOW : mBrightnessRampRateFast);
+ slowChange ? mBrightnessRampRateSlow : mBrightnessRampRateFast);
} else {
animateScreenBrightness(brightness, 0);
}
diff --git a/services/core/java/com/android/server/display/HysteresisLevels.java b/services/core/java/com/android/server/display/HysteresisLevels.java
new file mode 100644
index 000000000000..b06222563811
--- /dev/null
+++ b/services/core/java/com/android/server/display/HysteresisLevels.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2016 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.server.display;
+
+import android.util.Slog;
+
+/**
+ * A helper class for handling access to illuminance hysteresis level values.
+ */
+final class HysteresisLevels {
+ private static final String TAG = "HysteresisLevels";
+
+ // Default hysteresis constraints for brightening or darkening.
+ // The recent lux must have changed by at least this fraction relative to the
+ // current ambient lux before a change will be considered.
+ private static final float DEFAULT_BRIGHTENING_HYSTERESIS = 0.10f;
+ private static final float DEFAULT_DARKENING_HYSTERESIS = 0.20f;
+
+ private static final boolean DEBUG = false;
+
+ private final float[] mBrightLevels;
+ private final float[] mDarkLevels;
+ private final float[] mLuxLevels;
+
+ /**
+ * Creates a {@code HysteresisLevels} object with the given equal-length
+ * integer arrays.
+ * @param brightLevels an array of brightening hysteresis constraint constants
+ * @param darkLevels an array of darkening hysteresis constraint constants
+ * @param luxLevels a monotonically increasing array of illuminance
+ * thresholds in units of lux
+ */
+ public HysteresisLevels(int[] brightLevels, int[] darkLevels, int[] luxLevels) {
+ if (brightLevels.length != darkLevels.length || darkLevels.length != luxLevels.length + 1) {
+ throw new IllegalArgumentException("Mismatch between hysteresis array lengths.");
+ }
+ mBrightLevels = setArrayFormat(brightLevels, 1000.0f);
+ mDarkLevels = setArrayFormat(darkLevels, 1000.0f);
+ mLuxLevels = setArrayFormat(luxLevels, 1.0f);
+ }
+
+ /**
+ * Return the brightening hysteresis threshold for the given lux level.
+ */
+ public float getBrighteningThreshold(float lux) {
+ float brightConstant = getReferenceLevel(lux, mBrightLevels);
+ float brightThreshold = lux * (1.0f + brightConstant);
+ if (DEBUG) {
+ Slog.d(TAG, "bright hysteresis constant=: " + brightConstant + ", threshold="
+ + brightThreshold + ", lux=" + lux);
+ }
+ return brightThreshold;
+ }
+
+ /**
+ * Return the darkening hysteresis threshold for the given lux level.
+ */
+ public float getDarkeningThreshold(float lux) {
+ float darkConstant = getReferenceLevel(lux, mDarkLevels);
+ float darkThreshold = lux * (1.0f - darkConstant);
+ if (DEBUG) {
+ Slog.d(TAG, "dark hysteresis constant=: " + darkConstant + ", threshold="
+ + darkThreshold + ", lux=" + lux);
+ }
+ return darkThreshold;
+ }
+
+ /**
+ * Return the hysteresis constant for the closest lux threshold value to the
+ * current illuminance from the given array.
+ */
+ private float getReferenceLevel(float lux, float[] referenceLevels) {
+ int index = 0;
+ while (mLuxLevels.length > index && lux >= mLuxLevels[index]) {
+ ++index;
+ }
+ return referenceLevels[index];
+ }
+
+ /**
+ * Return a float array where each i-th element equals {@code configArray[i]/divideFactor}.
+ */
+ private float[] setArrayFormat(int[] configArray, float divideFactor) {
+ float[] levelArray = new float[configArray.length];
+ for (int index = 0; levelArray.length > index; ++index) {
+ levelArray[index] = (float)configArray[index] / divideFactor;
+ }
+ return levelArray;
+ }
+}
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
index 07048a491543..ca6481792dfe 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -172,10 +172,12 @@ public class LightsService extends SystemService {
if (phase == PHASE_SYSTEM_SERVICES_READY) {
IVrManager vrManager =
(IVrManager) getBinderService(VrManagerService.VR_MANAGER_BINDER_SERVICE);
- try {
- vrManager.registerListener(mVrStateCallbacks);
- } catch (RemoteException e) {
- Slog.e(TAG, "Failed to register VR mode state listener: " + e);
+ if (vrManager != null) {
+ try {
+ vrManager.registerListener(mVrStateCallbacks);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Failed to register VR mode state listener: " + e);
+ }
}
}
}
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index d479bfc181da..7545959fcce5 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -1020,7 +1020,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
*/
private void notifyOverLimitNL(NetworkTemplate template) {
if (!mOverLimitNotified.contains(template)) {
- mContext.startActivity(buildNetworkOverLimitIntent(template));
+ mContext.startActivity(buildNetworkOverLimitIntent(mContext.getResources(), template));
mOverLimitNotified.add(template);
}
}
@@ -1066,7 +1066,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
builder.setDeleteIntent(PendingIntent.getBroadcast(
mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT));
- final Intent viewIntent = buildViewDataUsageIntent(policy.template);
+ final Intent viewIntent = buildViewDataUsageIntent(res, policy.template);
builder.setContentIntent(PendingIntent.getActivity(
mContext, 0, viewIntent, PendingIntent.FLAG_UPDATE_CURRENT));
@@ -1102,7 +1102,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
builder.setContentTitle(title);
builder.setContentText(body);
- final Intent intent = buildNetworkOverLimitIntent(policy.template);
+ final Intent intent = buildNetworkOverLimitIntent(res, policy.template);
builder.setContentIntent(PendingIntent.getActivity(
mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT));
break;
@@ -1137,7 +1137,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
builder.setContentTitle(title);
builder.setContentText(body);
- final Intent intent = buildViewDataUsageIntent(policy.template);
+ final Intent intent = buildViewDataUsageIntent(res, policy.template);
builder.setContentIntent(PendingIntent.getActivity(
mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT));
break;
@@ -3594,19 +3594,19 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
return intent;
}
- private static Intent buildNetworkOverLimitIntent(NetworkTemplate template) {
+ private static Intent buildNetworkOverLimitIntent(Resources res, NetworkTemplate template) {
final Intent intent = new Intent();
- intent.setComponent(new ComponentName(
- "com.android.systemui", "com.android.systemui.net.NetworkOverLimitActivity"));
+ intent.setComponent(ComponentName.unflattenFromString(
+ res.getString(R.string.config_networkOverLimitComponent)));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(EXTRA_NETWORK_TEMPLATE, template);
return intent;
}
- private static Intent buildViewDataUsageIntent(NetworkTemplate template) {
+ private static Intent buildViewDataUsageIntent(Resources res, NetworkTemplate template) {
final Intent intent = new Intent();
- intent.setComponent(new ComponentName(
- "com.android.settings", "com.android.settings.Settings$DataUsageSummaryActivity"));
+ intent.setComponent(ComponentName.unflattenFromString(
+ res.getString(R.string.config_dataUsageSummaryComponent)));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(EXTRA_NETWORK_TEMPLATE, template);
return intent;
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index eb85f191304e..b1468f182fd3 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -140,7 +140,6 @@ import com.android.server.lights.LightsManager;
import com.android.server.notification.ManagedServices.ManagedServiceInfo;
import com.android.server.policy.PhoneWindowManager;
import com.android.server.statusbar.StatusBarManagerInternal;
-import com.android.server.vr.VrManagerInternal;
import com.android.server.notification.ManagedServices.UserProfiles;
import libcore.io.IoUtils;
@@ -232,7 +231,6 @@ public class NotificationManagerService extends SystemService {
AudioManagerInternal mAudioManagerInternal;
@Nullable StatusBarManagerInternal mStatusBar;
Vibrator mVibrator;
- private VrManagerInternal mVrManagerInternal;
private WindowManagerInternal mWindowManagerInternal;
final IBinder mForegroundToken = new Binder();
@@ -1128,7 +1126,6 @@ public class NotificationManagerService extends SystemService {
// Grab our optional AudioService
mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
mAudioManagerInternal = getLocalService(AudioManagerInternal.class);
- mVrManagerInternal = getLocalService(VrManagerInternal.class);
mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class);
mZenModeHelper.onSystemReady();
} else if (phase == SystemService.PHASE_THIRD_PARTY_APPS_CAN_START) {
diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
index ded85f3da3d6..33c297d2c907 100644
--- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
@@ -150,6 +150,9 @@ final class DefaultPermissionGrantPolicy {
private static final int MSG_READ_DEFAULT_PERMISSION_EXCEPTIONS = 1;
+ private static final String ACTION_TWINNING =
+ "com.google.android.clockwork.intent.TWINNING_SETTINGS";
+
private final PackageManagerService mService;
private final Handler mHandler;
@@ -603,8 +606,9 @@ final class DefaultPermissionGrantPolicy {
grantRuntimePermissionsLPw(musicPackage, STORAGE_PERMISSIONS, userId);
}
- // Android Wear Home
+ // Android Wear
if (mService.hasSystemFeature(PackageManager.FEATURE_WATCH, 0)) {
+ // Android Wear Home
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME_MAIN);
@@ -621,6 +625,17 @@ final class DefaultPermissionGrantPolicy {
grantRuntimePermissionsLPw(wearHomePackage, LOCATION_PERMISSIONS, false,
userId);
}
+
+ // Android Wear Twinning
+ Intent twinningIntent = new Intent(ACTION_TWINNING);
+ PackageParser.Package twinningPackage = getDefaultSystemHandlerActivityPackageLPr(
+ twinningIntent, userId);
+
+ if (twinningPackage != null
+ && doesPackageSupportRuntimePermissions(twinningPackage)) {
+ grantRuntimePermissionsLPw(twinningPackage, PHONE_PERMISSIONS, false, userId);
+ grantRuntimePermissionsLPw(twinningPackage, SMS_PERMISSIONS, false, userId);
+ }
}
// Print Spooler
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index e5ddfd09d82b..b6cecc94aecb 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -1147,14 +1147,15 @@ class PackageManagerShellCommand extends ShellCommand {
private int doWriteSplit(int sessionId, String inPath, long sizeBytes, String splitName,
boolean logSuccess) throws RemoteException {
final PrintWriter pw = getOutPrintWriter();
- if ("-".equals(inPath)) {
- inPath = null;
- } else if (inPath != null) {
- final File file = new File(inPath);
- if (file.isFile()) {
- sizeBytes = file.length();
- }
+ if (sizeBytes <= 0) {
+ pw.println("Error: must specify a APK size");
+ return 1;
+ }
+ if (inPath != null && !"-".equals(inPath)) {
+ pw.println("Error: APK content must be streamed");
+ return 1;
}
+ inPath = null;
final SessionInfo info = mInterface.getPackageInstaller().getSessionInfo(sessionId);
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 7162b9466a56..b623dd5d6867 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -200,6 +200,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
static final int MULTI_PRESS_POWER_THEATER_MODE = 1;
static final int MULTI_PRESS_POWER_BRIGHTNESS_BOOST = 2;
+ // Number of presses needed before we induce panic press behavior on the back button
+ static final int PANIC_PRESS_BACK_COUNT = 4;
+ static final int PANIC_PRESS_BACK_NOTHING = 0;
+ static final int PANIC_PRESS_BACK_HOME = 1;
+
// These need to match the documentation/constant in
// core/res/res/values/config.xml
static final int LONG_PRESS_HOME_NOTHING = 0;
@@ -409,6 +414,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
volatile boolean mBackKeyHandled;
volatile boolean mBeganFromNonInteractive;
volatile int mPowerKeyPressCounter;
+ volatile int mBackKeyPressCounter;
volatile boolean mEndCallKeyHandled;
volatile boolean mCameraGestureTriggeredDuringGoingToSleep;
volatile boolean mGoingToSleep;
@@ -467,6 +473,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
int mDoublePressOnPowerBehavior;
int mTriplePressOnPowerBehavior;
int mLongPressOnBackBehavior;
+ int mPanicPressOnBackBehavior;
int mShortPressOnSleepBehavior;
int mShortPressWindowBehavior;
boolean mAwake;
@@ -640,6 +647,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// (See Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR.)
int mIncallPowerBehavior;
+ // Behavior of Back button while in-call and screen on
+ int mIncallBackBehavior;
+
Display mDisplay;
private int mDisplayRotation;
@@ -729,6 +739,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private static final int MSG_SHOW_TV_PICTURE_IN_PICTURE_MENU = 17;
private static final int MSG_BACK_LONG_PRESS = 18;
private static final int MSG_DISPOSE_INPUT_CONSUMER = 19;
+ private static final int MSG_BACK_DELAYED_PRESS = 20;
private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0;
private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1;
@@ -795,10 +806,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
break;
case MSG_BACK_LONG_PRESS:
backLongPress();
+ finishBackKeyPress();
break;
case MSG_DISPOSE_INPUT_CONSUMER:
disposeInputConsumer((InputConsumer) msg.obj);
break;
+ case MSG_BACK_DELAYED_PRESS:
+ backMultiPressAction((Long) msg.obj, msg.arg1);
+ finishBackKeyPress();
+ break;
}
}
}
@@ -825,6 +841,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR), false, this,
UserHandle.USER_ALL);
resolver.registerContentObserver(Settings.Secure.getUriFor(
+ Settings.Secure.INCALL_BACK_BUTTON_BEHAVIOR), false, this,
+ UserHandle.USER_ALL);
+ resolver.registerContentObserver(Settings.Secure.getUriFor(
Settings.Secure.WAKE_GESTURE_ENABLED), false, this,
UserHandle.USER_ALL);
resolver.registerContentObserver(Settings.System.getUriFor(
@@ -1013,6 +1032,73 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}
+ private void interceptBackKeyDown() {
+ // Reset back key state for long press
+ mBackKeyHandled = false;
+
+ // Cancel multi-press detection timeout.
+ if (hasPanicPressOnBackBehavior()) {
+ if (mBackKeyPressCounter != 0
+ && mBackKeyPressCounter < PANIC_PRESS_BACK_COUNT) {
+ mHandler.removeMessages(MSG_BACK_DELAYED_PRESS);
+ }
+ }
+
+ if (hasLongPressOnBackBehavior()) {
+ Message msg = mHandler.obtainMessage(MSG_BACK_LONG_PRESS);
+ msg.setAsynchronous(true);
+ mHandler.sendMessageDelayed(msg,
+ ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout());
+ }
+ }
+
+ // returns true if the key was handled and should not be passed to the user
+ private boolean interceptBackKeyUp(KeyEvent event) {
+ // Cache handled state
+ boolean handled = mBackKeyHandled;
+
+ if (hasPanicPressOnBackBehavior()) {
+ // Check for back key panic press
+ ++mBackKeyPressCounter;
+
+ final long eventTime = event.getDownTime();
+
+ if (mBackKeyPressCounter <= PANIC_PRESS_BACK_COUNT) {
+ // This could be a multi-press. Wait a little bit longer to confirm.
+ Message msg = mHandler.obtainMessage(MSG_BACK_DELAYED_PRESS,
+ mBackKeyPressCounter, 0, eventTime);
+ msg.setAsynchronous(true);
+ mHandler.sendMessageDelayed(msg, ViewConfiguration.getMultiPressTimeout());
+ }
+ }
+
+ // Reset back long press state
+ cancelPendingBackKeyAction();
+
+ if (mHasFeatureWatch) {
+ TelecomManager telecomManager = getTelecommService();
+
+ if (telecomManager != null) {
+ if (telecomManager.isRinging()) {
+ // Pressing back while there's a ringing incoming
+ // call should silence the ringer.
+ telecomManager.silenceRinger();
+
+ // It should not prevent navigating away
+ return false;
+ } else if (
+ (mIncallBackBehavior & Settings.Secure.INCALL_BACK_BUTTON_BEHAVIOR_HANGUP) != 0
+ && telecomManager.isInCall()) {
+ // Otherwise, if "Back button ends call" is enabled,
+ // the Back button will hang up any current active call.
+ return telecomManager.endCall();
+ }
+ }
+ }
+
+ return handled;
+ }
+
private void interceptPowerKeyDown(KeyEvent event, boolean interactive) {
// Hold a wake lock until the power key is released.
if (!mPowerKeyWakeLock.isHeld()) {
@@ -1143,6 +1229,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}
+ private void finishBackKeyPress() {
+ mBackKeyPressCounter = 0;
+ }
+
private void cancelPendingPowerKeyAction() {
if (!mPowerKeyHandled) {
mPowerKeyHandled = true;
@@ -1157,6 +1247,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}
+ private void backMultiPressAction(long eventTime, int count) {
+ if (count >= PANIC_PRESS_BACK_COUNT) {
+ switch (mPanicPressOnBackBehavior) {
+ case PANIC_PRESS_BACK_NOTHING:
+ break;
+ case PANIC_PRESS_BACK_HOME:
+ launchHomeFromHotKey();
+ break;
+ }
+ }
+ }
+
private void powerPress(long eventTime, boolean interactive, int count) {
if (mScreenOnEarly && !mScreenOnFully) {
Slog.i(TAG, "Suppressed redundant power key press while "
@@ -1315,6 +1417,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
return mLongPressOnBackBehavior != LONG_PRESS_BACK_NOTHING;
}
+ private boolean hasPanicPressOnBackBehavior() {
+ return mPanicPressOnBackBehavior != PANIC_PRESS_BACK_NOTHING;
+ }
+
private void interceptScreenshotChord() {
if (mScreenshotChordEnabled
&& mScreenshotChordVolumeDownKeyTriggered && mScreenshotChordPowerKeyTriggered
@@ -1642,6 +1748,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mLongPressOnBackBehavior = mContext.getResources().getInteger(
com.android.internal.R.integer.config_longPressOnBackBehavior);
+ mPanicPressOnBackBehavior = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_backPanicBehavior);
mShortPressOnPowerBehavior = mContext.getResources().getInteger(
com.android.internal.R.integer.config_shortPressOnPowerBehavior);
@@ -1939,6 +2047,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT,
UserHandle.USER_CURRENT);
+ mIncallBackBehavior = Settings.Secure.getIntForUser(resolver,
+ Settings.Secure.INCALL_BACK_BUTTON_BEHAVIOR,
+ Settings.Secure.INCALL_BACK_BUTTON_BEHAVIOR_DEFAULT,
+ UserHandle.USER_CURRENT);
// Configure wake gesture.
boolean wakeGestureEnabledSetting = Settings.Secure.getIntForUser(resolver,
@@ -5663,20 +5775,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK: {
if (down) {
- mBackKeyHandled = false;
- if (hasLongPressOnBackBehavior()) {
- Message msg = mHandler.obtainMessage(MSG_BACK_LONG_PRESS);
- msg.setAsynchronous(true);
- mHandler.sendMessageDelayed(msg,
- ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout());
- }
+ interceptBackKeyDown();
} else {
- boolean handled = mBackKeyHandled;
-
- // Reset back key state
- cancelPendingBackKeyAction();
+ boolean handled = interceptBackKeyUp(event);
- // Don't pass back press to app if we've already handled it
+ // Don't pass back press to app if we've already handled it via long press
if (handled) {
result &= ~ACTION_PASS_TO_USER;
}
@@ -7992,6 +8095,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
pw.print(" mLockScreenTimerActive="); pw.println(mLockScreenTimerActive);
pw.print(prefix); pw.print("mEndcallBehavior="); pw.print(mEndcallBehavior);
pw.print(" mIncallPowerBehavior="); pw.print(mIncallPowerBehavior);
+ pw.print(" mIncallBackBehavior="); pw.print(mIncallBackBehavior);
pw.print(" mLongPressOnHomeBehavior="); pw.println(mLongPressOnHomeBehavior);
pw.print(prefix); pw.print("mLandscapeRotation="); pw.print(mLandscapeRotation);
pw.print(" mSeascapeRotation="); pw.println(mSeascapeRotation);
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 01288b81a6c5..554696d666c5 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -669,10 +669,12 @@ public final class PowerManagerService extends SystemService
false, mSettingsObserver, UserHandle.USER_ALL);
IVrManager vrManager =
(IVrManager) getBinderService(VrManagerService.VR_MANAGER_BINDER_SERVICE);
- try {
- vrManager.registerListener(mVrStateCallbacks);
- } catch (RemoteException e) {
- Slog.e(TAG, "Failed to register VR mode state listener: " + e);
+ if (vrManager != null) {
+ try {
+ vrManager.registerListener(mVrStateCallbacks);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Failed to register VR mode state listener: " + e);
+ }
}
// Go.
readConfigurationLocked();
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index c2ffa9bbab15..fc14444ba6ef 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -496,6 +496,12 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
}
});
}
+ // STOPSHIP: Remove this code once all dogfood devices are fixed. See b/31754835
+ if (Intent.ACTION_BOOT_COMPLETED.equals(action) && !mOwners.hasDeviceOwner()
+ && !isBackupServiceEnabledInternal()) {
+ setBackupServiceEnabledInternal(true);
+ Slog.w(LOG_TAG, "Fix backup for device that is not in Device Owner mode.");
+ }
if (Intent.ACTION_USER_UNLOCKED.equals(action)
|| Intent.ACTION_USER_STARTED.equals(action)
|| KeyChain.ACTION_STORAGE_CHANGED.equals(action)) {
@@ -6005,8 +6011,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
updateDeviceOwnerLocked();
disableDeviceOwnerManagedSingleUserFeaturesIfNeeded();
try {
- // Reactivate backup service.
- mInjector.getIBackupManager().setBackupServiceActive(UserHandle.USER_SYSTEM, true);
+ if (mInjector.getIBackupManager() != null) {
+ // Reactivate backup service.
+ mInjector.getIBackupManager().setBackupServiceActive(UserHandle.USER_SYSTEM, true);
+ }
} catch (RemoteException e) {
throw new IllegalStateException("Failed reactivating backup service.", e);
}
@@ -8981,8 +8989,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
if (!isDeviceOwnerManagedSingleUserDevice()) {
mInjector.securityLogSetLoggingEnabledProperty(false);
Slog.w(LOG_TAG, "Security logging turned off as it's no longer a single user device.");
- setBackupServiceEnabledInternal(false);
- Slog.w(LOG_TAG, "Backup is off as it's a managed device that has more that one user.");
+ if (mOwners.hasDeviceOwner()) {
+ setBackupServiceEnabledInternal(false);
+ Slog.w(LOG_TAG, "Backup is off as it's a managed device that has more that one user.");
+ }
}
}
@@ -9317,12 +9327,15 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
}
synchronized (this) {
getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
- try {
- IBackupManager ibm = mInjector.getIBackupManager();
- return ibm != null && ibm.isBackupServiceActive(UserHandle.USER_SYSTEM);
- } catch (RemoteException e) {
- throw new IllegalStateException("Failed requesting backup service state.", e);
- }
+ return isBackupServiceEnabledInternal();
+ }
+ }
+ private boolean isBackupServiceEnabledInternal() {
+ try {
+ IBackupManager ibm = mInjector.getIBackupManager();
+ return ibm != null && ibm.isBackupServiceActive(UserHandle.USER_SYSTEM);
+ } catch (RemoteException e) {
+ throw new IllegalStateException("Failed requesting backup service state.", e);
}
}
}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 7ebdd3109a2c..0de6b7790856 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -549,9 +549,15 @@ public final class SystemServer {
false);
boolean disableTrustManager = SystemProperties.getBoolean("config.disable_trustmanager",
false);
- boolean disableTextServices = SystemProperties.getBoolean("config.disable_textservices", false);
+ boolean disableTextServices = SystemProperties.getBoolean("config.disable_textservices",
+ false);
boolean disableSamplingProfiler = SystemProperties.getBoolean("config.disable_samplingprof",
false);
+ boolean disableConsumerIr = SystemProperties.getBoolean("config.disable_consumerir", false);
+ boolean disableVrManager = SystemProperties.getBoolean("config.disable_vrmanager", false);
+ boolean disableCameraService = SystemProperties.getBoolean("config.disable_cameraservice",
+ false);
+
boolean isEmulator = SystemProperties.get("ro.kernel.qemu").equals("1");
try {
@@ -575,8 +581,10 @@ public final class SystemServer {
mContentResolver = context.getContentResolver();
- Slog.i(TAG, "Camera Service");
- mSystemServiceManager.startService(CameraService.class);
+ if (!disableCameraService) {
+ Slog.i(TAG, "Camera Service");
+ mSystemServiceManager.startService(CameraService.class);
+ }
// The AccountManager must come before the ContentService
traceBeginAndSlog("StartAccountManagerService");
@@ -596,10 +604,12 @@ public final class SystemServer {
ServiceManager.addService("vibrator", vibrator);
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
- traceBeginAndSlog("StartConsumerIrService");
- consumerIr = new ConsumerIrService(context);
- ServiceManager.addService(Context.CONSUMER_IR_SERVICE, consumerIr);
- Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+ if (!disableConsumerIr) {
+ traceBeginAndSlog("StartConsumerIrService");
+ consumerIr = new ConsumerIrService(context);
+ ServiceManager.addService(Context.CONSUMER_IR_SERVICE, consumerIr);
+ Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+ }
traceBeginAndSlog("StartAlarmManagerService");
mSystemServiceManager.startService(AlarmManagerService.class);
@@ -622,9 +632,11 @@ public final class SystemServer {
ServiceManager.addService(Context.INPUT_SERVICE, inputManager);
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
- traceBeginAndSlog("StartVrManagerService");
- mSystemServiceManager.startService(VrManagerService.class);
- Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+ if (!disableVrManager) {
+ traceBeginAndSlog("StartVrManagerService");
+ mSystemServiceManager.startService(VrManagerService.class);
+ Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+ }
mActivityManagerService.setWindowManager(wm);
diff --git a/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java b/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java
index 24243a09de90..b6ec49fbaeb2 100644
--- a/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java
@@ -596,7 +596,7 @@ public class ConnectivityServiceTest extends AndroidTestCase {
@Override
protected CaptivePortalProbeResult isCaptivePortal() {
- return new CaptivePortalProbeResult(gen204ProbeResult, gen204ProbeRedirectUrl);
+ return new CaptivePortalProbeResult(gen204ProbeResult, gen204ProbeRedirectUrl, null);
}
}
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 4d946dc365ad..eae82c943ceb 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -286,13 +286,23 @@ public class CarrierConfigManager {
"carrier_wfc_supports_wifi_only_bool";
/**
- * Default WFC_IMS_mode 0: WIFI_ONLY
- * 1: CELLULAR_PREFERRED
- * 2: WIFI_PREFERRED
+ * Default WFC_IMS_MODE for home network 0: WIFI_ONLY
+ * 1: CELLULAR_PREFERRED
+ * 2: WIFI_PREFERRED
* @hide
*/
public static final String KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT =
"carrier_default_wfc_ims_mode_int";
+
+ /**
+ * Default WFC_IMS_MODE for roaming
+ * See {@link KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT} for valid values.
+ *
+ * @hide
+ */
+ public static final String KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT =
+ "carrier_default_wfc_ims_roaming_mode_int";
+
/**
* Default WFC_IMS_enabled: true VoWiFi by default is on
* false VoWiFi by default is off
@@ -957,6 +967,18 @@ public class CarrierConfigManager {
*/
public static final String FILTERED_CNAP_NAMES_STRING_ARRAY = "filtered_cnap_names_string_array";
+ /**
+ * Determine whether user can change Wi-Fi Calling preference in roaming.
+ * {@code false} - roaming preference {@link KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT} is
+ * the same as home preference {@link KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT}
+ * and cannot be changed.
+ * {@code true} - roaming preference can be changed by user independently.
+ *
+ * @hide
+ */
+ public static final String KEY_EDITABLE_WFC_ROAMING_MODE_BOOL =
+ "editable_wfc_roaming_mode_bool";
+
/** The default value for every variable. */
private final static PersistableBundle sDefaults;
@@ -979,6 +1001,7 @@ public class CarrierConfigManager {
sDefaults.putBoolean(KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL, false);
sDefaults.putBoolean(KEY_CARRIER_PROMOTE_WFC_ON_CALL_FAIL_BOOL, false);
sDefaults.putInt(KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT, 2);
+ sDefaults.putInt(KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT, 2);
sDefaults.putBoolean(KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL, false);
sDefaults.putBoolean(KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL, false);
sDefaults.putBoolean(KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL, true);
@@ -1129,6 +1152,7 @@ public class CarrierConfigManager {
sDefaults.putBoolean(KEY_ENHANCED_4G_LTE_TITLE_VARIANT_BOOL, false);
sDefaults.putBoolean(KEY_NOTIFY_VT_HANDOVER_TO_WIFI_FAILURE_BOOL, false);
sDefaults.putStringArray(FILTERED_CNAP_NAMES_STRING_ARRAY, null);
+ sDefaults.putBoolean(KEY_EDITABLE_WFC_ROAMING_MODE_BOOL, false);
}
/**